Killed at G1 · Discovery

We mined 10,248 strategy rules on a GPU

Breakouts, sweeps, VWAP reversion and engulfing bars on five indices. The best result was weaker than what noise produces.

Markets
Nasdaq-100, S&P 500, Dow 30, Russell 2000, DAX 40
Timeframe
5, 15 and 30-minute bars in four session windows
Period
2005 to 2020 (Discovery only)
Tested
11 October 2026
Variants evaluated
11,712
10,248 rules + 1,464 random and trend controls
Best result
t 3.01
noise bar: t 3.21
Survivors
0
403 variants below t −2.5, 9 above +2.5

Why it failed: Best t 3.01 against 3.21, the 95th percentile of the best result under pure noise. See the scorecard

Every rule we tested

t-statistic of net R per cell (cells with at least 300 trades). Values below −6 are counted in the first bin.

0200400600−6−5−4−3−2−101234t-statistic of each rule's net resultNoise bar t 3.21 · best rule t 3.01
Show the data as a table
t-statisticRules
−6.0 to −5.50
−5.5 to −5.00
−5.0 to −4.54
−4.5 to −4.019
−4.0 to −3.556
−3.5 to −3.0123
−3.0 to −2.5201
−2.5 to −2.0281
−2.0 to −1.5337
−1.5 to −1.0455
−1.0 to −0.5510
−0.5 to 0.0562
0.0 to 0.5460
0.5 to 1.0409
1.0 to 1.5313
1.5 to 2.0196
2.0 to 2.553
2.5 to 3.08
3.0 to 3.51
3.5 to 4.00

The claim

Our own search for a second strategy: every common intraday family a retail trader would try, on every index CFD cheap enough to trade, judged against a pre-registered noise bar.

Source: Lab research, pre-registered (prereg hash recorded before the run)

What we tested

  • Families (42 signal rules per window and timeframe): opening-range breakouts (15, 30, 60 minutes), Donchian breakouts (10, 20, 40 bars), VWAP reversion at 2.0 and 2.5 standard deviations, engulfing bars in three contexts, and liquidity sweeps of the prior day's range, the 30-minute opening range and 20-bar extremes; most with up to three volatility filters.
  • Windows: London morning, New York open, London fix, New York afternoon; 5, 15 and 30-minute bars.
  • Stops of 1.0, 1.5, 2.0 and 3.0 ATR or the signal bar's extreme; targets of 1.5, 2.0 and 2.5R or the window end.
  • Only combinations where the median cost is at most 0.030R were allowed: 25 of the 60 asset-window-timeframe combinations.
  • At most two trades a day, one position at a time.

Costs and fills

  • 1.70 index points per round trip on the Nasdaq-100, 1.25 x the file's spread elsewhere, scaled to price.

Data

  • Index CFD minute bid/ask, true clock (Nasdaq from 2005, the others from 2015)

How the noise bar is built

If you test ten thousand rules, the best one will look good by chance. To know how good, we ran the whole search again on data where any real signal had been destroyed: 1,000 times with the trading days shifted in blocks and 1,000 times with random trade directions. The best rule in those runs had a t-statistic above 3.21 only 5% of the time. That is the bar.

The bar, the grid and the cost filter were frozen and hashed before any result was read.

What came out

Of the 3,988 rules with at least 300 trades, one reached t 3.0 and none reached 3.21. The distribution leans negative: 403 rules below t −2.5 against 9 above +2.5. On these indices, at retail costs, the common families lose their spread.

The random-entry controls topped out at t 2.08 and a simple trend control at 2.91, close to the best 'real' rule.

The nearest miss

Fading a sweep of the 30-minute opening range on the Nasdaq-100 (price pierces the range and closes back inside, 09:45 to 11:30 New York, 15-minute bars) made +0.088R a trade on 1,352 trades, t 3.01. It weakens steadily as the stop widens (t 2.18 at 1.5 ATR, 1.75 at 2.0), its deflated Sharpe ratio is 0.21, and against the noise bar it is an unremarkable best of 10,248 (p about 0.1). The protocol does not let it go forward, and it did not.

A second run, with a trend filter

The same day we ran the search again with a one-hour trend filter on the Nasdaq-100 CFD (336 rules, 2005 to 2020). The engine was unchanged, and the baselines reproduced the first run exactly.

It produced no survivor. The best rule reached t 2.98 against a frozen bar of 3.01. The trend filter kept 54% of the trades and did not raise the average rule (+0.003R against +0.006R without it).

The nearest miss was again a fade of a failed break in the first hours of New York trading, this time of the previous day's range. Two runs, two near misses of the same kind, both under the bar: suggestive, not evidence, and the second run's signals were chosen after we had seen the first.

The 12-gate scorecard

3 passed · 3 failed · 6 not run or not reached. A gate is "not reached" when the strategy had already failed a veto: there is nothing left for it to test.

Is the backtest real?

Absolute veto. These gates look for bugs and physical limits, not for statistical evidence, so one failure ends the test.

  • True-clock loader with sealed Discovery, Validation and Holdout splits.

  • G9Adverse fillsNot reached
  • The GPU engine was checked against a reference simulator before the run (parity self-test).

Is the edge more than luck?

G12, one pre-registered holdout, is the only statistical veto. G1 to G5 and the regime test G6 are always reported; G6 vetoes only a regime that is significantly negative. A strategy with no edge after costs never reaches G12, because there is nothing to confirm.

Can it survive a prop-firm account?

Absolute veto, for strategies meant for funded accounts. The account rules are simulated event by event, not at the end of the day.

Lesson

The best of many backtests is a measure of how many you ran

Before trusting a top result from a parameter search, rerun the search on destroyed data and see what the best result looks like there. If your winner does not beat that, it is not a winner.

Receipts

Every number on this page comes from one of these files: the test script, its saved output, the trade list and, where the test was pre-registered, the registration and its hash lock. Download them and check our work. Numbers that also appear in the chart are recomputed from the trade list when this page is built, and the build fails if they disagree.

FileKindSizeStatussha256
GPU_MINER_REPORT_2026-10-12.md
GPU_MINER_REPORT_2026-10-12.md
Report8 KB3 lines withheld (private strategy)35c50c0798ed
GPU_MINER_RUN_B_REPORT_2026-10-12.md
reports/2026-10/GPU_MINER_RUN_B_REPORT_2026-10-12.md
ReportWithheld: half of the report is a run on futures data we have no licence to publish
PREREG.md
prop_gpu_miner/PREREG.md
Pre-registration13 KB8 lines withheld (private strategy)765cfc030247
PREREG.lock
prop_gpu_miner/PREREG.lock
Hash lock99 BComplete8c1a127ca0e9
results_discovery.parquet
prop_gpu_miner/out/results_discovery.parquet
Results table670 KBCompleteb4d4ba09d2cb

Price data is not included: the vendors' licences do not allow it, so the scripts run only with your own copy of the data, and the trade lists show dates, direction, R and costs, not prices. Lines that refer to the lab's private live strategy are replaced by a marker; the receipts page explains the rules and lists the sha256 of every original file.

Related tests