Il Deflated Sharpe Ratio: Quanti dei 'Vincitori' del Tuo Backtest Sopravvivono ai Test Multipli?
Fa parte della serie "Backtest Senza Illusioni".
📄 Questo articolo è cresciuto fino a diventare un paper di ricerca. Ogni numero qui sotto proviene da un unico script deterministico che costruisce una ground truth controllata — ricerche su puro rumore, ricerche con vantaggio piantato, e una griglia di parametri realmente correlata — e poi esegue su di essa il Deflated Sharpe Ratio, l'haircut di test multipli di Harvey-Liu, e la Reality Check di White / SPA di Hansen, misurando direttamente il tasso di falsa scoperta e la potenza di rilevamento di ciascun metodo. Leggi il paper online (versione interattiva + PDF) su deflated-sharpe.marketmaker.cc, codice e dati su github.com/suenot/deflated-sharpe-search.
Esegui uno sweep di parametri. Sedici lunghezze fast, quaranta lunghezze slow, 640 combinazioni di un incrocio di medie mobili. La griglia finisce e una cella brilla: uno Sharpe annualizzato di 3.9, un p-value a test singolo di . Dodici zeri di significatività. Hai trovato qualcosa.
Oppure non hai trovato nulla, ed è stata la ricerca a trovarlo per te.
Una ricerca di parametri non è un test. È una macchina per trovare il più fortunato tra N tentativi, e più tentativi le dai, più fortunato apparirà il suo vincitore — con o senza un vero vantaggio sottostante. Lo Sharpe del migliore-tra-N è gonfiato dalla selezione nello stesso modo in cui il più alto tra mille persone a caso è alto: non perché l'altezza sia reale, ma perché hai cercato. Le statistiche a test singolo stampate accanto al vincitore — il suo p-value, la sua t-stat, il suo "è significativo?" — sono state progettate per un'unica ipotesi pre-registrata. Dai loro in pasto il sopravvissuto di una ricerca e mentiranno, con sicurezza, ogni volta.
Questo articolo misura esattamente quanto mentono, e poi misura tre strumenti che lo correggono. Il punto centrale è la ground truth controllata: generiamo rendimenti di cui conosciamo la risposta — a volte puro rumore con vantaggio zero, a volte un vantaggio piantato di intensità nota — così che "il metodo ha risposto correttamente?" è un fatto, non un giudizio soggettivo. Ecco l'headline in anteprima. Su ricerche a nullo noto, dove la risposta onesta è sempre "nessuna scoperta," ecco quanto spesso ciascun test grida al lupo:
| Test | Tasso di falsa scoperta su ricerche a nullo noto | Verdetto |
|---|---|---|
| Test ingenuo "lo Sharpe migliore è significativo?" | 1.000 | segnala una scoperta ogni singola volta |
| Deflated Sharpe Ratio (DSR ≥ 0.95) | 0.001 | controllato |
| Haircut Harvey-Liu — Bonferroni | 0.057 | ~controllato |
| Haircut Harvey-Liu — Holm | 0.057 | ~controllato |
| Haircut Harvey-Liu — BHY | 0.007 | controllato |
| Reality Check di White (bootstrap) | 0.022 | controllato |
1,000 strategie per ricerca, 1,000 osservazioni ciascuna, 2,000 ricerche nulle indipendenti, vero Sharpe = 0 ovunque. Rendimenti sintetici Normali iid, seed 0, α = 0.05, 252 periodi/anno. Il tasso di falsa scoperta del test ingenuo non è alto — è esattamente uno.
Leggi la prima riga finché non brucia. Un test che dovrebbe scattare il 5% delle volte su puro rumore scatta il 100% delle volte — perché non gli stai mostrando puro rumore, gli stai mostrando il massimo di mille estrazioni di puro rumore, e il massimo di mille lanciatori di monete sembra sempre un genio. Ogni altra riga è un metodo che lo sa e lo corregge. Questo è l'intero articolo: perché la prima riga è 1.000, perché le altre non lo sono, e l'unico punto (l'ultima sezione) in cui perfino i metodi buoni hanno bisogno di una seconda correzione per restare onesti.
Atto 1 — La trappola: una ricerca fabbrica Sharpe dal nulla

Inizia con la trappola più pulita possibile. Genera strategie i cui rendimenti sono rumore Normale-standard indipendente — nessun drift, nessuna abilità, vero Sharpe esattamente zero per tutte. Ognuna ha osservazioni. Ora fai ciò che fa ogni ricerca di parametri: tieni la migliore.
Lo Sharpe per-osservazione del migliore-tra-1000 ha una media di 0.1027, che annualizzato dà 1.63 (derivazione: ). Non è un numero modesto. Uno Sharpe annualizzato di 1.63 è il tipo di risultato che fa finanziare una strategia, scrivere un report, allocare capitale. Ed è venuto fuori da un generatore di numeri casuali con il drift impostato a zero.
Ora consegna il vincitore al test di significatività ingenuo — quello che ogni libreria di backtest stampa gratis. Converti il suo Sharpe in una t-statistic (), prendi il p-value a una coda, chiamalo scoperta se :
Il p-value mediano a test singolo di questi vincitori di rumore è 0.000686 — tre zeri di "significatività" da una strategia senza alcun vantaggio. E su 2,000 ricerche nulle indipendenti, il test ingenuo dichiara una scoperta in ognuna di esse: un tasso di falsa scoperta di 1.000. Non "gonfiato." Non "un po' alto." Un test che è corretto, per costruzione, al massimo il 5% delle volte su una singola ipotesi nulla è sbagliato il 100% delle volte sul vincitore di una ricerca.
Il meccanismo non è sottile, una volta nominato. Il test ingenuo chiede "questo Sharpe potrebbe nascere per caso sotto il nullo?" — una domanda corretta per una strategia scelta prima di guardare i dati. Ma hai scelto questa perché aveva lo Sharpe più alto tra mille. Ti sei condizionato sul massimo, e la distribuzione campionaria di un massimo non ha nulla a che vedere con la distribuzione campionaria di un'unica estrazione. È la stessa malattia diagnosticata dalla nostra tassonomia del look-ahead bias dall'altro capo — lì, un leak di un bar fabbricava uno Sharpe di 15 dal rumore; qui, una ricerca fabbrica uno Sharpe di 1.63 dal rumore senza alcun leak, puramente per selezione. Meccanismo diverso, sintomo identico: uno Sharpe dall'aspetto fantastico che non significa nulla.
Il numero 1.63 è quello importante, quindi tienilo a mente. È il tetto di rumore per questa ricerca: lo Sharpe che ti aspetteresti dalla più fortunata tra 1,000 strategie a vantaggio zero. Qualsiasi test onesto del vincitore di una ricerca deve confrontarlo non con lo zero, ma con questo — con ciò che la sola fortuna produce quando guardi mille volte.
Atto 2 — La cassetta degli attrezzi: tre modi di prezzare la ricerca

Tre filoni di ricerca, arrivati indipendentemente, raggiungono tutti la stessa correzione: smettere di confrontare il vincitore con lo zero, e iniziare a confrontarlo con ciò che una ricerca di queste dimensioni produce per fortuna. Differiscono nel modo in cui costruiscono quel confronto.
PSR e il Deflated Sharpe Ratio (Bailey & López de Prado, 2012 / 2014)
Il Probabilistic Sharpe Ratio pone una domanda più affilata di "lo Sharpe è positivo?" Chiede: data la lunghezza del campione e la forma dei rendimenti (asimmetria, code grasse), qual è la probabilità che il vero Sharpe superi un benchmark ?
Qui è la CDF Normale standard, è l'asimmetria (skew), e è la curtosi nella convenzione non-excess (Normale ⇒ ; sostituisci qui la curtosi in eccesso senza aggiungere 3 e la deflazione risulterà sbagliata). Imposta e PSR è semplicemente un test di significatività a campione finito. La magia sta nello scegliere bene .
Il Deflated Sharpe Ratio è il PSR valutato a un benchmark che non è zero ma è il massimo Sharpe atteso dell'intera ricerca:
dove è la varianza tra tutti gli N Sharpe dei trial (la dispersione che la ricerca stessa ha prodotto), è la costante di Eulero-Mascheroni, e i due termini Normale-inversa sono l'approssimazione della teoria dei valori estremi al massimo atteso di estrazioni Normali-standard. Nel codice è quasi troppo corto per impressionare:
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))
Allora il DSR è semplicemente il PSR con quella barra deflazionata:
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
Il DSR è una probabilità. Dichiariamo una scoperta quando : il vero Sharpe del vincitore batte il migliore atteso per fortuna con una confidenza del 95%. Nota l'assunzione portante incorporata in : gli trial sono trattati come indipendenti. L'Atto 5 è interamente dedicato a cosa succede quando non lo sono.
L'haircut di Harvey-Liu (2015)
Harvey e Liu attaccano lo stesso problema attraverso aggiustamenti dei p-value da test multipli — il macchinario classico per "ho eseguito M test, non lasciarmi ingannare." Ordina gli p-value a test singolo e gonfiali:
Bonferroni è lo strumento grezzo (controlla la probabilità di qualsiasi falso positivo moltiplicando ogni p-value per ); Holm è il suo cugino step-down uniformemente più potente. Il terzo, Benjamini-Yekutieli (BHY), controlla il tasso di falsa scoperta — la frazione attesa dei tuoi rigetti che sono sbagliati — e, in modo cruciale, lo fa sotto dipendenza arbitraria tra i test, usando il normalizzatore armonico al numeratore:
Quel è il prezzo che BHY fa pagare per non assumere che i tuoi 1,000 trial siano indipendenti — gonfia la soglia FDR di un fattore che cresce come . L'"haircut" stesso è la metrica finale: converti il p-value aggiustato di nuovo in uno Sharpe e riporta quanto dello Sharpe originale hai dovuto tagliare. Un haircut del 100% significa che il vincitore è interamente spiegato dai test multipli; 15% significa che sopravvive per la maggior parte.
La Reality Check di White e la SPA di Hansen (2000 / 2005)
Il terzo strumento non fa alcuna assunzione distribuzionale. La Reality Check di White prende i rendimenti effettivi di ogni regola, forma la statistica max-tra-regole, e bootstrappa direttamente la sua distribuzione nulla:
dove è la performance media della regola rispetto al benchmark. Ricampiona i rendimenti con il bootstrap stazionario (Politis-Romano — blocchi di lunghezza casuale così che la correlazione seriale sopravviva al ricampionamento), ricentra ogni estrazione per soddisfare il nullo per costruzione, ricalcola il massimo a ogni estrazione, e riporta il p-value come la frazione di massimi bootstrap che battono quello osservato. La SPA di Hansen affina la RC in due modi: studentizzazione (dividi la media di ogni regola per il suo stesso errore standard, così che una singola regola selvaggia ad alta varianza non possa dirottare il massimo) e un ricentraggio del nullo coerente e dipendente dal campione. La nostra implementazione aggiunge la studentizzazione ma non il passaggio completo di ricentraggio coerente — quindi ovunque questo articolo riporti un p-value di tipo SPA, leggilo come una Reality Check studentizzata, non la SPA di Hansen completa. Dove il DSR chiede "il vincitore è speciale all'interno di questa ricerca?", la Reality Check chiede "la regola migliore batte il cash dopo aver onestamente tenuto conto di quante regole ho provato?" — e gestisce le regole correlate in modo nativo, attraverso il bootstrap, senza mai contare i trial. Tieni a mente questa distinzione; l'ultima sezione ruota attorno ad essa.
Atto 3 — La calibrazione è l'intera dimostrazione

