reproducible researcharXiv q-fin.STarXiv-ready

The Honest Negative: A Plausible Out-of-Sample and Holdout Winner Is Best-of-Noise Once Search Multiplicity Is Priced In

Eugen Soloviov · Independent Researcher

Part of the "Backtests Without Illusions" series. On a driftless, no-edge random walk, a search winner posts a tempting +49.00% out-of-sample and a positive +2.66% holdout — yet it sits inside the pure-noise band once multiplicity is priced in.

Abstract

A parameter search is a machine for finding the luckiest of N strategies, and its winner posts an attractive number because it was selected, not because it has an edge. We demonstrate this with a fully controlled calibration: a dual-timeframe moving-average-cross search over a single price series that is a driftless geometric random walk — a data-generating process with no planted edge, so the ground-truth answer is known to be “reject.” Sweeping 180 configurations (fast/slow/trend grids over simple and Hull moving averages) and selecting the winner by best out-of-sample (OOS) Sharpe produces a tempting survivor: OOS return +49.00\% (OOS Sharpe 0.0593 per bar, annualized 0.941) and, on an untouched holdout, a still-positive +2.66\%. The naive single-hypothesis test — the one a library prints for the survivor of a search — flags it significant (t=1.703, p=0.0443<0.05). Then we price the search. The Deflated Sharpe Ratio (DSR), the Probabilistic Sharpe Ratio evaluated at the extreme-value noise ceiling of the False Strategy Theorem, fails the 0.95 gate against both the charitable effective trial count (\mathrm{DSR}=0.8415, N_{\mathrm{eff}}=1.37) and the raw count (\mathrm{DSR}=0.3538, N=180). An empirical best-of-N pure-noise null (5000 simulations) confirms the verdict from the opposite direction: the winner's OOS Sharpe sits at the raw-N null quantile 0.0004 — essentially the floor of what the luckiest of 180 zero-edge coin-flippers posts (their mean best-of-N Sharpe is 0.0944) — so it lies inside the pure-noise band. The naive and deflated verdicts disagree, and the disagreement is the whole point: the honest conclusion is no robust edge. We stress that the holdout's positive +2.66\% passed by the same luck as the OOS number and is not independent corroboration. Because the DGP has no edge by construction, this is a calibration of the multiple-testing apparatus against a known negative, not a claim about any real market. All numbers derive from one seeded run of one public harness (scripts/run_all.py). This study accompanies a marketmaker.cc blog post.

This is the interactive web rendering of the paper (math via KaTeX, tables). The LaTeX source is the authoritative version; every number is reproducible from the open-source code and seeds.


Introduction

A backtest evaluates one strategy; a search evaluates thousands and reports the best. These are not the same experiment, and the statistic that is honest for the first is a lie for the second. When you fit no parameters and test a single pre-registered rule, a positive out-of-sample Sharpe with p<0.05 is weak but real evidence. When you sweep a grid, rank by out-of-sample score, and report the winner, the very act of taking the maximum manufactures a positive Sharpe out of nothing: with enough trials, the luckiest of N zero-edge strategies is expected to sit several standard deviations above zero [3]. The winner's number is large because it was selected, and a test that does not know a selection happened will call the shadow of the search an edge.

The out-of-sample split does not save you. Practitioners reach for a held-out window as a talisman against overfitting, and against look-ahead leakage it works — data the search never fit cannot leak into it. But an OOS window used to choose the winner is clean of look-ahead and dirty with selection: you picked the survivor partly by how it did there. A second, truly untouched holdout is a stronger wall, yet a single search winner carried onto it can still clear it by luck — a coin that came up heads twice is not a biased coin. The only instrument that separates “won a lottery” from “has an edge” is one that prices in how many tickets were bought [5, 2, 6].

This paper is a controlled calibration of that instrument against a case where the correct answer is known in advance. We generate one price series that is a driftless geometric random walk: by construction it contains no trend, no predictability, no edge of any kind. We then run a realistic dual-timeframe moving-average-cross search over it, select a winner by out-of-sample Sharpe, and carry that winner onto an untouched holdout — reproducing, at controlled scale, the exact shape of a tempting result (a large positive OOS return and a small positive holdout return, the calibrated analogue of an ETHUSDT +16.35\%~/~+2.62\% single-symbol study). Because the ground truth is “no edge,” every apparatus we apply has a known target: it must reject. We report what four readings say — the naive per-strategy test, the DSR against the effective trial count, the DSR against the raw trial count, and an empirical best-of-N pure-noise null — and show that the naive test is fooled while the three multiplicity-aware readings all reject, in agreement, from independent directions.

