Home Verified Methods Reports Papers Methodology About
HomeLearn › The Deflated Sharpe Ratio in practice: false positives, power and correlated trials

The Deflated Sharpe Ratio in practice: false positives, power and correlated trials

Short answer

Pick the best of N no-skill strategies by Sharpe ratio and test the winner with an ordinary Probabilistic Sharpe Ratio at 0.95: it passes 40% of the time at N = 10, 99% at N = 100, always at N = 1,000. Test it with the Deflated Sharpe Ratio instead and it passes 0.1% of the time. The closed form for the luck benchmark, the expected best Sharpe among N trials, matches Monte Carlo to within 0.005 when the dispersion term is measured across the actual trials, and keeps matching when the trials are correlated, because that dispersion shrinks with the correlation. The price: with one genuine edge among ten no-skill trials, DSR at 0.95 detects it 19% of the time where the naive PSR detects it 92%. DSR is a conservative test, and this note measures how conservative.

What is being checked

The DSR explainer gives the formula and a worked table: a strategy with Sharpe 1.50 over 120 monthly observations, skewness −0.8, kurtosis 6.0, and a dispersion of Sharpe ratios across trials of 0.50, falls from DSR 0.9997 at N = 10 to 0.2671 at N = 1,000. Four questions follow. Is the table right? Does the closed form for the expected maximum hold? What does the correction do to false positives and to power? And what happens when the N trials are not independent, as parameter sweeps never are? Everything below is synthetic.

The benchmark

SR*0 = sd(SR) · [ (1 − γ) Φ−1(1 − 1/N) + γ Φ−1(1 − 1/(N·e)) ]
DSR = PSR evaluated against SR*0 instead of 0, with the winner's own n, skewness and kurtosis

γ is the Euler–Mascheroni constant 0.5772. sd(SR) is the standard deviation of the Sharpe ratios across the N trials, which means the trials have to have been kept.

Part A: the explainer's table, recomputed

NExpected max Sharpe SR*0DSR
11.0000 (= PSR)
100.78730.9997
1001.26530.8736
1,0001.62760.2671

Denominator 2.2389, every cell to four decimals. The published table holds. One thing the table does not say: sd(SR) = 0.50 is a large dispersion. Under a pure null with 120 observations, Sharpe ratios of independent no-skill strategies scatter with a standard deviation of only √(1/n) = 0.091. A dispersion of 0.50 describes a family of genuinely different strategies, some with edge, not a parameter sweep of one; the example is illustrative of the arithmetic, not of what a sweep produces.

Part B: does the closed form hold?

N independent strategies with iid standard-normal returns over 120 periods, 5,000 repetitions. sd(SR) is taken from the trials in each repetition, as the method prescribes.

Nsd(SR) across trialsMax SR, Monte CarloMax SR, closed formClosed form with sd 0.50
100.09000.14240.14170.7873
1000.09180.23220.23241.2653
1,0000.09200.30390.29951.6276

The formula is accurate to within 0.005 at N = 10 and 100 and within 0.005 at N = 1,000, where the extreme-value approximation is at its weakest. The last column is what the explainer's sd of 0.50 implies; it is 5.5 times the null dispersion, and the benchmark scales with it linearly. Feeding DSR a dispersion that was not measured on the trials is where the number stops meaning anything.

Part C: false positives and power

Under the null (no strategy has edge), the best of N by in-sample Sharpe is tested at 0.95 both ways. With one true edge planted (mean 0.30 per period, PSR against zero about 0.94 on its own), the same is done and “power” counts the repetitions where the edge was both selected and passed.

NNaive PSR > 0.95, nullDSR > 0.95, nullTrue edge selectedNaive PSR powerDSR power
14.7%4.7%100%94.4%94.4%
1040.1%0.0%93.4%91.5%18.9%
10099.2%0.1%75.1%75.1%13.1%
1,000100%0.1%49.4%49.4%5.4%

Read together: DSR at 0.95 is a filter that rarely lets luck through and often keeps skill out. That is a defensible trade for a research process where the cost of a false strategy is high; it is not a neutral measurement.

Part D: correlated trials

A parameter sweep produces trials that share most of their returns. Here N = 100 strategies are built as √ρ·common + √(1−ρ)·own noise, so pairwise correlation is ρ.

ρsd(SR) across trialsMax SR, Monte CarloClosed form with nominal N = 100Effective N implied
0.00.09200.23300.2328101
0.50.06510.16560.1646104
0.90.02910.07410.0735106

Correlation does not break the formula; it shrinks sd(SR). Ninety percent common variance leaves the hundred trials with a Sharpe dispersion of 0.029 instead of 0.092, the expected maximum falls from 0.23 to 0.07, and the closed form with the nominal N = 100 still lands within 0.001 of the Monte Carlo. The trials are not independent, but the dispersion measured across them already carries that information, so the “effective number of independent trials” implied by the maximum stays near 100. The practical rule is the one the explainer already gives: measure sd(SR) on the trials you actually ran. Substituting a dispersion from elsewhere, or a nominal “independent” N smaller than the count, double-corrects.

What this does not establish

Reproduce

cd quantmedia-research/dsr-trials
python experiment.py  # about 45 s
python ../tests/test_dsr_trials.py  # expected: 5 passed

The first test recomputes the explainer table to four decimals; the others run the Monte Carlo at reduced size with matching tolerances. Code and output on GitHub.

References