De Deflated Sharpe Ratio: Hoeveel van je Backtest-'Winnaars' Overleven Multiple Testing?
Onderdeel van de serie "Backtests Without Illusions".
📄 Dit artikel groeide uit tot een researchpaper. Elk getal hieronder komt uit één deterministisch script dat gecontroleerde ground truth bouwt — pure-ruis zoektochten, geplante-edge zoektochten en een echte gecorreleerde parametergrid — en daar vervolgens de Deflated Sharpe Ratio, de Harvey-Liu multiple-testing haircut en White's Reality Check / Hansen's SPA op loslaat, waarbij de false-discovery rate en detection power van elke methode rechtstreeks gemeten worden. Lees de paper online (interactieve versie + PDF) op deflated-sharpe.marketmaker.cc, code en data op github.com/suenot/deflated-sharpe-search.
Je draait een parameter sweep. Zestien snelle lengtes, veertig langzame lengtes, 640 combinaties van een moving-average crossover. De grid is klaar en één cel licht op: een geannualiseerde Sharpe van 3,9, een single-test p-waarde van . Twaalf nullen van significantie. Je hebt iets gevonden.
Of je hebt niets gevonden, en de zoektocht heeft het voor je gevonden.
Een parameterzoektocht is geen toets. Het is een machine voor het vinden van de gelukkigste van N pogingen, en hoe meer pogingen je haar geeft, hoe geluksiger haar winnaar eruitziet — met of zonder enige echte edge eronder. De best-of-N Sharpe is opgeblazen door selectie, op dezelfde manier als de langste van duizend willekeurige mensen lang is: niet omdat lengte echt is, maar omdat je hebt gezocht. De single-test statistieken die naast de winnaar worden afgedrukt — de p-waarde, de t-stat, het "is het significant?" — waren ontworpen voor één vooraf geregistreerde hypothese. Voer ze de overlevende van een zoektocht en ze liegen, zelfverzekerd, elke keer.
Dit artikel meet precies hoe erg ze liegen, en meet vervolgens drie hulpmiddelen die dat corrigeren. Het hele punt is gecontroleerde ground truth: we genereren returns waarvan we het antwoord weten — soms pure ruis met nul edge, soms een geplante edge met bekende sterkte — zodat "kreeg de methode het goed?" een feit is, geen oordeel. Hier is de kop alvast vooraf. Op known-null zoektochten, waar het eerlijke antwoord altijd "geen ontdekking" is, is dit hoe vaak elke toets wolf roept:
| Toets | False-discovery rate op known-null zoektochten | Oordeel |
|---|---|---|
| Naïeve "is de beste Sharpe significant?" | 1,000 | signaleert elke keer een ontdekking |
| Deflated Sharpe Ratio (DSR ≥ 0,95) | 0,001 | gecontroleerd |
| Harvey-Liu haircut — Bonferroni | 0,057 | ~gecontroleerd |
| Harvey-Liu haircut — Holm | 0,057 | ~gecontroleerd |
| Harvey-Liu haircut — BHY | 0,007 | gecontroleerd |
| White's Reality Check (bootstrap) | 0,022 | gecontroleerd |
1.000 strategieën per zoektocht, 1.000 observaties elk, 2.000 onafhankelijke null-zoektochten, ware Sharpe = 0 overal. Synthetische iid Normale returns, seed 0, α = 0,05, 252 perioden/jaar. De false-discovery rate van de naïeve toets is niet hoog — hij is precies één.
Lees de eerste rij tot het pijn doet. Een toets die verondersteld wordt 5% van de tijd te vuren op pure ruis, vuurt 100% van de tijd — omdat je hem geen pure ruis toont, maar het maximum van duizend trekkingen van pure ruis, en het maximum van duizend muntworpers ziet er altijd uit als een genie. Elke andere rij is een methode die dit weet en ervoor corrigeert. Dat is het hele artikel: waarom de eerste rij 1,000 is, waarom de andere dat niet zijn, en de ene plek (de laatste sectie) waar zelfs de goede methoden een tweede correctie nodig hebben om eerlijk te blijven.
Akte 1 — De valkuil: een zoektocht fabriceert Sharpe uit het niets