Scope and honesty constraints.

Two constraints bound the claims. First, the DGP has no planted edge (meta.price_drift~=0); this is a demonstration that a plausible OOS+holdout winner from a realistic search is statistically indistinguishable from noise, not a market prediction or a tradable strategy. Second, the study is a single seed and a single DGP: it calibrates the multiple-testing machinery on a known negative, and the specific numbers (+49.00\%, \mathrm{DSR}=0.3538, and so on) are properties of that one seeded run, not universal constants. All statistics are reimplemented from scratch on NumPy [4] against the primary sources — no black-box library — with methods in scripts/search.py and scripts/stats.py and the harness in scripts/run_all.py.

Setup: a no-edge DGP, a realistic grid, and an honest split

The data-generating process.

The single symbol's close is a geometric random walk of n=3000 bars, \log p_t = \log p_0 + \sum_{i\le t}\varepsilon_i with \varepsilon_i \sim \mathcal{N}(0,\sigma^2) i.i.d., per-bar volatility \sigma=0.012, and zero drift. Zero drift is the entire point: there is no exploitable structure, so any strategy's apparent OOS profit is pure selection. The path is drawn once from numpy.random.default_rng(16).

The search grid.

We sweep a dual-timeframe MA-cross family: a fast/slow crossover on a trading timeframe, gated by a slower “trend” MA (long only when price is above trend). The grid is \text{fast}\in\{2,3,5,8,13,21\}, \text{slow}\in\{34,55,89,144\}, \text{trend}\in\{100,150,200,250\}, over two MA families (simple and Hull), enumerated under \text{fast}<\text{slow}<\text{trend}, giving N=180 valid configurations. Execution is honest and causal: the signal is decided on the close of bar i and the position held over bar i{+}1's return, with a one-bar lag and no look-ahead.

The split.

Of the 3000 bars, a 250-bar warm-up is reserved for MA initialization; the 2750 usable bars are split into in-sample (IS, 50\%, 1375 bars), out-of-sample (OOS, 30\%, 825 bars), and an untouched holdout (the remainder, 550 bars). The winner is the configuration with the best OOS Sharpe; it is carried once onto the holdout, which no selection ever touched. Table 1 collects the configuration.

Table 1. The controlled setup (seed 16). A driftless geometric random walk (no planted edge), a 180-config dual-timeframe MA-cross grid, and an IS/OOS/holdout split; the winner is selected by best OOS Sharpe.
Quantity Value
price bars n 3000
per-bar volatility \sigma 0.012
price drift 0.0
warm-up bars 250
in-sample bars 1375
out-of-sample bars 825
holdout bars 550
search configurations N 180
significance level \alpha 0.05
DSR gate 1-\alpha 0.95
best-of-N null simulations 5000

The winner and its tempting numbers

Selecting by best OOS Sharpe crowns a simple-MA configuration (fast =8, slow =55, trend =100), trial index 49 of 180. Its numbers are exactly the kind that get capital allocated (Table 2). On the out-of-sample window — data used only to score, never to fit — it returns +49.00\%, an OOS Sharpe of 0.0593 per bar (annualized 0.941). Its in-sample Sharpe is actually slightly negative (-0.0250, IS return -22.93\%), which only sharpens the illusion: the winner did not look special in-sample and “came alive” out-of-sample, the textbook signature practitioners read as robustness. Then the second wall: carried onto the untouched holdout, it holds a positive +2.66\%. A clean walk-forward, a positive holdout, an honest one-bar execution model, and no look-ahead leak — stop here and you ship it.

The return distribution offers no warning either: the OOS stream has mild negative skew (-0.077) and heavy tails (non-excess kurtosis 5.45), unremarkable for a bar-level long/flat series. Nothing in the winner's own statistics reveals that it is the maximum of 180 draws from a process with no edge. That information lives not in the winner but in the search.

Table 2. The tempting winner (fast 8, slow 55, trend 100, simple MA; trial 49 of 180; seed 16). A large positive OOS return and Sharpe, and a still positive holdout return — despite a driftless, no-edge DGP. These are the numbers the rest of the paper deflates.
Quantity Value
in-sample Sharpe (per bar) -0.02500
in-sample return -22.93\%
OOS Sharpe (per bar) 0.05929
OOS Sharpe (annualized) 0.9412
OOS return +49.00\%
holdout Sharpe (per bar) 0.01016
holdout return +2.66\%
OOS skew -0.07706
OOS kurtosis (non-excess) 5.447

