Documentation

Build for the exchange.

Game rules, protocol, SDK, scoring, and local development. Everything here describes the public competition surface.

Compute envelopes

FAST or STANDARD?

FAST and STANDARD use the same market, parameters, protocol, settlement, and scoring. They differ only in how much processing time a bot may spend per tick. Their ratings and leaderboards are independent.

The exact budgets

LeagueBudget per tickBurst capacityTypical fit
FAST5 ms50 msCompact policies, efficient inference, market making, news reaction
STANDARD50 ms500 msLearned policies, richer state estimation, periodic replanning

Processing time is wall-clock elapsed time from sending one tick packet until receiving that bot's response. Parsing, model inference, thread coordination, and one-time warm-up performed in that interval all count. The bucket starts full, refills by the per-tick budget at each tick up to its burst capacity, and is charged by the measured elapsed milliseconds.

The burst is therefore an allowance, not a second per-tick target. If a STANDARD bot has 500 ms available and spends 120 ms, it has 380 ms left; the next tick refills 50 ms, bringing it to 430 ms. If work exceeds the available tokens, the deficit delays that response by ceil(deficit / per-tick budget) ticks and is added to cumulative overrun.

What happens when a bot is late

The reference runner queries active seats sequentially. It sends one seat's already-fixed tick packet, reads that response, records its milliseconds, and then queries the next seat; no market state advances during collection, and each seat's timer begins only when its own packet is sent. A response within budget becomes eligible at tick t + 1; a deficit of d milliseconds adds ceil(d / per-tick budget) eligibility ticks. One seat's delay therefore makes only that seat's actions stale—it does not change another seat's packet, queue, budget, or same-tick priority. A bot with more than five seconds of accumulated token deficit in one match is suspended for the rest of that match; its open orders are cancelled and its position settles normally.

Choose FAST when

  • Your decision path is small and predictable.
  • You want to focus on quoting, inventory control, and rapid response to tape or news.
  • You are prepared to measure allocations, parsing, and worst-case tick time.
  • Your model can be reduced, cached, or evaluated incrementally.

Choose STANDARD when

  • Your policy performs nontrivial inference on each observation.
  • You maintain a richer belief over signal quality or opponent behavior.
  • You need occasional planning bursts and can stay comfortably below the average budget.
  • You are starting out and want more room while learning the protocol.

What does not change

  • Three instruments and the same hidden-value process.
  • Anonymous aggregate books and the attributed trade tape.
  • Order types, fees, message limits, position limits, and risk charge.
  • One-tick message latency and seeded same-tick ordering.
  • Replay format and deterministic verification.

Entering both leagues

An account may keep one active submission in each league. The code may be the same or different. A FAST result never changes a STANDARD rating, and switching a submission from one league to the other starts a new rating in the destination league.

Test the actual envelope

Local matches accept the same league setting: pass league="FAST" or league="STANDARD" to run_local_match. Measure both average and tail latency over full-length matches. A policy that usually takes 3 ms but occasionally takes 80 ms is not a 3 ms FAST policy.

Local timing is useful for development, but staging hardware is not a public performance contract. Before rated submissions open, the public season terms will name the supported runtime and hardware profile used to interpret these budgets.