Begin met de schoonste mogelijke valkuil. Genereer strategieën waarvan de returns onafhankelijke standaard-Normale ruis zijn — geen drift, geen vaardigheid, ware Sharpe exact nul voor alle. Elk heeft observaties. Doe nu wat elke parameterzoektocht doet: houd de beste.
De best-of-1000 per-observatie Sharpe komt gemiddeld uit op 0,1027, wat annualiseert tot 1,63 (afgeleid: ). Dat is geen bescheiden getal. Een geannualiseerde Sharpe van 1,63 is het soort resultaat dat een strategie gefinancierd, gepubliceerd, toegewezen krijgt. Het kwam voort uit een random-number generator met de drift op nul.
Geef de winnaar nu aan de naïeve significantietoets — degene die elke backtest-bibliotheek gratis afdrukt. Converteer zijn Sharpe naar een t-statistiek (), neem de eenzijdige p-waarde, noem het een ontdekking als :
De mediane single-test p-waarde van deze ruiswinnaars is 0,000686 — drie nullen van "significantie" van een strategie zonder edge. En over 2.000 onafhankelijke null-zoektochten verklaart de naïeve toets een ontdekking in elk van hen: een false-discovery rate van 1,000. Niet "opgeblazen." Niet "een beetje hoog." Een toets die per constructie hoogstens 5% van de tijd gelijk heeft op een enkele nulhypothese, heeft 100% van de tijd ongelijk op de winnaar van een zoektocht.
Het mechanisme is niet subtiel zodra het benoemd is. De naïeve toets vraagt "kon deze Sharpe toevallig ontstaan onder de nulhypothese?" — een eerlijke vraag voor een strategie die je voordat je naar de data keek had gekozen. Maar je koos deze omdat hij de hoogste Sharpe van duizend had. Je hebt geconditioneerd op het maximum, en de steekproefverdeling van een maximum lijkt in niets op de steekproefverdeling van een enkele trekking. Dit is dezelfde kwaal die onze look-ahead bias taxonomie vanaf de andere kant diagnosticeerde — daar fabriceerde een one-bar lek een Sharpe van 15 uit ruis; hier fabriceert een zoektocht een Sharpe van 1,63 uit ruis zonder enig lek, puur door selectie. Ander mechanisme, identiek symptoom: een geweldig uitziende Sharpe die niets betekent.
Het getal 1,63 is het belangrijke, dus onthoud het. Het is het ruisplafond voor deze zoektocht: de Sharpe die je zou verwachten dat de gelukkigste van 1.000 nul-edge strategieën haalt. Elke eerlijke toets van een zoektochtwinnaar moet hem niet vergelijken met nul, maar met dit — met wat geluk alleen oplevert als je duizend keer kijkt.
Akte 2 — De gereedschapskist: drie manieren om de zoektocht te prijzen

