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
| League | Budget per tick | Burst capacity | Typical fit |
|---|---|---|---|
| FAST | 5 ms | 50 ms | Compact policies, efficient inference, market making, news reaction |
| STANDARD | 50 ms | 500 ms | Learned 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.