Skip to content

API Reference

Complete reference for the fastboxex Python SDK (v3.3).


Module overview

fastboxex
├── Platform           ← entry point: Platform.login(cfg, user, pass)
├── Connection         ← trading channel: submit orders, drain fills
├── Observer           ← read-only monitor: all fills across all connections
├── Arena              ← returned by create_arena() / join_arena() / reconnect_arena()
├── Market             ← live market data: get_latest(), to_polars()
├── SimExchange        ← local simulator: no network, no server
├── SimConnection      ← simulator trading: same API as Connection
├── SimMarket          ← simulator market data: same API as Market
├── load_config()      ← config loader
├── codec              ← Side, OrderStatus, RejectReason, Lifecycle + decode helpers
├── types              ← Fill, Ack, Snapshot, OpenOrder, Position, Portfolio
└── price              ← to_display(), from_float(), tick_round(), ...

Core classes

Class Obtained via Description
Platform Platform.login(cfg, user, pass) Auth + registration + all factory methods
Arena p.create_arena(), p.join_arena(), p.reconnect_arena() Arena lifecycle + connections
Connection p.connection(), arena.connect_generator(), arena.connect_trader(i) Order submission + fills
Market p.market(), p.arena_market() Live market data
Observer p.observer() Read-only fills/portfolio across all connections

Simulator classes

Class Description
SimExchange Local matching engine — no network
SimConnection Same order API as Connection
SimMarket Same data API as Market

See the SimExchange guide for usage.


Quick reference

from fastboxex import Platform, load_config
from fastboxex.price import from_float, to_display
import os

cfg = load_config()
p   = Platform.login(cfg, "alice", os.environ["FASTBOXEX_PASSWORD"])

# Regular trading
conn = p.connection()
conn.activate(asset_id=1)
conn.submit_limit(1, side=0, price=999_900, qty=100, client_tag=1)
fills = conn.drain_fills()

# Market data
market = p.market()
md     = market.get_latest(asset_id=1)
bid, ask = md["bid"], md["ask"]
mid      = (bid + ask) // 2   # no "mid" key — compute it

# Observer (all connections)
obs = p.observer()
all_fills = obs.drain_fills()

# Registration + password reset
Platform.register(cfg, "student", "pass", "student@sjtu.edu.cn")
Platform.confirm_registration(cfg, "student@sjtu.edu.cn", code)
Platform.forgot_password(cfg, "student@sjtu.edu.cn")
Platform.reset_password(cfg, "student@sjtu.edu.cn", token, "newpass")

# Arena
arena = p.create_arena("JTW", num_traders=2, reference_price=from_float(100.00),
                        generator_cash=from_float(50_000_000), generator_inventory=50_000)
gen   = arena.connect_generator()
gen.activate(arena.asset_id)
arena.transition_to("trade")

# SimExchange (no server)
from fastboxex import SimExchange, SimConnection, SimMarket
ex = SimExchange(tick_size=100, lot_size=100, reference_price=1_000_000)
ex.add_asset(1)
pid = ex.add_participant("bot", cash=10_000_000_000, inventory=100_000)
ex.transition_to("Trade")
conn = SimConnection(ex, pid)
conn.submit_limit(1, 0, 999_900, 100, client_tag=1)

Protocol constants

from fastboxex import Side, OrderStatus, RejectReason, Lifecycle
from fastboxex import decode_ack, decode_fill, decode_market
Constant Values
Side BUY=0, SELL=1
OrderStatus New=1, PendingNew=6, Canceled=4, Rejected=8
Lifecycle Closed, Suspended, BookOnly, Auction, Trade

Price utilities

from fastboxex.price import to_display, from_float, tick_round, lot_round

raw     = from_float(100.00)    # → 1_000_000
display = to_display(1_000_000) # → 100.0
aligned = tick_round(1_000_050, tick_size=100)  # → 1_000_000