Methodology
How a robot earns its place on the board, and what the numbers on it do not mean.
Every rule stated here is read from the code that enforces it. This page cannot drift from the engine.
You submit parameters, not code
A robot is 11 numbers and switches — a genome. Nothing you send is ever executed. The engine validates each gene against its allowed range and refuses the submission if any falls outside. This is why the lab can accept robots from strangers.
ATR_periodADX_minTP_RSLrisk_percentuse_session_filteruse_griduse_martingalelot_multiplierbreak_eventrailing_stop
Scored on history it never saw
The search only ever sees the first 75% of the pinned history. The last 25% is held out, and that held-out slice — and only it — produces the number you see on the leaderboard. A robot that memorised the past scores nothing here.
Chronological, never shuffled. The held-out slice is the most recent quarter of history, so a robot is judged on time it never saw.
And on whether the edge repeats
One good window can be luck. The robot is re-run across 5 consecutive walk-forward windows, and the fraction it wins becomes its robustness score. A genuine edge holds across regimes; a fluke wins one window and collapses. Both numbers are shown. Neither is hidden.
robustness = windows profitable ÷ 5. A robot scoring 0.4 won two windows of five — the leaderboard says so.
High drawdown is labeled, never discarded
Winning by luck is still winning. A robot with an enormous profit and a frightening drawdown stays on the board, next to the steadier ones, with its drawdown printed in full. We classify. We do not hide, and we do not delete.
| steady | Steady (DD <= 10%) |
| balanced | Balanced (DD 10-25%) |
| wild | Wild (DD 25-50%) |
| extreme | Extreme (DD > 50%) |
Costs are charged before you see a profit
Spread and slippage are charged on entry and on exit. A strategy that only works with free trading does not work.
spread 25.0 points · slippage 5.0 points charged on entry and exit · commission 0.0 per unit
The dataset is pinned, so proofs stay true
If tomorrow's bar changed the dataset, every proof issued today would stop verifying tomorrow. So the history is pinned to a fixed window that has already ended, with an expected bar count and a checksum. The loader recomputes the checksum and refuses to score anything on data that does not match.
gold-daily-v1 · 2016-07-05 → 2026-06-30 · 2510 bars
sha256 6086b7de9fd83cbf2fda95a05e7541d10a8de307216cc750c699ba41c76bd0ef
Anyone can re-derive the result
Same pinned dataset, same engine, same cost model, same genome, same result — and the same anchor hash. A regression guard runs the whole chain on every commit and fails loudly if any scoring rule moves, because a silent change would break every proof ever issued.
--check-reproducibility re-scores a frozen genome and asserts the exact anchor hash. It exits non-zero on drift.
What these numbers are not
This matters more than anything above.
A backtest is not a promise of profit.
These are simulations from a local reference engine over historical prices. They are not an MT5 Strategy Tester run, not a trading signal, not investment advice, and not a forecast. A robot that ranked first here has never traded a single live order. Past behaviour of a price series does not bind its future. Nothing in this lab connects to a brokerage account, and nothing here should be used to decide what to do with money you cannot afford to lose.
Public-safe research view from the local reference engine. Not an MT5 Strategy Tester run, not a trading signal, not a profit guarantee.