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.
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.
Show the data as a table
| t-statistic | Rules |
|---|---|
| −6.0 to −5.5 | 0 |
| −5.5 to −5.0 | 0 |
| −5.0 to −4.5 | 4 |
| −4.5 to −4.0 | 19 |
| −4.0 to −3.5 | 56 |
| −3.5 to −3.0 | 123 |
| −3.0 to −2.5 | 201 |
| −2.5 to −2.0 | 281 |
| −2.0 to −1.5 | 337 |
| −1.5 to −1.0 | 455 |
| −1.0 to −0.5 | 510 |
| −0.5 to 0.0 | 562 |
| 0.0 to 0.5 | 460 |
| 0.5 to 1.0 | 409 |
| 1.0 to 1.5 | 313 |
| 1.5 to 2.0 | 196 |
| 2.0 to 2.5 | 53 |
| 2.5 to 3.0 | 8 |
| 3.0 to 3.5 | 1 |
| 3.5 to 4.0 | 0 |
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.
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.
Best t 3.01 against a family-wise noise bar of 3.21 (p 0.085 to 0.108). Deflated Sharpe 0.21.
Random-entry controls reach t 2.08 and a trend control 2.91, close to the best rule.
The nearest miss weakens monotonically with the stop: t 3.01, 2.18, 1.75.
Applied as an entry filter: only combinations with median cost at most 0.030R were searched.
Validation and holdout stayed sealed: no candidate 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.
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.
| File | Kind | Size | Status | sha256 |
|---|---|---|---|---|
| GPU_MINER_REPORT_2026-10-12.md GPU_MINER_REPORT_2026-10-12.md | Report | 8 KB | 3 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 | Report | Withheld: half of the report is a run on futures data we have no licence to publish | ||
| PREREG.md prop_gpu_miner/PREREG.md | Pre-registration | 13 KB | 8 lines withheld (private strategy) | 765cfc030247 |
| PREREG.lock prop_gpu_miner/PREREG.lock | Hash lock | 99 B | Complete | 8c1a127ca0e9 |
| results_discovery.parquet prop_gpu_miner/out/results_discovery.parquet | Results table | 670 KB | Complete | b4d4ba09d2cb |
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
Nasdaq breakouts on high-fear days
Passed eleven of twelve gates, then lost money on the holdout nobody had seen.
Weak-day reversal (lower high, lower low)
Buy the break of a weak day's high. Small, positive, and not distinguishable from noise.