Pricing the multiplicity

We now price the search four ways: the naive per-strategy test that ignores it, the DSR against the effective and raw trial counts, and a direct best-of-N noise null.

The naive test (fooled).

The single-hypothesis, one-sided t-test on the winner's Sharpe treats it as if it were the only strategy ever evaluated: \begin{equation} \label{eq:naive} t = \mathrm{SR}\,\sqrt{n_{\mathrm{oos}}}, \qquad p = 1-\Phi(t), \end{equation} with \Phi the standard-Normal CDF. Here t = 0.0593\sqrt{825} = 1.703 and p = 0.0443 < 0.05: significant. This is precisely the test that lies on the survivor of a search — it has no term for N.

The noise ceiling (False Strategy Theorem).

With N trials whose per-bar Sharpes have cross-trial mean \mu_{\mathrm{SR}} and variance v_{\mathrm{SR}}, the expected maximum under zero edge is, to the extreme-value approximation of Bailey and López de Prado [3], \begin{equation} \label{eq:fst} \mathrm{SR}_0 = \mu_{\mathrm{SR}} + \sqrt{v_{\mathrm{SR}}}\, \Big[(1-\gamma)\,\Phi^{-1}\!\big(1-\tfrac1N\big) + \gamma\,\Phi^{-1}\!\big(1-\tfrac1{N e}\big)\Big], \end{equation} with \gamma the Euler–Mascheroni constant. The search's Sharpes have \mu_{\mathrm{SR}}=0.02251 and standard deviation 0.01827, so \mathrm{SR}_0 rises with N: this is the bar the winner must clear, and it climbs the harder you look.

The Deflated Sharpe Ratio.

The DSR is the Probabilistic Sharpe Ratio [1] evaluated at \mathrm{SR}^\star=\mathrm{SR}_0 instead of at zero, correcting for sample length and the return shape (g_3,g_4) (skew and non-excess kurtosis): \begin{equation} \label{eq:dsr} \mathrm{DSR} = \Phi\!\left(\frac{(\mathrm{SR}-\mathrm{SR}_0)\sqrt{n_{\mathrm{oos}}-1}} {\sqrt{1 - g_3\,\mathrm{SR} + \tfrac{g_4-1}{4}\,\mathrm{SR}^2}}\right), \end{equation} and a discovery requires \mathrm{DSR} \ge 1-\alpha = 0.95. For reference, the undeflated PSR against zero is 0.9549 — itself just clearing the bar, which is why the naive test fires. Deflation moves the benchmark up to \mathrm{SR}_0 and the probability collapses.

Effective vs. raw trials.

A dense MA grid is highly correlated: neighboring configurations are near-duplicate strategies, so the raw count N=180 over-counts the independent looks. We estimate an effective count from the average pairwise correlation \bar\rho of the per-trial OOS return streams, N_{\mathrm{eff}} = N/[1+(N-1)\bar\rho] clipped to [1,N], which yields N_{\mathrm{eff}}=1.37. We report the DSR against both counts. Deflating against N_{\mathrm{eff}} is the charitable reading — the smallest defensible trial count, the one least likely to reject a genuine edge — and even it fails: \mathrm{DSR}_{\mathrm{eff}}=0.8415 < 0.95. Against the raw N=180 the noise ceiling is higher still and the DSR falls to 0.3538. Both are below the gate, so deflated_says_edge is false either way (Table 3).

The best-of-N pure-noise null.

Finally we check the theorem empirically, making no distributional assumption about the winner. We simulate 5000 independent searches, each drawing N strategies of 825 zero-edge Normal returns and keeping the best per-bar Sharpe, and ask where the real winner falls in that best-of-N distribution. Against the raw count N=180 the null's central 95\% band is [0.0715,\,0.1261] with mean best-of-N Sharpe 0.0944; the winner's 0.0593 sits at quantile 0.0004 — below essentially every pure-noise search's best draw, and comfortably inside (in fact beneath the center of) the band. The winner is not merely consistent with best-of-noise; it is a slightly unlucky best-of-noise. winner_inside_null is true.

