← How We Test  /  The Gauntlet
Adversarial Backtesting Protocol

Worthless until it survives.

A profitable backtest is a hypothesis, not a discovery. The Gauntlet is a fixed battery of attacks a candidate strategy must pass — each one engineered to kill it a different way. What comes out the other side is what survived every attempt to break it.

01 — The Stance

We start from worthless.

Most backtests are built to agree with you. Tune the settings, climb the curve, call it an edge. Usually it's just noise in a costume.

The Gauntlet flips that. Every strategy is worthless until it survives. We set the kill bar first, then try to break it every way we can. Fail once, it's dead. Only survivors get capital.

02 — The Honest Baseline

Nothing is tested until it survives friction.

Every attack measures against one baseline — a deliberately unflattering one that charges the real costs of trading up front. Not positive here? There's nothing to defend.

Signals
All of them — no cherry-picked subset
Fill
Limit at the level + realistic slippage
Exit
Held to a fixed rule, not a hindsight peak
Risk
Hard stop + account-survivability cage
Cost
Commission & spread deducted per trade
Standard
Positive net expectancy, or discard
03 — The Battery

Seven trials, run in order.

Each stage isolates one failure mode and asks a question the equity curve alone cannot answer. A single kill ends the run.

1
Attacks · the fill · fill-bias masquerading as signal

Random-limit placebo

Fabricate arbitrary price levels at the same distances, same directions, and same times of day as the real signals, then run them through identical fill mechanics. If genuine "levels" don't beat these fakes by a wide margin, the edge was never the level — it was the way a limit order gets filled on a wick.

KILL IF the measured edge sits inside the placebo cloud.
2
Attacks · the margin · edges that only exist frictionless

Slippage & cost stress

Re-run the strategy across a sweep of worsening execution — slippage from half a point to three points, cost from two points to four. A real edge degrades gracefully and stays above water. A marginal one evaporates the moment you charge it what trading actually costs.

KILL IF net expectancy ≤ 0 at any realistic friction level.
3
Attacks · the entry · exact-fill artifacts

Lag test

Enter the trade zero, one, three, and six bars after the trigger instead of at the precise touch. If the edge decays smoothly, it is a real property of the level that persists through time. If it collapses to negative the instant you delay by one bar, it was only capturing an unrepeatable exact-fill tick.

KILL IF the edge collapses to negative one bar off the exact touch.
4
Attacks · the assumption · dependence on a perfect touch

Market-fill (the chase)

Force a market entry at the next bar's open instead of waiting for a limit to be hit. This reveals how much of the edge lives in patient, passive execution versus chasing price. A negative result here isn't necessarily fatal for a limit-based setup — but it tells you exactly what discipline the edge requires to exist.

READ negative ⇒ "requires the limit," not a kill of the setup.
5
Attacks · the fit · overfitting & curve-tuned parameters

Walk-forward

Optimize every parameter on an in-sample window, freeze the winning settings, and test them on untouched out-of-sample history the optimizer never saw. This is the difference between an edge and a memory. Parameters tuned to the past predict nothing about the future — and this stage is where most beautiful backtests quietly die.

KILL IF out-of-sample expectancy ≤ 0.
6
Attacks · the record · luck disguised as skill

Sign-flip block permutation

Take the strategy's realized daily P&L and randomly flip the sign of each day, thousands of times, to build the distribution of outcomes pure chance could have produced. Flipping whole days — not individual trades — respects the correlation between trades taken on the same day. If the real record can't be distinguished from that noise, "six positive years" was a coin landing heads.

KILL IF p > 0.05 — indistinguishable from luck.
7
Attacks · the universe · single-market data-mining · the acid test

Cross-instrument replication

Re-run the whole strategy, ATR-scaled, on a different but related market — the same structural logic on independent price data. A true market structure shows up in both. A pattern mined out of one instrument's noise flips sign or vanishes. This is the single hardest stage to fake, because you cannot overfit a market you didn't touch.

KILL IF the edge flips sign across instruments — the tell of an artifact.
Case File

The basket that passed everything — and still died.

The Gauntlet is ruthless, but it is not the last word. Here is a real example of a strategy that cleared all seven trials, reached the deploy queue, and was killed anyway. Verdict numbers below are illustrative of the format.

Post-mortem · continuation basket

A netted book that looked ready for live.

7 / 7 passed queued for live ✕ killed in verification

A netted basket of continuation strategies came through the Gauntlet cleaner than almost anything we'd tested. The honest baseline was positive net of costs. The placebo couldn't touch it. It shrugged off slippage and cost stress. It decayed gracefully under entry lag. Walk-forward held out-of-sample on years the optimizer never saw. Sign-flip permutation put it near p < 0.01. And the acid test — the same logic, ATR-scaled, on a second market — came back the same sign.

Seven green verdicts. On paper, it was ready — it went into the deploy queue.

Then it hit the last gate: the Clean-Room Rebuild. Our standing rule is that nothing is built on a result until a second engineer reproduces it from scratch, sharing zero code with the original. The rebuild was written from the specification alone. It did not reproduce the number. The edge collapsed to a coin flip — ~49%, indistinguishable from noise.

The autopsy. The original code armed a signal on a bar's close and filled it at that same bar's low. In a backtest that's a fill you would never get live — the strategy was quietly using the bar's own future to enter at a price the market had already left. A look-ahead of a single bar.

Why the Gauntlet missed it. All seven stages ran through the same generator that contained the leak. Placebo, walk-forward, permutation — every one inherited the contamination. Even cross-instrument replication passed, because both markets ran the same leaky code. The only thing that could catch it was a build that shared none of that code and had to reconstruct the fill logic honestly. That build killed it in an afternoon.

It never reached a single live dollar. That is the entire point of the last gate — and the reason the Gauntlet runs alongside the Clean-Room Rebuild, never in place of it.

04 — What the Gauntlet Cannot See

Surviving is necessary. It is not sufficient.

The Gauntlet is built to catch three killers: data-mining, overfitting, and luck. Against those, it is ruthless. But it shares one blind spot with every backtest ever written — look-ahead. If a signal is secretly built from information it wouldn't have had in real time, every stage inherits that leak. Placebo, walk-forward, permutation, cross-instrument — all of them can pass, because all of them run through the same contaminated generator.

The standing rule: before anything is built on a result, it must survive the Clean-Room Rebuild — a second build made from scratch with zero shared code. Built twice; if the two builds disagree, it dies. The Gauntlet runs alongside that check — never in place of it.

Most candidates enter the Gauntlet. Almost none walk out.

That is the point. A protocol that passes everything is measuring nothing — the value is in how honestly, and how early, the rest are killed.