Backtesting Without Fooling Yourself
A step-by-step path from what your backtest really optimizes to proving an edge survives overfitting, multiple testing, and live execution. Read top to bottom — each part builds on the last.
- 01
Jun 28, 2026 #algotradingIl Design della Funzione Obiettivo: La Metrica che Ottimizzi Sceglie di Nascosto la Tua Strategia
Per cercare la strategia 'migliore' devi prima definire 'migliore' — e quello scalare sceglie di nascosto il vincitore. Su dati sintetici con un vantaggio noto (600 seed, T=2000, 80 soglie), uno Sharpe per-trade ingenuo incorona una lotteria: sceglie un vincitore con esposizione sotto il 5% nel 56% dei seed e degenera nel 57% — nel seed più estremo, 8 trade che ottengono uno Sharpe in-sample di 21.09 che collassa a 0.13 out of sample. La riparazione onesta è quasi banale: misurare sull'intera timeline, che non degenera mai (out-of-sample 1.71). Uno shrinkage sul conteggio dei trade (conf_k) e un floor di esposizione possono correggere retroattivamente una metrica per-trade, ma anche completamente riparati eguagliano soltanto lo Sharpe sull'intera timeline (1.70 contro 1.71) — senza mai batterlo. La legge di Goodhart, in un backtest, con una ground truth controllata.
- 02
Jul 8, 2026 #trading algoritmicoDimostrare l'assenza di look-ahead nei backtest multi-timeframe: perturbare il futuro per dimostrare che il passato non può vederlo
I backtest multi-timeframe fanno trapelare il futuro attraverso una barra di timeframe superiore ancora in formazione, la cui chiusura finale non esiste ancora. Non si può raggiungere la certezza con una semplice code review — bisogna testarlo. Riproduciamo esattamente la regola closed-bar del bot live, poi dimostriamo l'assenza di leakage con una probe a futuro perturbato: perturbiamo ogni barra futura e verifichiamo che ogni segnale e trade passato resti bitwise invariato. 25/25 controlli di parità superati, e la probe ha i denti.
- 03
Mar 15, 2026 #algotradingWalk-Forward Optimization: L'Unico Test Onesto per una Strategia
Perché una singola divisione train/test non protegge dall'overfitting, come la walk-forward optimization verifica sistematicamente la robustezza dei parametri, e perché una strategia con +3342% PnL@ML su 21 parametri è una bomba a orologeria senza WFO.
- 04
Mar 12, 2026 #algotradingAnalisi del Plateau: Come Distinguere un Ottimo Robusto dall'Overfitting
Perché trovare i migliori parametri di strategia è solo metà del lavoro. Come distinguere visivamente e quantitativamente un plateau stabile da un picco fragile, e perché i contour plot di Optuna sono un passaggio obbligatorio prima di lanciare una strategia ottimizzata in produzione.
- 05
Mar 6, 2026 #algotradingMonte Carlo Bootstrap: Come Ottenere Intervalli di Confidenza per un Backtest in 10 Righe di Codice
Perché una stima puntuale da un backtest è un'illusione pericolosa. Come il bootstrap Monte Carlo in 2 secondi di calcolo fornisce un intervallo di confidenza al 95% per PnL e MaxDD, e perché questo è un passaggio obbligatorio prima di avviare una strategia in produzione.
- 06
Jul 1, 2026 #algotradingLa Probability of Backtest Overfitting: La Tua Ricerca Ha Battuto un Lancio di Moneta?
Il Deflated Sharpe Ratio prezza la strategia vincente; il PBO prezza la ricerca che l'ha scelta. La Combinatorially Symmetric Cross-Validation esegue C(16,8) = 12,870 split train/test su una matrice di performance 1000x200 e chiede: il vincitore in-sample finisce nella metà inferiore out-of-sample? La trappola che quasi tutti si perdono — il nullo del PBO è 0.5, non 1. Su 200 strategie a vantaggio zero, il miglior Sharpe annualizzato in-sample di 1.98 collassa a 0.06 out-of-sample e PBO = 0.476: un lancio di moneta, completamente overfit. Pianta un vantaggio reale (Sharpe annualizzato 2.38) e il PBO scende a 0.001, con l'in-sample 3.73 che sopravvive a un out-of-sample 2.34. Anche una griglia di medie mobili su un puro random walk non ha alcuna abilità out-of-sample — PBO 0.463 mediato su 60 matrici, statisticamente indistinguibile dal nullo — e su una matrice rappresentativa il miraggio è vivido: un miglior Sharpe in-sample di 2.33 collassa a un out-of-sample mediano di -0.22, PBO 0.573, un 63% di probabilità di perdita.
- 07
Jun 29, 2026 #algotradingIl Deflated Sharpe Ratio: Quanti dei 'Vincitori' del Tuo Backtest Sopravvivono ai Test Multipli?
Una ricerca di parametri è una macchina per fabbricare fortuna. Su puro rumore — 1,000 strategie con vantaggio reale pari a zero — lo Sharpe annuale migliore ha una media di 1.63 e il test di significatività ingenuo segnala una scoperta il 100% delle volte. Costruiamo una ground truth controllata e mostriamo che il Deflated Sharpe Ratio, l'haircut di Harvey-Liu e la Reality Check di White ripristinano l'onestà: le scoperte false scendono da 1.000 a 0.001-0.057, i vantaggi genuini sopra il tetto di rumore vengono mantenuti con potenza ~1 — e un'unica vera trappola (griglie correlate) in cui il DSR grezzo sovra-deflaziona e il verdetto va letto attraverso un'intera banda di stime dei trial effettivi, non una sola.
- 08
Mar 7, 2026 #algotradingParità backtest-live: perché il tuo bot fa trading in modo diverso dal backtest
Tassonomia completa delle divergenze tra backtest e trading live: dallo slippage e i fill parziali alla desincronizzazione del codice. Pattern architetturali per ottenere la parità, esempi Python di un modulo core condiviso e una checklist di monitoraggio in produzione.
- 09
Jul 9, 2026 #algotradingIl negativo onesto: decine di migliaia di backtest, cinque major, nessun edge robusto
Il culmine dell'arco narrativo su ricerca e overfitting, e si conclude con un risultato negativo — quello corretto. Una ricerca single-symbol dual-timeframe su ETHUSDT ha trovato una configurazione che valeva +16,35% out-of-sample e +2,62% su un holdout mai toccato; il Deflated Sharpe Ratio, tenendo conto di ~37.000 prove, l'ha sgonfiata a 0,00. Un passaggio cross-instrument su cinque major (ETH/BTC/SOL/BNB/XRP, ~1,18M di barre da 1m ciascuno), selezionando per mediana out-of-sample, la elimina definitivamente: dual DSR 0,24 / PBO 0,264, triple DSR 0,14 / PBO 0,327 — entrambi falliscono i gate. Il campione e profittevole su 1 di 5 simboli e negativo sugli altri. E' proprio a questo che serve l'apparato anti-overfit: a impedirti di spacciare il migliore del rumore per alpha.