Tournament rulebook.
One protocol, one feed, one clock. Every ranked bot runs under the same conditions so the leaderboard reflects skill — not luck, not selection bias, not who had the fastest private data.
1. Eligibility
- — Open to any individual builder or two-person team, 18+.
- — One active submission per builder per season.
- — Bots must be your own work. Wrapping a third-party signal service without material logic on top is not permitted.
- — Residents of jurisdictions where the underlying venue (e.g. Polymarket, Kalshi) is restricted may still build and submit bots — they run against the shared forward-test feed, not real capital.
2. Submission format
Every submission is a small, self-contained package:
- — Language: Python 3.11 (only runtime for Season 0).
- — Entrypoint: a single class implementing
on_tick(state) -> list[Order]. - — Dependencies: pinned in
requirements.txt, restricted to the published allow-list (numpy, pandas, scipy, scikit-learn, statsmodels, pydantic, orjson). - — Artifact size: ≤ 1 MB, uploaded as a single zip.
- — Resource caps per tick: 0.5 vCPU, 512 MB RAM, 30 s wall-clock.
3. Season cadence
- — Seasons run 90 days end-to-end.
- — A 2-week submission window opens before each season.
- — A 1-week paper-trading shakedown validates every bot end-to-end.
- — After close, results are locked; the top 10 receive a final replay audit.
4. Market universe
The universe is fixed at season start and published to the methodology page. Season 0 targets the top-liquidity Polymarket CLOB markets by 7-day rolling volume, capped at 10 markets to keep the feed deterministic. Bots may trade any subset of those markets; markets added or resolved mid-season do not enter the universe.
5. Standardized inputs
- — Data feed: a single shared Polymarket CLOB websocket ingested by our engine, normalized to
(ts, market_id, mid, bid, ask, last, size)ticks, replayed identically to every bot. - — Timeframe: 1-second tick resolution; bots may downsample but not request a finer feed.
- — Fees: flat 2 % taker, 0 % maker modelled at fill time.
- — Slippage: marketable orders cross the book at the recorded top-of-book snapshot ± a published spread buffer; resting orders match when the book crosses them.
- — Starting capital: $10,000 virtual USDC per bot.
6. Scoring
Rank is a weighted composite: risk-adjusted return (40 %), Sharpe (25 %), max drawdown (20 %), win rate (15 %). Full formulas and normalization live on the methodology page.
A minimum of 30 live trading days is required to appear on the ranked leaderboard. Bots below that threshold show in an "unranked" shadow list.
7. Disqualification triggers
- — Lookahead: reading any tick with a timestamp beyond the current virtual clock.
- — Private data: fetching or embedding external feeds not published in the season universe.
- — Sandbox breakout: outbound network calls, filesystem writes outside
/tmp, subprocesses, or importing packages outside the allow-list. - — Non-determinism: RNG without the provided seed, or logic changes mid-run.
- — Runtime failure: more than 1 % of ticks lost to exceptions, timeouts, or OOM kills.
- — Copying: submissions substantially identical to another entry.
8. Prize distribution
Prize pools are sponsored per season and announced at the submission window opening. A representative split for a $10,000 pool:
- — 1st: 40 %
- — 2nd: 20 %
- — 3rd: 12 %
- — 4th–10th: 4 % each
Payouts are made in USDC on Polygon within 14 days of season close, after the replay audit clears.
9. Appeals
Any builder may request a full replay of any ranked run — their own or a competitor's — within 7 days of the season closing. Appeals are reviewed by two independent verifiers from the community and one ScriptSamurai maintainer. All decisions and the underlying replay logs are published.
Ready to submit? Season 0 opens on Discord.