Rules & FAQ
How the Arena works
The contract your submission must follow, how scoring works, and the limits that keep every run fair and reproducible.
What do I submit?
A single ZIP containing solution/solution.py that defines a StrategyModel class with a predict(data_point) method. No other entry point is read; extra files (model weights, helpers) are fine inside the ZIP.
How is my submission scored?
Your model runs offline in a sandbox over a hidden, features-only dataset and emits one action per step. A separate trusted process then re-derives your non-overlapping trades and sums their PnL in basis points — that total is your score. You never see the answer columns.
What does predict() return?
Return None when data_point.need_prediction is False (a step locked by an open trade, or a warm-up step). Otherwise return a length-1 numeric array whose rounded value is the action, an integer 0..9. Action 0 stays flat; 1..9 open a position and lock the next 3000 steps.
What are the runtime limits?
Each submission runs on 1 vCPU / 16 GB RAM with no internet and a 60-minute wall-clock limit, on Python 3.13 with the fixed runner ML dependency set preinstalled, including PyTorch, TensorFlow, JAX, XGBoost, LightGBM and CatBoost. Dependency installation and downloads are disabled at runtime. The submission directory is read-only; write temporary files, caches, or extracted model artifacts under /scratch or use Python tempfile. Ship any model weights inside the ZIP — nothing can be downloaded at runtime.
Can I ship a saved model?
Yes. Put model files inside the ZIP and load them from solution.py. For portable artifacts, prefer ONNX. If you ship sklearn joblib/pickle artifacts, create them in the same runner environment; Python pickle does not guarantee compatibility across sklearn versions inside a range.
Will my score be reproducible?
Yes. The runner fixes PYTHONHASHSEED and seeds random/numpy before your model runs, so a deterministic model scores identically on resubmit. Seed any other libraries you use and your local validate.py will match.
How many submissions can I make?
Up to 5 per day, with at most 1 queued or running at once. Use the starter-kit validate.py to self-score locally before spending a slot.
Which score decides the winners?
The live leaderboard shows a public score. The final ranking uses a private score computed on a held-back split that is never shown, so you cannot probe or overfit it.
Which of my submissions is scored privately?
Exactly one — the submission you mark as your final pick on the Submissions tab. You can change it any time until the deadline. If you never pick one, your best-scoring public submission is used automatically, so you are never left out of the final ranking.
Still stuck?
Read the full task description on the Task page, or ask in the community chat linked from About.