Skip to content
EN
Send my files

Your backtest says you’re winning.
We tell you whether that holds up.

One question: is this a strategy, or is it luck, well presented? And an answer almost nobody publishes: what we could not check.

01The problem

The problem isn’t that your bot lies.
It’s that you went looking.

You tried a hundred combinations and kept the best one. That is the sensible thing to do. But across a hundred tries one always comes out good by chance.

That does not show up on the equity curve — the curve only shows you the winner, which is why it always goes up. It has to be measured.

Test 01 · out-of-sample decay
Each configuration appears as a dot: its result inside the period it was chosen on, against its result outside it. The dots fall below the diagonal.
Each dot is the same configuration measured twice: on the slice of history it was chosen on (horizontal) and on the slice that played no part in choosing it (vertical). If the bot were solid, the dots would follow the diagonal. Here they drop: the harder the result was squeezed, the less it travels. Real grid from an audited bot.

02Disqualifiers

Four things disqualify a bot on their own

However good everything else is. And if one of them cannot be checked with the data you send, we say so: a rule that was not evaluated is not a rule that was passed.

R-04 · disqualifier

Hidden martingale

Opening more positions at worse prices to cover one that is going badly. It produces flawless years, then takes the account in four days.

Test 02 · a real martingale basket
Eight positions opened against the same loss, each larger than the last and at a worse price.
A martingale is not spotted in the result: it is visible in the shape. Eight positions opened against the same loss, each one larger than the last and at a worse price. This basket — from a real bot — ended up costing €1,116. Its equity curve, right up to that day, was spotless.

03The order of the losses

Your losses: did they arrive spread out, or all at once?

We take your trades, shuffle them two thousand times and look at the drawdown the account would have taken in each alternative history. Same trades, same final result, different order.

Test 03 · 2,000 reorderings
Distribution of maximum drawdown across 2,000 reorderings. The real drawdown sits far to the right of most of them.
The red bar is what actually happened. Half of the alternative histories stopped at a 13 % drawdown; the real one was 26 %. That gap is not bad luck: it means this bot’s losses cluster, and that shows up in no summary figure.

04Declared limits

We publish what our tests cannot see

Anyone can compute a number. Almost nobody measures how often that number is wrong. These figures come from our own engine:

23.5%

of detection

That is what the overfitting test catches when the overfitting is genuinely severe. If it doesn't fire, that isn't proof your bot is clean — and we say so in the report.

62%

real coverage

An interval advertised as “90 % confidence” is right 62 % of the time when only 5 trades sit in the tail. A narrow interval is not a sign of reliability.

56%

and it doesn't fire

Our martingale detector demands the pattern in 80 % of cases, because it is calibrated against programs. A person averaging down sometimes slips past us. It is measured, and it is declared.

4%

of detection

If you hold two bots and want to know whether they sink together: with the track record they usually share, we would spot a weak dependence 4 times in 100. A strong one we do see. That is why we state how far we reach, instead of handing you a joint-collapse probability we could not defend.

A measurement whose limit is unknown is not a measurement: it is an opinion with decimals.

05Getting started

You don’t have to hand us your code

The statistical certificate comes out of the trade history. Your intellectual property stays with you. The more you send, the more we can measure — and we tell you exactly what each item unlocks before you go to any trouble.

There are three separate files, and you need not send all of them, nor in order: each unlocks its own part. One is enough to start.

Backtest results

You already have it

The report you saved when a run finished, or the exported list of trades. It is the one almost everybody already has.

Unlocks: risk of ruin, real maximum drawdown, alternative scenarios, concentration of the result, and the position-management pattern.

Price bars for your instrument

Export one file

A CSV that starts with <DATE> <TIME> <OPEN> <HIGH> <LOW> <CLOSE>. Your own platform exports it in a couple of clicks.

Unlocks: the check against the market — whether the prices it claims to have entered at really existed at that moment.

The optimisation

Depends which

There are two very different options here, and the first costs you nothing.

  • The one your platform already saved. If you ever ran an optimisation, that file exists and you only have to go and find it. It costs nothing.
  • A fresh optimisation with our line of code. It is the only one that lets us compute the probability that your winner is luck. Ten minutes of setup, then it runs by itself.

Unlocks: how many times you really searched, and the probability that your winning configuration is a coincidence.

I already have my files

Send them over and we’ll tell you what can be measured

Attach whatever you have — even if it is only the backtest report — and we write back telling you what coverage we would reach with that and what you would still be missing, before you do any extra work.

Send my files

I don’t know how to get them

We walk you through it, step by step

Guides with a screenshot of every screen, and a four-line summary at the top for anyone who already knows their way around and would rather not read the whole thing.

See the guides