Un metodo che non segnala mai nulla avrebbe anch'esso un tasso di falsa scoperta pari a zero — e sarebbe inutile. Quindi l'unico test significativo di questi strumenti è bilaterale: su dati a nullo noto devono controllare le false scoperte a un livello pari o inferiore ad , e su dati a vantaggio noto (sezione successiva) devono comunque scattare. Questa sezione è la prima metà.
Esegui 2,000 ricerche indipendenti, ciascuna su 1,000 strategie a vantaggio zero, e conta quante volte ciascun metodo dichiara una scoperta. Quel conteggio, diviso per 2,000, è il tasso di falsa scoperta — e poiché la verità è nessun vantaggio, ogni scoperta è falsa:
| Test | Tasso di falsa scoperta (α = 0.05) |
|---|---|
| Significatività ingenua | 1.000 |
| Deflated Sharpe Ratio | 0.001 |
| Harvey-Liu — Bonferroni | 0.057 |
| Harvey-Liu — Holm | 0.057 |
| Harvey-Liu — BHY | 0.007 |
| Reality Check di White | 0.022 |
Ogni metodo principiato atterra al livello del 5% o vicino ad esso — i due haircut FWER un pelo sopra, DSR/BHY/RC sotto — mentre il test ingenuo sta a 100. (Bonferroni e Holm stampano qui lo stesso 0.057, e non per fortuna: per la singola strategia migliore il primo passo di Holm è , identico a Bonferroni per costruzione, quindi sono una conferma sola, non due.) Ma il numero più profondo dell'intero studio non è in questa tabella — è il benchmark deflazionato che produce la colonna DSR. Mediato sulle ricerche nulle, risulta essere, per-osservazione, 0.1030, che annualizzato dà 1.63 (derivazione: ) — lo stesso 1.63 che il vincitore medio di rumore ottiene (1.63). Non è una coincidenza; è l'intera idea che funziona:
La barra deflazionata si colloca esattamente al tetto di rumore. Il DSR non chiede al vincitore di una ricerca di battere lo zero. Gli chiede di battere il miglior punteggio che la sola fortuna produce da una ricerca di queste dimensioni — qui 1.63 annualizzato. Un vincitore che semplicemente eguaglia il tetto di rumore ottiene DSR ≈ 0.5 (un lancio di moneta), motivo per cui il DSR nullo medio è 0.495, non qualcosa di piccolo. Per essere una scoperta, il vincitore deve superare 1.63 e anche di più — abbastanza da spingere il PSR oltre 0.95.
Questo ridefinisce l'intero esercizio. Il test ingenuo misura la distanza dallo zero; ogni ricerca supera quella barra banalmente, motivo per cui è inutile. Il DSR misura la distanza dal tetto di rumore, e superare quella barra è genuinamente difficile — come dovrebbe essere. L'haircut di Harvey-Liu e la Reality Check raggiungono lo stesso controllo per strade diverse (un'inflazione per BHY, una distribuzione del massimo bootstrap per RC), e atterrano nello stesso vicinato: da 0.001 a 0.057, al livello di o vicino ad esso. Lo 0.057 di Bonferroni/Holm è di un pelo sopra la linea del 5%, ma di poco: con 2,000 ricerche Monte-Carlo l'errore standard su una stima FDR vicina a 0.05 è circa 0.005, quindi 0.057 si colloca a circa 1.4 errori standard sopra — rumore Monte-Carlo, non una garanzia rotta. "Controlla il FWER" è comunque una promessa asintotica, non esatta al bit a .
Atto 4 — Potenza: mantiene comunque i vantaggi reali?

Controllare le false scoperte è solo metà del test — un metodo paranoico che rigetta tutto ottiene un perfetto 0.000 e non vale nulla. L'altra metà: quando un vantaggio genuino c'è davvero, il DSR lo trova?
Piantane uno. In un campo di 1,000 strategie, fai in modo che 25 di esse portino un vantaggio reale di intensità nota e lascia le altre come rumore, poi esegui la ricerca e chiediti se il DSR segnala il vincitore. Fai variare il vantaggio piantato da debole a forte e la potenza di rilevamento traccia una pulita curva a S (tasso di falsi positivi mantenuto a ~0 per tutto il tempo):
| Vero Sharpe piantato (annualizzato) | Potenza di rilevamento DSR | Tasso di falsi positivi DSR |
|---|---|---|
| 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 |
Guarda dove la curva si piega. Sotto il tetto di rumore — un vero Sharpe annualizzato di 0.79, ben sotto 1.63 — il DSR scatta lo 0.5% delle volte, rifiutandosi correttamente di dichiararlo: un vantaggio così debole è genuinamente indistinguibile dalla fortuna che una ricerca di 1,000 trial genera, e fingere il contrario sarebbe disonesto, non potente. Proprio intorno al tetto la curva sale ripidamente (0.09 a 1.27, 0.65 a 1.90). A uno Sharpe annualizzato di 2.54 la potenza è 0.998; a 3.17 è un perfetto 1.000. I vantaggi forti vengono mantenuti praticamente ogni volta, i falsi positivi restano ancorati a zero, e l'incrocio del 50% di potenza si colloca a uno Sharpe annualizzato di circa 1.73 (derivato per interpolazione tra le righe 1.27 e 1.90) — appena sopra il tetto di rumore di 1.63, esattamente dove una barra onesta dovrebbe collocarlo: il punto in cui un vantaggio inizia a superare ciò che una ricerca di 1,000 trial inventa.
Questa è la proprietà che effettivamente vuoi, espressa come curva a S: i vantaggi sotto il tetto di rumore vengono correttamente esclusi come fortuna; i vantaggi comodamente sopra di esso vengono mantenuti con una potenza che si avvicina a uno. Il test ingenuo, per contrasto, "rileva" il vantaggio piantato il 67% delle volte perfino a uno Sharpe vero di 0.79 — ma quel numero è privo di significato, perché abbiamo già visto che rileva un vantaggio inesistente il 100% delle volte. Un test che scatta su tutto non ha potenza; non ha discriminazione. Il DSR scambia un po' di sensibilità sui vantaggi marginali (le righe 0.79 e 1.27) per la cosa che conta: le sue scoperte sono reali.
Atto 5 — La trappola del praticante: griglie correlate

Tutto ciò che è venuto finora ha usato strategie indipendenti — l'impostazione più pulita possibile, e quella in cui l'assunzione di indipendenza del DSR vale esattamente. Le griglie di parametri reali non sono così, ed è qui che uno strumento usato ingenuamente diventa un nuovo modo di sbagliare.
Prendi un'onesta ricerca a incrocio di medie mobili: 16 lunghezze fast 40 lunghezze slow trial, ciascuno con 755 osservazioni. Una griglia così è impregnata di correlazione — fast=45/slow=120 e fast=45/slow=125 sono quasi la stessa strategia, quindi i loro flussi di rendimento si muovono insieme. Correlazione media a coppie misurata sui 640 trial: circa 0.61. Non sono 640 scommesse indipendenti. Neanche lontanamente.
Caso A — random walk (nessun vantaggio): ogni metodo lo uccide, correttamente
Esegui la griglia su un puro random walk. Il vincitore sembra allettante: parametri fast=45/slow=120, miglior Sharpe annualizzato 0.81, p-value a test singolo 0.081. Ogni metodo lo vede attraverso:
| Metodo | Risultato | Verdetto |
|---|---|---|
| DSR (K grezzo = 640) | 0.431 | rigetta (< 0.95) |
| Reality Check p | 0.570 | rigetta |
| p di tipo SPA (RC studentizzata) | 0.569 | rigetta |
| Haircut Harvey-Liu | 100% | rigetta |
Inizia dall'indizio che non richiede alcuna deflazione: perfino la significatività a campione finito non aggiustata di questo vincitore, -contro-zero, è solo 0.918 — già sotto 0.95 prima ancora di correggere per uno solo dei 640 trial. La deflazione poi lo seppellisce: la barra è, per-osservazione, , annualizzata ~0.91 (derivazione: ) — sopra lo 0.81 del vincitore. La strategia migliore non raggiunge nemmeno il tetto di rumore, DSR ≈ 0.43 (peggio di un lancio di moneta), e Reality Check, il test di tipo SPA, e un haircut del 100% concordano tutti: qui non c'è nulla. Perfetto. Questo è il caso facile, e funziona — e, come vedremo, resta rigettato a ogni conteggio di trial effettivi che proviamo.
Caso B — un vero vantaggio di regime: il DSR grezzo lo sbaglia
Ora esegui la stessa griglia su una serie a regime variabile (regime-switching) che porta un vantaggio reale e sfruttabile. Il vincitore è netto: parametri fast=3/slow=55, miglior Sharpe annualizzato 3.92 — questo è lo Sharpe in-sample, selezionato, esso stesso gonfiato dalla selezione della ricerca (non un vantaggio vero o out-of-sample), ma l'effetto di regime sottostante è genuino — con un p-value a test singolo di e una significatività non deflazionata -contro-zero essenzialmente pari a 1.000. C'è un vantaggio reale qui e il vincitore lo ha trovato. Guarda il DSR grezzo rigettarlo comunque:
| Metodo | Risultato | Verdetto |
|---|---|---|
| DSR (K grezzo = 640) | 0.748 | rigetta (< 0.95) ✗ sovra-deflazionato |
| Reality Check p | 0.0024 | conferma ✓ |
| p di tipo SPA (RC studentizzata) | 0.0038 | conferma ✓ |
| Haircut Harvey-Liu | 15% | conferma ✓ |
Il DSR grezzo di 0.748 è un falso rigetto di un vantaggio genuino. La ragione è l'assunzione di indipendenza, ora violata pesantemente: il DSR ha costruito la sua barra deflazionata trattando 640 trial correlati come 640 estrazioni indipendenti, il che gonfia il massimo atteso a un per-osservazione di 0.221 — annualizzato ~3.51 (derivazione: ). Contro una barra di 3.51, un vincitore di 3.92 la supera solo modestamente, e il DSR atterra a 0.748 — sotto 0.95. Due cose gonfiano quella barra: il conteggio grezzo (640 sguardi invece di una manciata di quelli effettivi), e una dispersione genuina di abilità tra i trial — alcune coppie di parametri sono realmente migliori su una serie a regime, il che allarga e solleva oltre ciò che la sola fortuna produrrebbe. Entrambe spingono nella stessa direzione, e la barra finisce per essere troppo alta perché la ricerca non è mai stata davvero 640 sguardi indipendenti; erano poche scommesse indipendenti, campionate 640 volte.
Dai in pasto al DSR il numero effettivo di trial, invece. La one-liner usata sopra è una stima grezza dalla correlazione media a coppie:
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))
Con e , questo collassa la griglia a trial effettivi (derivazione: ), e il DSR salta a 1.000. Ma fermati prima di festeggiare quel numero, perché è la prova più debole in tutta questa sezione. A la barra deflazionata collassa a un annualizzato — sostanzialmente la media dei trial, sostanzialmente zero. Lì la deflazione è disattivata: il DSR a sta semplicemente ri-riportando la significatività a campione finito non deflazionata del vincitore (-contro-zero ). Il verdetto è ereditato dalla significatività grezza, non prodotto dalla correzione per test multipli. E l'avvertenza speculare sul lato del random walk: il suo rigetto a vale solo perché quel vincitore era già marginale indipendentemente all'inizio (-contro-zero ). Ancora l'intero argomento a 1.6 e uno scettico ha ragione ad alzare le spalle: hai disattivato la correzione e riportato qualunque cosa ci fosse sotto.
Quindi non ancorarti a un solo stimatore. La mossa onesta — e quella più forte — è calcolare in cinque modi standard diversi e leggere il verdetto attraverso l'intera banda. Ecco cinque stimatori applicati alla stessa griglia di segnale a 640 trial, ciascuno con la barra deflazionata che implica e il DSR che produce:
| Stimatore dei trial effettivi | Barra deflazionata (annuale) | DSR | Verdetto | |
|---|---|---|---|---|
| Correlazione media | 1.6 | 0.25 | 1.000 | mantiene |
| Participation ratio | 2.4 | 0.43 | 1.000 | mantiene |
| PCA (95% della varianza) | 16 | 1.85 | 1.000 | mantiene |
| Kaiser (autovalori > 1) | 21 | 2.00 | 0.999 | mantiene |
| Cheverud-Nyholt | 370 | 3.31 | 0.845 | rigetta |
| conteggio grezzo della griglia (nessun aggiustamento) | 640 | 3.51 | 0.748 | rigetta |
Stimatori: la correlazione media è la one-liner sopra; il participation ratio e i conteggi PCA-95%/Kaiser leggono la dimensionalità effettiva dagli autovalori della matrice di correlazione; Cheverud-Nyholt è uno stimatore di varianza-degli-autovalori dalla letteratura genetica noto per sovraccontare sotto quasi-equicorrelazione.
Ora il punto atterra, e non è "qualsiasi aggiustamento ti salva." Guarda la via di mezzo difendibile — PCA-95% () e Kaiser (). Questi non sono il regime di deflazione-disattivata; impongono una vera barra annualizzata di 1.85-2.00 — un haircut serio, ben sopra il rumore, una genuina penalità da test multipli per 16-21 sguardi effettivi. E il vantaggio di 3.92 la supera comunque (DSR 1.000 e 0.999). Il segnale sopravvive al DSR per qualsiasi sotto 144.8 (derivato dal punto di incrocio); fallisce solo sotto l' di Cheverud-Nyholt, uno stimatore che sovraconta dimostrabilmente quando i trial sono quasi-equicorrelati — e perfino il conteggio grezzo, non aggiustato, di 640 spinge il DSR giù solo a 0.748, non a zero. Il vincitore del random walk, fatto passare attraverso gli stessi identici cinque stimatori, viene rigettato con ognuno di essi (non sopravvive per nessun sopra 1). Questo è il risultato reale: non un singolo numero fortunato, ma un verdetto stabile attraverso l'intera banda di stimatori standard dei trial effettivi — che è un'evidenza molto più forte che fidarsi di uno solo di essi.
Un avvertimento tecnico sullo stimatore più grezzo, perché spiega perché si colloca all'estremo debole: è in realtà il fattore di riduzione della varianza per la media di variabili correlate (quanto ti guadagna la media sotto correlazione ). Il benchmark del DSR è una quantità di valore estremo — il massimo atteso dei trial — quindi usare uno shrinkage di varianza-della-media come conteggio dei trial è un disallineamento funzionale: giusto nella direzione (correlato ⇒ meno trial effettivi), ma non la quantità da cui dipende effettivamente la distribuzione del massimo. Questo è esattamente il motivo per cui gli stimatori basati sugli autovalori nel mezzo della banda sono la lettura più affidabile, e perché la banda, non il punto, è il risultato consegnabile.
La lezione: usa entrambi gli strumenti, e dai al DSR l'N giusta