Table 3. Pricing the search (seed 16). The naive per-strategy test is fooled; all three multiplicity-aware readings reject. The DSR fails the 0.95 gate against both the charitable effective trial count (N_{\mathrm{eff}}=1.37) and the raw count (N=180), and the winner sits at the very bottom of the raw-N best-of-noise null. The undeflated PSR against zero (0.9549) is what the naive view sees before the search is priced.
Reading Statistic Value Gate / verdict
Naive per-strategy t-stat 1.703
Naive per-strategy p-value 0.04429 <0.05: significant
PSR vs. zero (undeflated) \mathrm{PSR}(\mathrm{SR}^\star{=}0) 0.9549 (pre-search)
DSR, effective N \mathrm{SR}_0 0.02428
DSR, effective N N_{\mathrm{eff}} 1.370
DSR, effective N \mathrm{DSR} 0.8415 <0.95: no edge
DSR, raw N \mathrm{SR}_0 0.07241
DSR, raw N N 180
DSR, raw N \mathrm{DSR} 0.3538 <0.95: no edge
Best-of-N null (raw) winner OOS Sharpe 0.05929
Best-of-N null (raw) null mean Sharpe 0.09441
Best-of-N null (raw) winner quantile 0.0004 inside noise band
Best-of-N null (raw) null 95\% band [0.0715,0.1261]

Results

Table 4 states the whole verdict. The naive test says edge; the deflated / multiplicity-aware verdict says no edge; they disagree, and that disagreement is the finding. All three multiplicity-aware readings agree with each other and with the known ground truth. The winner sits inside the pure-noise best-of-N null. The verdict is no robust edge.

The three readings converge from independent directions. The effective-N DSR (0.8415) is a parametric statement about the winner alone, deflated against the most favorable trial count we can defend — and it still falls short of the gate. The raw-N DSR (0.3538) prices the full look count and drops further, showing the verdict is not an artifact of how we count trials: it holds across the entire [\,N_{\mathrm{eff}}, N\,] = [1.37, 180] range. The best-of-N null is non-parametric and assumption-free: the winner's OOS Sharpe is smaller than the best draw of essentially every one of 5000 pure-noise searches (quantile 0.0004, mean best-of-N Sharpe 0.0944 vs. the winner's 0.0593). Parametric and non-parametric, effective and raw, all four numbers point the same way, and that way is the way the DGP was built.

Table 4. The verdict (seed 16). Naive says edge, deflated says no edge, and they disagree — the whole point. All multiplicity-aware readings reject, and the winner sits inside the pure-noise null. Verdict: no robust edge, matching the known no-edge DGP.
Claim Value
naive says edge true
deflated says edge false
naive vs. deflated disagree true
winner inside pure-noise null true
verdict no robust edge

Discussion

Why the holdout also passed by luck.

The tempting reading of the +2.66\% holdout is that it is independent corroboration — a second wall the strategy cleared, so surely something is there. It is not. The holdout is a single new window evaluated once for the one configuration the search already crowned. A driftless random walk over 550 bars has a return distribution centered near zero but with real dispersion; a long/flat strategy on it posts a positive total return with probability not far from one-half. Getting a positive holdout after a positive OOS is a coin coming up heads twice, not evidence of bias. The selection pressure that inflated the OOS number does not touch the holdout, but nothing deflates it toward zero either: it is one noisy draw that happened to land positive and small, exactly as likely under no-edge as under edge. A holdout can falsify (a strongly negative holdout would have killed the winner outright), but a mildly positive holdout confirms nothing. Corroboration would require the edge to appear on many independent windows or instruments; here we have one window and it is uninformative.

A search is a machine for finding the luckiest of N.

The winner's in-sample Sharpe is negative and its OOS Sharpe is positive not because it “learned” anything but because, among 180 draws from a zero-mean process, some draw is largest on any given window and the search returns it. The False Strategy Theorem quantifies exactly how large that lucky draw is expected to be, and the best-of-N null realizes it directly: the winner is not even an above-average best-of-noise, it is slightly below the pure-noise mean. The entire apparent edge is the shadow of taking a maximum over N.

The right benchmark is the noise ceiling, never zero.

The naive test fails for one reason: it compares the winner to zero. Every statistic that compares it to \mathrm{SR}_0 instead — the expected best of N zero-edge trials — rejects. This is the single transferable lesson: after any search, the question is never “is the winner's Sharpe positive?” (of course it is; you took the maximum) but “is it beyond what the luckiest of N coin-flippers would post?” Only the second question has a defensible answer, and here that answer is no.

Publish the negative.