Drie onderzoekslijnen, onafhankelijk van elkaar ontstaan, komen alle drie tot dezelfde oplossing: stop met de winnaar met nul te vergelijken, en begin hem te vergelijken met wat een zoektocht van deze omvang door geluk produceert. Ze verschillen in hoe ze die vergelijking opbouwen.
PSR en de Deflated Sharpe Ratio (Bailey & López de Prado, 2012 / 2014)
De Probabilistic Sharpe Ratio stelt een scherpere vraag dan "is de Sharpe positief?" Hij vraagt: gegeven de steekproeflengte en de vorm van de returns (scheefheid, dikke staarten), wat is de kans dat de ware Sharpe een benchmark overschrijdt?
Hier is de standaard-Normale CDF, de scheefheid, en de kurtosis in de niet-excess conventie (Normaal ⇒ ; substitueer hier excess kurtosis zonder 3 toe te voegen en de deflatie komt fout uit). Zet en PSR is gewoon een finite-sample significantietoets. De magie zit in het goed kiezen van .
De Deflated Sharpe Ratio is PSR geëvalueerd op een benchmark die niet nul is, maar de verwachte maximale Sharpe van de hele zoektocht:
waarbij de variantie is over alle N trial-Sharpes (de spreiding die de zoektocht zelf produceerde), de Euler-Mascheroni-constante is, en de twee inverse-Normale termen de Extreme-Value-Theory-benadering zijn van het verwachte maximum van standaard-Normale trekkingen. In code is het bijna te kort om indrukwekkend te zijn:
def expected_max_sharpe(sr_variance, N, mean_sr=0.0):
"""E[max of N independent SR estimates ~ N(mean_sr, sr_variance)]
(Bailey & LdP 2014)."""
g = EULER_MASCHERONI # 0.5772156649
a = norm.ppf(1.0 - 1.0 / N) # Z^{-1}(1 - 1/N)
b = norm.ppf(1.0 - 1.0 / (N * E)) # Z^{-1}(1 - 1/(N e))
return float(mean_sr + np.sqrt(sr_variance) * ((1.0 - g) * a + g * b))
Dan is de DSR simpelweg PSR met die gedeflateerde lat:
def deflated_sharpe(sr_max, sr_estimates, T, skew=0.0, kurt=3.0, N=None):
"""DSR = PSR(sr_max, SR0). Returns (dsr, sr0)."""
v = float(np.asarray(sr_estimates).var(ddof=1)) # dispersion of the search
m = float(np.asarray(sr_estimates).mean())
if N is None:
N = len(sr_estimates)
sr0 = expected_max_sharpe(v, N, mean_sr=m)
return psr(sr_max, sr0, T, skew, kurt), sr0
De DSR is een kans. We verklaren een ontdekking wanneer : de ware Sharpe van de winnaar verslaat de verwachte beste-door-geluk met 95% betrouwbaarheid. Merk op welke aanname draagvlak is voor : de trials worden behandeld als onafhankelijk. Akte 5 gaat volledig over wat er gebeurt als dat niet zo is.
De Harvey-Liu haircut (2015)
Harvey en Liu pakken hetzelfde probleem aan via multiple-testing p-waarde-aanpassingen — het klassieke machinerie voor "ik heb M toetsen gedraaid, laat me mezelf niet voor de gek houden." Rangschik de single-test p-waarden en blaas ze op:
Bonferroni is het botte instrument (beheers de kans op elke false positive door elke p-waarde te vermenigvuldigen met ); Holm is de uniform krachtigere step-down neef ervan. De derde, Benjamini-Yekutieli (BHY), beheerst de false-discovery rate — de verwachte fractie van je afwijzingen die fout zijn — en doet dat, cruciaal, onder willekeurige afhankelijkheid tussen de toetsen, met de harmonische normalisator in de teller:
Die is de prijs die BHY vraagt voor het niet aannemen dat je 1.000 trials onafhankelijk zijn — hij blaast de FDR-drempel op met een factor die groeit als . De "haircut" zelf is de pointe-metriek: converteer de aangepaste p-waarde terug naar een Sharpe en rapporteer hoeveel van de oorspronkelijke Sharpe je moest afscheren. Een haircut van 100% betekent dat de winnaar volledig verklaard wordt door multiple testing; 15% betekent dat hij grotendeels overleeft.
White's Reality Check en Hansen's SPA (2000 / 2005)
Het derde hulpmiddel maakt helemaal geen distributionele aanname. White's Reality Check neemt de werkelijke returns van elke regel, vormt de max-over-rules statistiek, en bootstrapt de nulverdeling ervan rechtstreeks:
waarbij de gemiddelde performance van regel ten opzichte van de benchmark is. Het resamplet de returns met de stationary bootstrap (Politis-Romano — blokken met willekeurige lengte zodat seriële correlatie de resampling overleeft), hercentreert elke trekking om aan de nulhypothese te voldoen per constructie, herberekent het maximum bij elke trekking, en rapporteert de p-waarde als de fractie bootstrap-maxima die het geobserveerde maximum verslaat. Hansen's SPA verscherpt RC op twee manieren: studentisering (deel het gemiddelde van elke regel door zijn eigen standaardfout, zodat één wilde hoge-variantie-regel het maximum niet kan kapen) en een consistente, steekproefafhankelijke hercentrering van de nulhypothese. Onze implementatie voegt de studentisering toe maar niet de volledige consistente-hercentreringsstap — dus waar dit artikel een SPA-achtige p-waarde rapporteert, lees dat als een gestudentiseerde Reality Check, niet de complete Hansen SPA. Waar DSR vraagt "is de winnaar bijzonder binnen deze zoektocht?", vraagt Reality Check "verslaat de beste regel cash nadat eerlijk rekening is gehouden met hoeveel regels ik heb geprobeerd?" — en het handelt gecorreleerde regels natively af, via de bootstrap, zonder ooit trials te tellen. Onthoud dat onderscheid; de laatste sectie draait erom.
Akte 3 — Calibratie is het hele bewijs

