← Torna agli articoli
July 2, 2026
5 min di lettura

Il Deflated Sharpe Ratio: Quanti dei 'Vincitori' del Tuo Backtest Sopravvivono ai Test Multipli?

Il Deflated Sharpe Ratio: Quanti dei 'Vincitori' del Tuo Backtest Sopravvivono ai Test Multipli?
#algotrading
#backtest
#overfitting
#statistiche
#sharpe
#multiple-testing
#validazione
🎯
Part 6 of 7 · Collection
Backtesting Without Fooling Yourself

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 6×10126\times10^{-12}. 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

Una ricerca di parametri raffigurata come una slot machine che fa passare mille curve di strategia casuali attraverso un imbuto, con un'unica curva più fortunata che emerge etichettata con un allettante Sharpe ratio mentre le curve scartate sfumano nel rumore sullo sfondo

Inizia con la trappola più pulita possibile. Genera N=1000N = 1000 strategie i cui rendimenti sono rumore Normale-standard indipendente — nessun drift, nessuna abilità, vero Sharpe esattamente zero per tutte. Ognuna ha T=1000T = 1000 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: 0.1027×2521.630.1027 \times \sqrt{252} \approx 1.63). 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 (t=SR^Tt = \hat{SR}\sqrt{T}), prendi il p-value a una coda, chiamalo scoperta se p<0.05p < 0.05:

t=SR^T,p=1Z(t),"discovery" if p<αt = \hat{SR}\sqrt{T}, \qquad p = 1 - Z(t), \qquad \text{"discovery" if } p < \alpha

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 strumenti di misura posati su un banco da lavoro, ciascuno puntato sullo stesso numero di Sharpe gonfiato: un manometro deflazionante che abbassa una barra di riferimento, un set di forbici graduate per l'haircut, e una ruota di ricampionamento bootstrap che fa girare molte copie ombra di una serie di rendimenti

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 SRSR^*?

PSR(SR)=Z ⁣((SR^SR)n11γ^3SR^+γ^414SR^2)\text{PSR}(SR^*) = Z\!\left( \frac{(\hat{SR} - SR^*)\sqrt{n-1}}{\sqrt{\,1 - \hat\gamma_3\,\hat{SR} + \frac{\hat\gamma_4 - 1}{4}\,\hat{SR}^2\,}} \right)

Qui ZZ è la CDF Normale standard, γ^3\hat\gamma_3 è l'asimmetria (skew), e γ^4\hat\gamma_4 è la curtosi nella convenzione non-excess (Normale ⇒ γ^4=3\hat\gamma_4 = 3; sostituisci qui la curtosi in eccesso senza aggiungere 3 e la deflazione risulterà sbagliata). Imposta SR=0SR^* = 0 e PSR è semplicemente un test di significatività a campione finito. La magia sta nello scegliere bene SRSR^*.

Il Deflated Sharpe Ratio è il PSR valutato a un benchmark che non è zero ma è il massimo Sharpe atteso dell'intera ricerca:

SR0=Var[{SRn}]  ((1γ)Z1 ⁣(11N)  +  γZ1 ⁣(11Ne))SR_0 = \sqrt{\operatorname{Var}[\{SR_n\}]}\;\Big(\,(1-\gamma)\,Z^{-1}\!\big(1 - \tfrac{1}{N}\big) \;+\; \gamma\,Z^{-1}\!\big(1 - \tfrac{1}{N e}\big)\Big)

dove Var[{SRn}]\operatorname{Var}[\{SR_n\}] è la varianza tra tutti gli N Sharpe dei trial (la dispersione che la ricerca stessa ha prodotto), γ0.5772\gamma \approx 0.5772 è la costante di Eulero-Mascheroni, e i due termini Normale-inversa sono l'approssimazione della teoria dei valori estremi al massimo atteso di NN 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 DSR1α=0.95\text{DSR} \geq 1 - \alpha = 0.95: il vero Sharpe del vincitore batte il migliore atteso per fortuna con una confidenza del 95%. Nota l'assunzione portante incorporata in SR0SR_0: gli NN 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 MM p-value a test singolo p(1)p(M)p_{(1)} \le \dots \le p_{(M)} e gonfiali:

piBonf=min[Mp(i),1],piHolm=min ⁣[maxji{(Mj+1)p(j)},1]p_i^{\text{Bonf}} = \min[\,M\,p_{(i)},\,1\,], \qquad p_i^{\text{Holm}} = \min\!\Big[\max_{j\le i}\{(M-j+1)\,p_{(j)}\},\,1\Big]

Bonferroni è lo strumento grezzo (controlla la probabilità di qualsiasi falso positivo moltiplicando ogni p-value per MM); 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:

c(M)=j=1M1j,c(1000)7.49c(M) = \sum_{j=1}^{M} \frac{1}{j}, \qquad c(1000) \approx 7.49

Quel c(1000)=7.49c(1000) = 7.49 è 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 lnM\ln M. 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:

RCT=maxk=1,,KTfˉkRC_T = \max_{k=1,\dots,K} \sqrt{T}\,\bar{f}_k

dove fˉk\bar{f}_k è la performance media della regola kk 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 grafico di calibrazione che contrappone una barra che svetta a un tasso di falsa scoperta di uno contro cinque barre corte ancorate vicino al livello alpha del cinque percento, con una linea di riferimento orizzontale che segna il tetto di rumore Sharpe di uno virgola sessantatré

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 α\alpha, 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 è (M1+1)p(1)=Mp(1)(M-1+1)\,p_{(1)} = M\,p_{(1)}, 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, SR0SR_0 risulta essere, per-osservazione, 0.1030, che annualizzato dà 1.63 (derivazione: 0.1030×2521.630.1030 \times \sqrt{252} \approx 1.63) — 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 c(1000)=7.49c(1000)=7.49 per BHY, una distribuzione del massimo bootstrap per RC), e atterrano nello stesso vicinato: da 0.001 a 0.057, al livello di α\alpha 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 α\alpha — rumore Monte-Carlo, non una garanzia rotta. "Controlla il FWER" è comunque una promessa asintotica, non esatta al bit a T=1000T = 1000.

