← Projects·Quantitative Researcher

Multiple Testing & the Deflated Sharpe Ratio

A study in multiple-testing discipline. Sweep 160 BTC trading rules, rank by in-sample Sharpe, then apply the Deflated Sharpe Ratio (Bailey & López de Prado, 2014). The rank-1 rule looks great until you condition on the number of trials.

1.14
Best-of-160 in-sample Sharpe
0.92
Pure-noise expectation
0.70
Deflated Sharpe Ratio
fails the multiple-testing adjustment
Status
open-source

The hypothesis

If you test 160 coin-toss strategies on a BTC price series, the best one will look like an edge just by luck. Conditioning on the number of trials is what separates a discovered signal from noise that happened to win.

What the project does

  1. Sweeps 160 parameterizations of a single rule family across BTC.
  2. Ranks them by in-sample Sharpe — the rank-1 looks like a 1.14 Sharpe.
  3. Generates a block-bootstrap null with the same autocorrelation as the source.
  4. Asks: what Sharpe would rank-1 achieve on pure noise?
  5. Computes the Deflated Sharpe Ratio (DSR) per Bailey & López de Prado (2014).

The result

IS-Sharpe distribution (160-rule sweep) vs. pure-noise null
SR̂ = 1.14
Histogram: 160 in-sample Sharpes from the BTC rule sweep. Red dashed: block-bootstrap null mean=0.92, σ=0.31. Blue line: our rank-1 (1.14) — sits at +0.71σ above the null mean. DSR = 0.70 fails the 0.95 cutoff.
  • In-sample best Sharpe: 1.14
  • Pure-noise expectation for rank-1: ≈ 0.92
  • DSR: 0.70 — a fail under the standard 0.95 cutoff.

What’s transferable

The discipline generalizes. Every research shop with a parameter grid needs a multiple-testing correction; the 0.95 threshold is the difference between a published edge and a graveyard of overfit losers. The bootstrap-null methodology here runs in 20 lines and ships with the repo.

Want to see this project in your stack?

Every project is runnable in one command. The scorecard is the contract.