Because the DGP has no edge, the correct result is the negative one, and reporting it is the apparatus working as designed. The value of a rigorous “no” is the capital never deployed against noise — the drawdown never taken. A worse-instrumented pipeline would have shipped the +49.00\%: a clean walk-forward, a positive holdout, no leak, and a plausible story, all of it wrong.

Limitations

Conclusion

A parameter search is a machine for finding the luckiest of N strategies, and its winner's number is large because it was selected. We demonstrated this on a driftless random walk with no edge: a 180-config dual-timeframe MA-cross search crowned a winner with a tempting +49.00\% out-of-sample return (Sharpe 0.0593, annualized 0.941) and a still-positive +2.66\% holdout, which the naive per-strategy test duly flagged significant (t=1.703, p=0.0443). Pricing the search reversed the verdict from every multiplicity-aware direction at once: the Deflated Sharpe Ratio failed the 0.95 gate against both the charitable effective trial count (\mathrm{DSR}=0.8415, N_{\mathrm{eff}}=1.37) and the raw count (\mathrm{DSR}=0.3538, N=180), and the winner landed at the raw-N best-of-noise null quantile 0.0004, below the pure-noise mean (0.0944) and squarely inside the band. Naive and deflated disagree, and the disagreement is the entire lesson: a clean out-of-sample number clears look-ahead, but only deflation clears selection, and the holdout that also “passed” passed by the same luck. Because the DGP has no edge, the correct verdict is the negative one — no robust edge — and producing it is the apparatus working exactly as designed. After a search, benchmark the winner against the noise ceiling of the luckiest of N, never against zero; if it does not clear that bar, the honest result is no.

Reproducibility.

All numbers derive from one seeded run. scripts/run_all.py regenerates results/results.json from seed 16 (Python 3.12.3, NumPy 2.5.1) deterministically; the search, MA family, and IS/OOS/holdout split are in scripts/search.py, and the from-scratch statistics (Sharpe, PSR, expected-max Sharpe, DSR, effective-N, best-of-N null) in scripts/stats.py. The price series is a driftless geometric random walk from numpy.random.default_rng(16) (n=3000 bars, per-bar volatility 0.012, zero drift); the best-of-N null uses default_rng(999) over 5000 simulations. tests/ contains deterministic invariant tests for the statistics, the search, and the naive-vs-deflated disagreement.

References

[1]
David H. Bailey and Marcos López de Prado. The Sharpe ratio efficient frontier. Journal of Risk, 15(2):3–44, 2012. doi: 10.21314/JOR.2012.255. The Probabilistic Sharpe Ratio (PSR): probability the true Sharpe exceeds a benchmark given sample length, skew, and kurtosis; the DSR is the PSR evaluated at the noise-ceiling benchmark.
[2]
David H. Bailey, Jonathan M. Borwein, Marcos López de Prado, and Qiji Jim Zhu. The probability of backtest overfitting. Journal of Computational Finance, 20(4):39–69, 2017. doi: 10.21314/JCF.2016.322. The probability of backtest overfitting (PBO): a selected in-sample winner routinely underperforms out-of-sample; motivates treating a search as a machine for finding the luckiest of N.
[3]
David H. Bailey and Marcos López de Prado. The deflated Sharpe ratio: correcting for selection bias, backtest overfitting, and non-normality. The Journal of Portfolio Management, 40(5):94–107, 2014. doi: 10.3905/jpm.2014.40.5.094. Defines the Deflated Sharpe Ratio and the False Strategy Theorem: the expected maximum Sharpe of N zero-edge trials, the noise ceiling the DSR deflates against.
[4]
Charles R. Harris, K. Jarrod Millman, Stéfan J. van der Walt, and others. Array programming with NumPy. Nature 585, 357–362, 2020. doi: 10.1038/s41586-020-2649-2. NumPy provides the deterministic pseudo-random number generation and arithmetic behind the seeded search, the best-of-N null, and the from-scratch statistics.
[5]
Campbell R. Harvey and Yan Liu. Backtesting. The Journal of Portfolio Management, 42(1):13–28, 2015. doi: 10.3905/jpm.2015.42.1.013. Multiple-testing haircut for the Sharpe ratio: the appropriate significance bar rises with the number of strategies tried.
[6]
Halbert White. A reality check for data snooping. Econometrica, 68(5):1097–1126, 2000. doi: 10.1111/1468-0262.00152. The Reality Check: a bootstrap null for the best model out of many, the data-snooping ancestor of the best-of-N pure-noise null used here.