Atto 4 — Potenza: mantiene comunque i vantaggi reali?

Una curva di potenza di rilevamento a forma di S che sale da quasi zero a uno mentre il vero Sharpe piantato aumenta lungo l'asse orizzontale, con una linea tratteggiata verticale al tetto di rumore Sharpe di uno virgola sessantatré e la curva che raggiunge il cinquanta percento di potenza appena alla sua destra, e una linea piatta di falsi positivi ancorata al pavimento

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

Una heatmap a griglia di parametri di risultati di incrocio di medie mobili che brilla con una forte correlazione a coppie tra celle vicine, accanto a un asse orizzontale di cinque diverse stime dei trial effettivi che spaziano da circa due a quasi quattrocento, con una banda di robustezza ombreggiata che mostra il vantaggio genuino superare la barra deflazionata lungo quasi l'intero intervallo e solo la stima di sovraconteggio all'estrema destra scendere sotto

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 ×\times 40 lunghezze slow =640= 640 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, PSR\text{PSR}-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, SR0=0.057SR_0 = 0.057, annualizzata ~0.91 (derivazione: 0.057×2520.057 \times \sqrt{252}) — 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 6×10126\times10^{-12} e una significatività non deflazionata PSR\text{PSR}-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 SR0SR_0 a un per-osservazione di 0.221 — annualizzato ~3.51 (derivazione: 0.221×2520.221 \times \sqrt{252}). 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 Var[{SRn}]\operatorname{Var}[\{SR_n\}] e solleva SR0SR_0 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 ρˉ0.62\bar\rho \approx 0.62 e N=640N = 640, questo collassa la griglia a Neff1.6N_{\text{eff}} \approx 1.6 trial effettivi (derivazione: 640/(1+639×0.62)640 / (1 + 639 \times 0.62)), e il DSR salta a 1.000. Ma fermati prima di festeggiare quel numero, perché è la prova più debole in tutta questa sezione. A Neff1.6N_{\text{eff}} \approx 1.6 la barra deflazionata collassa a un SR00.25SR_0 \approx 0.25 annualizzato — sostanzialmente la media dei trial, sostanzialmente zero. Lì la deflazione è disattivata: il DSR a Neff1.6N_{\text{eff}} \approx 1.6 sta semplicemente ri-riportando la significatività a campione finito non deflazionata del vincitore (PSR\text{PSR}-contro-zero =1.000= 1.000). 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 Neff1.6N_{\text{eff}} \approx 1.6 vale solo perché quel vincitore era già marginale indipendentemente all'inizio (PSR\text{PSR}-contro-zero =0.918<0.95= 0.918 < 0.95). 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 NeffN_{\text{eff}} 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 NeffN_{\text{eff}} Barra deflazionata SR0SR_0 (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 N/(1+(N1)ρˉ)N/(1+(N-1)\bar\rho) sopra; il participation ratio (λi)2/λi2(\sum\lambda_i)^2/\sum\lambda_i^2 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% (Neff=16N_{\text{eff}} = 16) e Kaiser (Neff=21N_{\text{eff}} = 21). Questi non sono il regime di deflazione-disattivata; impongono una vera barra SR0SR_0 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 NeffN_{\text{eff}} sotto 144.8 (derivato dal punto di incrocio); fallisce solo sotto l'Neff=370N_{\text{eff}} = 370 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 NeffN_{\text{eff}} 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: N/(1+(N1)ρˉ)N/(1+(N-1)\bar\rho) è in realtà il fattore di riduzione della varianza per la media di variabili correlate (quanto ti guadagna la media sotto correlazione ρˉ\bar\rho). 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

Due strumenti complementari puntati sullo stesso vincitore di ricerca da angolazioni diverse: uno etichettato con la domanda il vincitore è speciale all'interno di questa ricerca, che richiede una manopola per il conteggio dei trial effettivi, l'altro etichettato il migliore batte il cash dopo il data-snooping, guidato da un bootstrap che legge la correlazione direttamente dai dati

Dal Caso B emergono due cose, ed entrambe sono portanti:

  1. 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 Neff=2N_{\text{eff}} = 2). È 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 Neff=16N_{\text{eff}} = 16-2121), fallendo solo sotto uno stimatore che sovraconta. Un verdetto stabile attraverso la banda è molto più forte di un singolo numero.
  2. 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 NN. 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 NN è 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 Neff=N/(1+(N1)ρˉ)N_{\text{eff}} = N/(1 + (N-1)\bar\rho) è 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 Neff<2N_{\text{eff}} < 2 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), α=0.05\alpha = 0.05, 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

  1. 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.
  2. Il Deflated Sharpe Ratio sposta il traguardo da zero al tetto di rumore. Il DSR confronta il vincitore non con lo zero ma con SR0SR_0, 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: 0.1030×2520.1030 \times \sqrt{252}). 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.
  3. 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.
  4. 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 NeffN_{\text{eff}} magica — alla stima più grezza (Neff1.6N_{\text{eff}} \approx 1.6) 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 Neff=N_{\text{eff}} = 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 Neff<145N_{\text{eff}} < 145, 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.
  5. 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 NN è 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.

Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.