Een methode die niets signaleert zou ook een false-discovery rate van nul hebben — en nutteloos zijn. Dus de enige zinvolle toets van deze hulpmiddelen is tweezijdig: op known-null data moeten ze valse ontdekkingen beheersen op of onder , en op known-edge data (volgende sectie) moeten ze nog steeds vuren. Deze sectie is de eerste helft.
Draai 2.000 onafhankelijke zoektochten, elk over 1.000 nul-edge strategieën, en tel hoe vaak elke methode een ontdekking verklaart. Dat aantal, gedeeld door 2.000, is de false-discovery rate — en omdat de waarheid geen edge is, is elke ontdekking vals:
| Toets | False-discovery rate (α = 0,05) |
|---|---|
| Naïeve significantie | 1,000 |
| Deflated Sharpe Ratio | 0,001 |
| Harvey-Liu — Bonferroni | 0,057 |
| Harvey-Liu — Holm | 0,057 |
| Harvey-Liu — BHY | 0,007 |
| White's Reality Check | 0,022 |
Elke principiële methode landt op of nabij de 5%-lijn — de twee FWER-haircuts iets erboven, DSR/BHY/RC eronder — terwijl de naïeve toets op 100 zit. (Bonferroni en Holm printen hier hetzelfde 0,057, en niet toevallig: voor de enkele beste strategie is Holm's eerste stap , identiek aan Bonferroni per constructie, dus het is één bevestiging, geen twee.) Maar het diepste getal in de hele studie staat niet in deze tabel — het is de gedeflateerde benchmark die de DSR-kolom produceert. Gemiddeld over de null-zoektochten komt uit op een per-observatie 0,1030, wat annualiseert tot 1,63 (afgeleid: ) — dezelfde 1,63 die de gemiddelde ruiswinnaar behaalt (1,63). Dat is geen toeval; het is het hele idee dat werkt:
De gedeflateerde lat ligt precies op het ruisplafond. DSR vraagt een zoektochtwinnaar niet om nul te verslaan. Het vraagt de winnaar om de beste score die geluk alleen oplevert uit een zoektocht van deze omvang te verslaan — hier geannualiseerd 1,63. Een winnaar die slechts het ruisplafond evenaart scoort DSR ≈ 0,5 (een muntworp), wat waarom de gemiddelde null-DSR 0,495 is, niet iets kleins. Om een ontdekking te zijn, moet de winnaar 1,63 overtreffen en dan nog meer — genoeg om PSR voorbij 0,95 te duwen.
Dit herkadreert de hele exercitie. De naïeve toets meet afstand tot nul; elke zoektocht haalt die lat triviaal, wat waarom hij nutteloos is. DSR meet afstand tot het ruisplafond, en die lat halen is echt moeilijk — zoals het hoort. De Harvey-Liu haircut en de Reality Check bereiken dezelfde beheersing via andere wegen (een -opblazing voor BHY, een bootstrap max-verdeling voor RC), en landen in dezelfde buurt: 0,001 tot 0,057, op of nabij . De Bonferroni/Holm 0,057 zit net boven de 5%-lijn, maar net: met 2.000 Monte-Carlo-zoektochten is de standaardfout op een FDR-schatting rond 0,05 ongeveer 0,005, dus 0,057 zit ruwweg 1,4 standaardfouten boven — Monte-Carlo-ruis, geen gebroken garantie. "Beheerst FWER" is sowieso een asymptotische belofte, geen bit-exacte bij .
Akte 4 — Power: behoudt het nog steeds de echte edges?

Het beheersen van valse ontdekkingen is maar de halve toets — een paranoïde methode die alles afwijst scoort een perfecte 0,000 en is waardeloos. De andere helft: wanneer er een echte edge is, vindt DSR hem dan?
Plant er één. In een veld van 1.000 strategieën, laat 25 ervan een echte edge van bekende sterkte dragen en laat de rest ruis blijven, draai dan de zoektocht en vraag of DSR de winnaar signaleert. Veeg de geplante edge van zwak naar sterk en de detection power tekent een schone S-curve (false-positive rate blijft ~0 gedurende het geheel):
| Geplante ware Sharpe (geannualiseerd) | DSR detection power | DSR false-positive rate |
|---|---|---|
| 0,79 | 0,005 | 0,000 |
| 1,27 | 0,090 | 0,000 |
| 1,90 | 0,651 | 0,000 |
| 2,54 | 0,998 | 0,000 |
| 3,17 | 1,000 | 0,000 |
Kijk naar waar de curve draait. Onder het ruisplafond — een ware geannualiseerde Sharpe van 0,79, ruim onder 1,63 — vuurt DSR 0,5% van de tijd, terecht weigerend het te benoemen: een edge zo zwak is werkelijk niet te onderscheiden van het geluk dat een 1.000-trial zoektocht genereert, en het tegendeel doen zou oneerlijk zijn, niet krachtig. Rond het plafond klimt de curve steil (0,09 bij 1,27, 0,65 bij 1,90). Bij een geannualiseerde Sharpe van 2,54 is de power 0,998; bij 3,17 is het een perfecte 1,000. Sterke edges worden vrijwel elke keer behouden, false positives blijven op nul geplakt, en de 50%-power-kruising ligt op een geannualiseerde Sharpe van ongeveer 1,73 (afgeleid door interpolatie tussen de rijen 1,27 en 1,90) — net boven het ruisplafond van 1,63, precies waar een eerlijke lat zou moeten liggen: het punt waar een edge begint te overtreffen wat een 1.000-trial zoektocht verzint.
Dat is de eigenschap die je eigenlijk wilt, uitgedrukt als een S-curve: edges onder het ruisplafond worden terecht uitgesloten als geluk; edges ruim erboven worden behouden met een power die naar één nadert. De naïeve toets "detecteert" ter vergelijking de geplante edge 67% van de tijd, zelfs bij een ware Sharpe van 0,79 — maar dat getal is betekenisloos, omdat we al zagen dat hij een niet-bestaande edge 100% van de tijd detecteert. Een toets die op alles vuurt heeft geen power; hij heeft geen onderscheidend vermogen. DSR ruilt wat gevoeligheid voor marginale edges (de rijen 0,79 en 1,27) in voor wat ertoe doet: zijn ontdekkingen zijn echt.
Akte 5 — De valkuil van de praktijk: gecorreleerde grids

Alles tot nu toe gebruikte onafhankelijke strategieën — de schoonste mogelijke setting, en degene waar DSR's onafhankelijkheidsaanname exact opgaat. Echte parametergrids zijn niet zo, en hier wordt een naïef gebruikt hulpmiddel een nieuwe manier om ongelijk te hebben.
Neem een eerlijke moving-average crossover zoektocht: 16 snelle lengtes 40 langzame lengtes trials, elk 755 observaties. Zo'n grid is doordrenkt van correlatie — fast=45/slow=120 en fast=45/slow=125 zijn bijna dezelfde strategie, dus hun returnstromen bewegen samen. Gemeten gemiddelde pairwise-correlatie over de 640 trials: ongeveer 0,61. Dat zijn geen 640 onafhankelijke weddenschappen. Op geen enkele manier.
Geval A — random walk (geen edge): elke methode doodt hem, correct
Draai de grid op een pure random walk. De winnaar ziet er verleidelijk uit: parameters fast=45/slow=120, beste geannualiseerde Sharpe 0,81, single-test p-waarde 0,081. Elke methode ziet erdoorheen:
| Methode | Resultaat | Oordeel |
|---|---|---|
| DSR (rauw K = 640) | 0,431 | verwerpen (< 0,95) |
| Reality Check p | 0,570 | verwerpen |
| SPA-achtige p (gestudentiseerde RC) | 0,569 | verwerpen |
| Harvey-Liu haircut | 100% | verwerpen |
Begin met het teken dat helemaal geen deflatie nodig heeft: zelfs de ongecorrigeerde finite-sample-significantie van deze winnaar, -versus-nul, is slechts 0,918 — al tekort voor 0,95 voordat we ook maar één van de 640 trials corrigeren. Deflatie begraaft hem dan: de lat is een per-observatie , geannualiseerd ~0,91 (afgeleid: ) — boven de 0,81 van de winnaar. De beste strategie haalt niet eens het ruisplafond, DSR ≈ 0,43 (slechter dan een muntworp), en Reality Check, de SPA-achtige toets, en een haircut van 100% zijn het allemaal eens: niets hier. Perfect. Dit is het makkelijke geval, en het werkt — en, zoals we zullen zien, blijft het verworpen bij elk effectieve-trials-aantal dat we proberen.
Geval B — een echte regime-edge: de rauwe DSR heeft het mis
Draai nu dezelfde grid op een regime-switchende reeks met een echte, exploiteerbare edge. De winnaar is uitgesproken: parameters fast=3/slow=55, beste geannualiseerde Sharpe 3,92 — dit is de in-sample, geselecteerde Sharpe, zelf selectie-opgeblazen door de zoektocht (geen ware of out-of-sample edge), maar het onderliggende regime-effect is echt — met een single-test p-waarde van en ongecorrigeerde significantie -versus-nul van vrijwel 1,000. Er is hier een echte edge en de winnaar heeft hem gevonden. Kijk hoe de rauwe DSR hem toch verwerpt:
| Methode | Resultaat | Oordeel |
|---|---|---|
| DSR (rauw K = 640) | 0,748 | verwerpen (< 0,95) ✗ overdeflateerd |
| Reality Check p | 0,0024 | bevestigen ✓ |
| SPA-achtige p (gestudentiseerde RC) | 0,0038 | bevestigen ✓ |
| Harvey-Liu haircut | 15% | bevestigen ✓ |
De rauwe DSR van 0,748 is een valse verwerping van een echte edge. De reden is de onafhankelijkheidsaanname, nu hard geschonden: DSR bouwde zijn gedeflateerde lat door 640 gecorreleerde trials te behandelen als 640 onafhankelijke trekkingen, wat het verwachte-maximum opblaast tot een per-observatie 0,221 — geannualiseerd ~3,51 (afgeleid: ). Tegen een lat van 3,51 haalt een winnaar van 3,92 hem maar amper, en DSR landt op 0,748 — tekort voor 0,95. Twee dingen pompen die lat op: het rauwe aantal (640 kijkbeurten in plaats van een handvol effectieve), en echte vaardigheidsspreiding tussen de trials — sommige parameterparen zijn echt beter op een regimereeks, wat verbreedt en optilt voorbij wat puur geluk alleen zou opleveren. Beide duwen dezelfde kant op, en de lat komt te hoog uit omdat de zoektocht nooit echt 640 onafhankelijke kijkbeurten was; het waren een paar onafhankelijke weddenschappen, 640 keer bemonsterd.
Voer DSR in plaats daarvan het effectieve aantal trials. De hierboven gebruikte one-liner is een ruwe schatting op basis van de gemiddelde pairwise-correlatie:
def effective_n_trials(returns_matrix):
"""N_eff = N / (1 + (N-1) * rho_bar), clipped to [1, N].
Correlated trials -> fewer independent bets."""
C = np.corrcoef(returns_matrix, rowvar=False)
rho_bar = max(np.nanmean(C[np.triu_indices(C.shape[0], k=1)]), 0.0)
N = returns_matrix.shape[1]
neff = N / (1.0 + (N - 1) * rho_bar)
return float(min(max(neff, 1.0), N))
Met en verzamelt dit de grid tot een effectieve trials (afgeleid: ), en de DSR springt naar 1,000. Maar wacht met vieren, want dit is het zwakste bewijs in deze hele sectie. Bij stort de gedeflateerde lat in tot een geannualiseerde — vrijwel het trial-gemiddelde, vrijwel nul. Deflatie is daar uitgeschakeld: DSR bij herhaalt slechts de ongecorrigeerde finite-sample-significantie van de winnaar (-versus-nul ). Het oordeel wordt geërfd van rauwe significantie, niet geproduceerd door de multiple-testing-correctie. En het spiegelbeeld-voorbehoud aan de random-walk-kant: zijn verwerping bij houdt alleen stand omdat die winnaar onafhankelijk marginaal was om te beginnen (-versus-nul ). Anker het hele argument op 1,6 en een scepticus heeft gelijk om zijn schouders op te halen: je hebt de correctie uitgeschakeld en gerapporteerd wat eronder zat.
Anker dus niet op één schatter. De eerlijke zet — en de sterkere — is om op vijf verschillende standaardmanieren te berekenen en het oordeel over de hele band te lezen. Hier zijn vijf schatters toegepast op dezelfde 640-trial-signaalgrid, elk met de gedeflateerde lat die hij impliceert en de DSR die hij produceert:
| Effectieve-trials-schatter | Gedeflateerde lat (jaarlijks) | DSR | Oordeel | |
|---|---|---|---|---|
| Gemiddelde correlatie | 1,6 | 0,25 | 1,000 | behouden |
| Participation ratio | 2,4 | 0,43 | 1,000 | behouden |
| PCA (95% van variantie) | 16 | 1,85 | 1,000 | behouden |
| Kaiser (eigenwaarden > 1) | 21 | 2,00 | 0,999 | behouden |
| Cheverud-Nyholt | 370 | 3,31 | 0,845 | verwerpen |
| rauw grid-aantal (geen correctie) | 640 | 3,51 | 0,748 | verwerpen |
Schatters: gemiddelde correlatie is de -one-liner hierboven; participation ratio en de PCA-95%/Kaiser-aantallen lezen de effectieve dimensionaliteit af van de eigenwaarden van de correlatiematrix; Cheverud-Nyholt is een variantie-van-eigenwaarden-schatter uit de genetica-literatuur waarvan bekend is dat hij overtelt bij near-equicorrelatie.
Nu landt het punt, en het is niet "elke correctie redt je." Kijk naar het verdedigbare midden — PCA-95% () en Kaiser (). Dit is niet het uitgeschakelde-deflatie-regime; ze leggen een echte geannualiseerde -lat op van 1,85 tot 2,00 — een serieuze haircut, ruim boven de ruis, een echte multiple-testing-straf voor 16-21 effectieve kijkbeurten. En de edge van 3,92 haalt hem nog steeds (DSR 1,000 en 0,999). Het signaal overleeft DSR voor elke onder 144,8 (afgeleid uit het kruispunt); hij faalt alleen onder Cheverud-Nyholt's , een schatter die aantoonbaar overtelt wanneer trials near-equicorrelated zijn — en zelfs het rauwe, ongecorrigeerde aantal van 640 duwt DSR slechts terug naar 0,748, niet naar nul. De random-walk-winnaar, door dezelfde vijf schatters gehaald, wordt bij elk ervan verworpen (hij overleeft voor geen enkele boven 1). Dat is het echte resultaat: niet één gelukgetal, maar een oordeel dat stabiel is over de hele band van standaard effectieve-trials-schatters — wat veel sterker bewijs is dan vertrouwen op een van hen.
Eén technisch voorbehoud bij de ruwste schatter, omdat het verklaart waarom hij aan de zachte kant zit: is eigenlijk de variantiereductiefactor voor het gemiddelde van gecorreleerde variabelen (hoeveel middeling je oplevert onder correlatie ). DSR's benchmark is een extreme-value-grootheid — het verwachte maximum van de trials — dus het gebruiken van een gemiddelde-variantie-shrinkage als trial-aantal is een functionele mismatch: juist in richting (gecorreleerd ⇒ minder effectieve trials), maar niet de grootheid waar de verdeling van het maximum daadwerkelijk van afhangt. Dat is precies waarom de eigenwaarde-gebaseerde schatters in het midden van de band de betrouwbaardere lezing zijn, en waarom de band, niet het punt, het eindresultaat is.
De les: gebruik beide hulpmiddelen, en voer DSR de juiste N

Twee dingen vallen uit geval B, en beide zijn dragend:
- Het rauwe grid-aantal is de verkeerde N voor DSR wanneer trials gecorreleerd zijn — en geen enkele effectieve N is de juiste. Het invullen van 640 in een formule die onafhankelijkheid aanneemt overdeflateert: het fabriceert een ruisplafond dat veel hoger is dan de zoektocht daadwerkelijk bereikte en begraaft echte edges eronder. DSR heeft het effectieve trial-aantal nodig — maar de oplossing is niet om één schatter te vertrouwen (laat staan de ruwste, waar de correctie uitschakelt nabij ). Het is om het oordeel over de hele band van standaardschatters (hier 1,6 tot 370) te lezen en te kijken of het stabiel is. Voor deze edge was dat zo: behouden overal waar de deflatie echt actief is (een echte lat van 1,85-2,00 jaarlijks bij -), en faalt alleen onder een schatter die overtelt. Een over-de-hele-band-stabiel oordeel is veel sterker dan één enkel getal.
- Combineer DSR met een Reality Check. Merk op dat de Reality Check en zijn SPA-achtige (gestudentiseerde) neef geval B goed kregen zonder enige trial-aantal-chirurgie (p = 0,0024 en 0,0038) — ze handelen afhankelijkheid natively af, via de stationary bootstrap, omdat ze de werkelijke gecorreleerde returnstromen resamplen in plaats van hypothetische onafhankelijke weddenschappen te tellen. Dat is de doorslaggevende factor voor de hele effectieve-N-warboel: RC heeft geen nodig. DSR en RC beantwoorden verschillende vragen: DSR vraagt "is de winnaar bijzonder binnen deze zoektocht?" (en moet weten hoeveel effectieve kijkbeurten de zoektocht nam); RC/SPA-achtig vraagt "verslaat de beste regel cash na data-snooping?" (en leest de afhankelijkheid rechtstreeks van de data af). Je wilt beide. Wanneer ze het oneens zijn — zoals de rauwe-aantal-DSR en RC hier deden — is de onenigheid diagnostisch: het betekent meestal dat je verkeerd is.
Dit is dezelfde structurele waarschuwing die onze studies over de speed-ladder en IPC-belasting vanuit de engineeringkant al raakten — een snelle zoektocht die een enorme gecorreleerde grid draait, koopt je geen enorm aantal onafhankelijke weddenschappen, en het behandelen van grid-omvang als trial-aantal misleidt zowel je optimizer als je significantietoets. De aankomende companion over de probability of backtest overfitting pakt dezelfde selectiebias aan vanuit de resampling-kant (CSCV), en past natuurlijk bij alles hier: DSR prijst de winnaar, PBO prijst de procedure.
Eerlijkheidsnotities
Drie voorbehouden, ronduit gesteld, omdat het hele punt van een gecontroleerde studie is om het niet te overdrijven.
- De returns zijn synthetisch. iid Normaal voor de calibratie- en power-experimenten, een regime-switchend proces voor het echte-edge-geval — gekozen voor gecontroleerde ground truth, niet voor marktrealisme. Echte returns zijn dikstaartig, autocorrelated en niet-stationair, en PSR's scheefheid/kurtosis-termen bestaan precies om de eerste van die te behandelen. Het eindresultaat hier is de gekalibreerde methode, niet een strategie: we kunnen alleen bewijzen dat een toets valse ontdekkingen beheerst door hem te draaien op data waarvan we weten dat er niets te ontdekken is. Dat vereist het fabriceren van de ground truth.
- Geen effectieve-N-schatter is canoniek — daarom rapporteerden we er vijf. De gemiddelde-correlatie-one-liner is reviewer-leesbaar en richtinggevend correct (meer correlatie ⇒ minder effectieve trials), maar het is de variantiereductiefactor voor een gemiddelde — een functionele mismatch met DSR's maximum-benchmark — en nabij schakelt hij de deflatie volledig uit. De eigenwaarde-schatters (participation ratio, PCA-95%, Kaiser) zijn beter afgestemd maar nog steeds heuristisch, en Cheverud-Nyholt overtelt bij equicorrelatie. De volledigere, principiëlere aanpak is trial-clustering (Bailey & López de Prado's DSR Appendix 3): groepeer trials op correlatiestructuur en tel clusters in plaats van alles tot één scalar in te storten. We rapporteren de hele band precies omdat de keuze niet vastligt — een oordeel dat stabiel is over alle vijf schatters is de eerlijke claim; een die afhing van het kiezen van één schatter zou dat niet zijn.
- De bootstrap is een gestudentiseerde Reality Check, niet de volledige Hansen SPA, en de resample-aantallen verschillen per experiment. Waar dit artikel "SPA-achtig" zegt, bedoelt het White's Reality Check met per-regel studentisering; Hansen's volledige consistente, steekproefafhankelijke hercentrering is niet geïmplementeerd. De calibratie-false-discovery-rates gebruiken 500 stationary-bootstrap-resamples per zoektocht over 400 zoektochten; de twee case-study RC/SPA-achtige p-waarden gebruiken elk 5.000 resamples. Gemiddelde bloklengte 20 doorheen (Politis-Romano), , 252 perioden/jaar voor annualisering. Verander deze en de derde-decimaalgetallen bewegen; het verhaal — naïef 1,000 versus principieel 0,001-0,057, een S-curve die 50% power bereikt net boven het ruisplafond, en een gecorreleerde-grid-valkuil waarvan het oordeel over de effectieve-N-band gelezen moet worden — verandert niet.
Takeaways
- Een parameterzoektocht is een multiple-testing-machine, en de naïeve significantietoets is er blind voor. Op 1.000 nul-edge strategieën komt de beste geannualiseerde Sharpe gemiddeld uit op 1,63 met een single-test-p-waarde-mediaan van 0,000686 — en de "is het significant?"-toets verklaart 100% van de tijd een ontdekking (false-discovery rate 1,000). Een geweldige Sharpe uit het niets, gecertificeerd significant door een toets die nooit de juiste vraag stelde.
- De Deflated Sharpe Ratio verplaatst de doellijn van nul naar het ruisplafond. DSR vergelijkt de winnaar niet met nul maar met , het verwachte beste-door-geluk van een zoektocht van deze omvang — wat voor het null-geval uitkomt op een geannualiseerde 1,63, precies waar de gemiddelde ruiswinnaar zit (afgeleid: ). Zijn null-false-discovery-rate is 0,001; de Harvey-Liu haircut (Bonferroni/Holm 0,057, BHY 0,007) en White's Reality Check (0,022) bereiken dezelfde beheersing via andere wegen.
- Het behoudt de echte edges. DSR's detection power tekent een S-curve die 50% power bereikt bij een geannualiseerde Sharpe van ~1,73 — net boven het ruisplafond van 1,63: 0,005 bij een ware geannualiseerde Sharpe van 0,79, 0,651 bij 1,90, 0,998 bij 2,54, 1,000 bij 3,17, false positives ~0 gedurende het geheel. Edges onder het plafond worden terecht als niet te onderscheiden van geluk aangemerkt; edges erboven worden behouden met een power die naar één nadert.
- Gecorreleerde grids breken de rauwe DSR — en geen enkele effectieve N redt hem; de band wel. Op een 640-cel MA-crossover (gemiddelde pairwise-correlatie ~0,61) verwierp de rauwe-aantal-DSR ten onrechte een echte (in-sample geselecteerde, jaarlijks 3,92) edge (0,748 < 0,95) omdat 640 gecorreleerde trials geen 640 onafhankelijke weddenschappen zijn. Maar de oplossing is niet één magische — bij de ruwste schatting () is de deflatie vrijwel uitgeschakeld (lat ~jaarlijks 0,25) en herhaalt DSR slechts de rauwe significantie. Het echte bewijs is dat de edge behouden blijft over de hele band van standaardschatters — DSR 1,000/1,000/1,000/0,999 bij 1,6/2,4/16/21, inclusief een echte jaarlijkse lat van 1,85-2,00 bij het verdedigbare PCA-95%/Kaiser-middenbereik — overlevend voor elke , en alleen falend onder Cheverud-Nyholt's overtellende 370. De random walk wordt bij elke schatter verworpen. Lees de band, niet een punt.
- Combineer DSR met een Reality Check, omdat ze verschillende vragen beantwoorden. De Reality Check en zijn SPA-achtige (gestudentiseerde) neef bevestigden de echte edge (p = 0,0024 en 0,0038) zonder enige trial-aantal-chirurgie — ze handelen afhankelijkheid natively af via de stationary bootstrap, wat precies de doorslaggevende factor is wanneer de effectieve N betwist wordt. DSR vraagt "is de winnaar bijzonder binnen deze zoektocht?"; RC/SPA-achtig vraagt "verslaat de beste regel cash na data-snooping?" Onenigheid tussen hen is een signaal dat je verkeerd is. Draai beide.
De winnaar van een zoektocht is schuldig tot het tegendeel bewezen is. De naïeve p-waarde is geen bewijs van onschuld — het is de eigen opgeblazen getuigenis van de zoektocht, en hij zal borg staan voor pure ruis met twaalf nullen van vertrouwen. Deflateer de benchmark naar wat geluk oplevert, tel je effectieve trials eerlijk, en bootstrap het maximum voor een tweede mening. Wat alle drie de latten haalt, is misschien echt. Wat alleen de naïeve haalt, is de langste van duizend muntworpers.
Het volledige experiment — de null-calibratie-harness, de geplante-edge-power-sweep, de gecorreleerde-grid-zoektochten, en elk getal in dit artikel te regenereren uit één deterministisch script — staat in de companion-paper op deflated-sharpe.marketmaker.cc, met code en data op github.com/suenot/deflated-sharpe-search.
Auteurs
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.