Dal Caso B emergono due cose, ed entrambe sono portanti:
- La dimensione grezza della griglia è l'N sbagliata per il DSR ogniqualvolta i trial sono correlati — e nemmeno una singola N effettiva è quella giusta. Inserire 640 in una formula che assume indipendenza sovra-deflaziona: fabbrica un tetto di rumore molto più alto di quello che la ricerca ha effettivamente raggiunto e vi seppellisce sotto i vantaggi reali. Il DSR ha bisogno del conteggio effettivo dei trial — ma la correzione non è fidarsi di un solo stimatore (tanto meno del più grezzo, dove la correzione si disattiva vicino a ). È leggere il verdetto attraverso l'intera banda di stimatori standard (qui da 1.6 a 370) e vedere se è stabile. Per questo vantaggio lo era: mantenuto ovunque la deflazione sia genuinamente attiva (una vera barra annuale di 1.85-2.00 a -), fallendo solo sotto uno stimatore che sovraconta. Un verdetto stabile attraverso la banda è molto più forte di un singolo numero.
- Abbina il DSR a una Reality Check. Nota che la Reality Check e la sua cugina di tipo SPA (studentizzata) hanno azzeccato il Caso B senza alcuna chirurgia sul conteggio dei trial (p = 0.0024 e 0.0038) — gestiscono la dipendenza in modo nativo, attraverso il bootstrap stazionario, perché ricampionano i flussi di rendimento effettivamente correlati invece di contare scommesse ipoteticamente indipendenti. Questo è il fattore decisivo per l'intero pasticcio dell'N effettiva: la RC non ha bisogno di alcuna . DSR e RC rispondono a domande diverse: il DSR chiede "il vincitore è speciale all'interno di questa ricerca?" (e ha bisogno di sapere quanti sguardi effettivi ha fatto la ricerca); RC/tipo-SPA chiedono "la regola migliore batte il cash dopo il data-snooping?" (e leggono la dipendenza direttamente dai dati). Li vuoi entrambi. Quando sono in disaccordo — come è successo qui tra il DSR a conteggio grezzo e la RC — il disaccordo è diagnostico: di solito significa che la tua è sbagliata.
Questo è lo stesso avvertimento strutturale che i nostri studi sulla scala di velocità e sulla tassa IPC continuavano a incontrare dal lato ingegneristico — una ricerca veloce che esegue una griglia correlata enorme non ti sta comprando un numero enorme di scommesse indipendenti, e trattare la dimensione della griglia come conteggio dei trial inganna sia il tuo ottimizzatore che il tuo test di significatività. Il prossimo articolo compagno sulla probabilità di overfitting del backtest attacca lo stesso bias di selezione dal lato del ricampionamento (CSCV), e si abbina naturalmente a tutto quanto qui: il DSR prezza il vincitore, il PBO prezza la procedura.
Note di onestà
Tre avvertenze, dette chiaramente, perché l'intero senso di uno studio controllato è non sopravvenderlo.
- I rendimenti sono sintetici. Normali iid per gli esperimenti di calibrazione e potenza, un processo a regime variabile per il caso di vantaggio genuino — scelti per la ground truth controllata, non per il realismo di mercato. I rendimenti reali hanno code grasse, sono autocorrelati e non stazionari, e i termini di asimmetria/curtosi del PSR esistono proprio per gestire il primo di questi aspetti. Ciò che questo studio consegna è il metodo calibrato, non una strategia: possiamo provare che un test controlla le false scoperte solo eseguendolo su dati in cui sappiamo che non c'è nulla da scoprire. Questo richiede di fabbricare la ground truth.
- Nessuno stimatore dell'N effettiva è canonico — motivo per cui ne abbiamo riportati cinque. La one-liner della correlazione media è leggibile da un revisore e corretta nella direzione (più correlazione ⇒ meno trial effettivi), ma è il fattore di riduzione della varianza per una media — un disallineamento funzionale con il benchmark del massimo del DSR — e vicino a disattiva del tutto la deflazione. Gli stimatori basati sugli autovalori (participation ratio, PCA-95%, Kaiser) sono più allineati ma restano euristici, e Cheverud-Nyholt sovraconta sotto equicorrelazione. L'approccio più completo e principiato è il clustering dei trial (Appendice 3 del DSR di Bailey & López de Prado): raggruppare i trial per struttura di correlazione e contare i cluster invece di collassare tutto a uno scalare. Riportiamo l'intera banda proprio perché la scelta non è definitiva — un verdetto stabile su tutti e cinque gli stimatori è l'affermazione onesta; una che dipendesse dallo scegliere un singolo stimatore non lo sarebbe.
- Il bootstrap è una Reality Check studentizzata, non la SPA di Hansen completa, e i conteggi di ricampionamento differiscono per esperimento. Ovunque questo articolo dica "di tipo SPA," intende la Reality Check di White con studentizzazione per-regola; il ricentraggio completo, coerente e dipendente dal campione di Hansen non è implementato. I tassi di falsa scoperta della calibrazione usano 500 ricampionamenti bootstrap stazionari per ricerca su 400 ricerche; i due p-value RC/tipo-SPA dei casi studio ne usano 5,000 ciascuno. Lunghezza media dei blocchi 20 ovunque (Politis-Romano), , 252 periodi/anno per l'annualizzazione. Cambia questi valori e i numeri alla terza cifra decimale si spostano; la storia — 1.000 ingenuo contro 0.001-0.057 principiato, una curva a S che raggiunge il 50% di potenza appena sopra il tetto di rumore, e una trappola di griglia correlata il cui verdetto va letto attraverso la banda dell'N effettiva — no.
Punti Chiave
- Una ricerca di parametri è una macchina da test multipli, e il test di significatività ingenuo è cieco a questo. Su 1,000 strategie a vantaggio zero lo Sharpe annualizzato migliore ha una media di 1.63 con un p-value mediano a test singolo di 0.000686 — e il test "è significativo?" dichiara una scoperta il 100% delle volte (tasso di falsa scoperta 1.000). Un ottimo Sharpe dal nulla, certificato significativo da un test che non stava mai facendo la domanda giusta.
- Il Deflated Sharpe Ratio sposta il traguardo da zero al tetto di rumore. Il DSR confronta il vincitore non con lo zero ma con , il migliore atteso per fortuna di una ricerca di queste dimensioni — che per il caso nullo si colloca a un 1.63 annualizzato, esattamente dove si trova il vincitore medio di rumore (derivazione: ). Il suo tasso di falsa scoperta nullo è 0.001; l'haircut di Harvey-Liu (Bonferroni/Holm 0.057, BHY 0.007) e la Reality Check di White (0.022) raggiungono lo stesso controllo per altre strade.
- Mantiene i vantaggi reali. La potenza di rilevamento del DSR traccia una curva a S che raggiunge il 50% di potenza a uno Sharpe annualizzato di ~1.73 — appena sopra il tetto di rumore di 1.63: 0.005 a un vero Sharpe annualizzato di 0.79, 0.651 a 1.90, 0.998 a 2.54, 1.000 a 3.17, falsi positivi ~0 per tutto il percorso. I vantaggi sotto il tetto vengono correttamente giudicati indistinguibili dalla fortuna; i vantaggi sopra di esso vengono mantenuti con una potenza che si avvicina a uno.
- Le griglie correlate rompono il DSR grezzo — e nessuna singola N effettiva lo salva; lo fa la banda. Su un incrocio MA a 640 celle (correlazione media a coppie ~0.61), il DSR a conteggio grezzo ha falsamente rigettato un vantaggio genuino (selezionato in-sample, annuale 3.92) (0.748 < 0.95) perché 640 trial correlati non sono 640 scommesse indipendenti. Ma la correzione non è un'unica magica — alla stima più grezza () la deflazione è sostanzialmente disattivata (barra ~annuale 0.25) e il DSR si limita a fare eco alla significatività grezza. L'evidenza reale è che il vantaggio viene mantenuto attraverso l'intera banda di stimatori standard — DSR 1.000/1.000/1.000/0.999 a 1.6/2.4/16/21, inclusa una vera barra annuale di 1.85-2.00 nella fascia intermedia difendibile PCA-95%/Kaiser — sopravvivendo per qualsiasi , e fallendo solo sotto il 370 di sovraconteggio di Cheverud-Nyholt. Il random walk viene rigettato con ogni stimatore. Leggi la banda, non un punto.
- Abbina il DSR a una Reality Check, perché rispondono a domande diverse. La Reality Check e la sua cugina di tipo SPA (studentizzata) hanno confermato il vantaggio reale (p = 0.0024 e 0.0038) senza alcuna chirurgia sul conteggio dei trial — gestiscono la dipendenza in modo nativo attraverso il bootstrap stazionario, che è esattamente il fattore decisivo quando l'N effettiva è contesa. Il DSR chiede "il vincitore è speciale all'interno di questa ricerca?"; RC/tipo-SPA chiedono "il migliore batte il cash dopo il data-snooping?" Un disaccordo tra loro è un segnale che la tua è sbagliata. Eseguili entrambi.
Il vincitore di una ricerca è colpevole finché non è dimostrata la sua innocenza. Il p-value ingenuo non è una prova di innocenza — è la testimonianza gonfiata della ricerca stessa, e garantirà per il puro rumore con dodici zeri di confidenza. Deflaziona il benchmark a ciò che la fortuna offre, conta onestamente i tuoi trial effettivi, e bootstrappa il massimo per una seconda opinione. Ciò che supera tutte e tre le barre potrebbe essere davvero reale. Ciò che supera solo quella ingenua è il più alto tra mille lanciatori di monete.
L'esperimento completo — l'infrastruttura di calibrazione del nullo, lo sweep di potenza a vantaggio piantato, le ricerche a griglia correlata, e ogni numero di questo articolo rigenerabile da un unico script deterministico — è nel paper compagno su deflated-sharpe.marketmaker.cc, con codice e dati su github.com/suenot/deflated-sharpe-search.
Autori
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.