In questa pagina
Hai eseguito un backtest. L'equity curve sale verso destra. Win rate 68%, profit factor 2,3, Sharpe 1,9. Metti il capitale, colleghi il bot al mercato live, e nel giro di due settimane sei sotto del 14% e non riesci a spiegarti perché. Benvenuto nella lezione più costosa del quant retail: un singolo backtest in-sample è quasi sempre overfit, e non hai modo di sapere di quanto.
L'ottimizzazione walk-forward (WFO) è il modo in cui i quant professionisti smettono di mentire a se stessi. L'idea è più vecchia del trading algoritmico stesso — dividi i dati in blocchi, ottimizza sul passato, testa su un futuro che non hai ancora visto, poi scorri in avanti e ricomincia.
Cos'è davvero il walk-forward
Un run walk-forward fa tre cose in loop: sceglie una finestra di dati storici (la finestra in-sample), cerca tra i parametri della tua strategia quelli migliori per l'obiettivo scelto (Sharpe, CAGR, quello che vuoi), poi valuta quei parametri congelati sul blocco di dati successivo (la finestra out-of-sample). Fai scorrere le finestre in avanti e ripeti finché non hai coperto tutta la storia.
Quello che ottieni non è una singola equity curve, è una catena di curve out-of-sample cucite insieme. Ogni dollaro di P&L su quella catena è stato guadagnato su dati che l'ottimizzatore non aveva mai visto. Se la catena assomiglia alla curva in-sample, hai una strategia reale. Se si sgretola, hai un curve fit.

Finestre anchored vs rolling
Esistono due varianti. Il walk-forward anchored tiene fisso l'inizio della finestra in-sample e la fa crescere man mano che il test avanza — ogni iterazione vede più storia. Il walk-forward rolling mantiene la finestra in-sample della stessa lunghezza e fa scorrere entrambe le estremità. Anchored è il default giusto per mercati che cambiano lentamente; rolling è il default giusto se sospetti un cambio di regime.
La maggior parte dei tool retail, incluso lo strategy tester di TradingView, non fa né l'uno né l'altro. Eseguono una sola ottimizzazione, riportano i parametri migliori e si fermano. I numeri che vedi sullo schermo sono il limite superiore di ciò che la strategia può fare sul passato. Il limite inferiore — ciò che farà sul futuro — è invisibile.
Un esempio concreto
Supponiamo che tu stia testando un incrocio di EMA su BTC/USDT a 4h da gennaio 2022 a dicembre 2025. Un backtest ingenuo ottimizza la coppia di EMA veloce/lenta su tutti e quattro gli anni e riporta uno Sharpe di 1,8. Un run walk-forward con uno schema di 12 mesi in-sample / 3 mesi out-of-sample avrebbe questo aspetto:
# Iteration In-sample window Out-of-sample window
1 2022-01 → 2022-12 2023-01 → 2023-03
2 2022-04 → 2023-03 2023-04 → 2023-06
3 2022-07 → 2023-06 2023-07 → 2023-09
4 2022-10 → 2023-09 2023-10 → 2023-12
... continue rolling forward ...
16 2024-10 → 2025-09 2025-10 → 2025-12
Concatenate the 16 out-of-sample returns -> realistic equity curve.Se la curva concatenata ti dà uno Sharpe di 0,6, quella è la tua aspettativa onesta. L'1,8 era selection bias travestito da performance.
Cosa può ancora andare storto
Il walk-forward non è magia. Tre modalità di fallimento sono comuni. Primo, se fai walk-forward sulla ricerca dei parametri ma non sulla struttura della strategia, stai ancora facendo curve-fitting a un livello più alto — anche la scelta del set di indicatori è un'ottimizzazione. Secondo, se le tue finestre out-of-sample sono minuscole (diciamo due settimane), stai solo campionando rumore. Terzo, se sbirci i risultati out-of-sample per decidere se tenere la strategia, li hai contaminati — ora fanno parte del tuo processo decisionale e hanno perso il loro valore predittivo.
Uno snippet di rule set
Su Noon Barbari, l'ottimizzatore walk-forward prende lo stesso rule set YAML che useresti per il backtest. Un esempio minimale per un incrocio di EMA con due parametri da esplorare:
strategy:
name: ema_cross
indicators:
- id: fast
kind: EMA
period: { sweep: [10, 14, 21, 34, 55] }
- id: slow
kind: EMA
period: { sweep: [50, 100, 200] }
rules:
entry: { type: cross_above, left: fast, right: slow }
exit: { type: cross_below, left: fast, right: slow }
risk:
size_pct: 0.5
stop_loss_atr: 2.5
walk_forward:
in_sample_months: 12
out_of_sample_months: 3
mode: rollingFai passare quel file per l'ottimizzatore walk-forward e ottieni un report per finestra più la curva out-of-sample ricucita. La documentazione walk-forward copre lo schema completo e le funzioni obiettivo supportate dall'ottimizzatore.
Quanta degradazione è normale?
La ricerca di settore ha costantemente rilevato che la performance out-of-sample si attesta in media al 30-60% di quella in-sample attraverso le varie asset class. Se la tua strategia sopravvive al walk-forward con uno Sharpe circa la metà di quello promesso dall'ottimizzazione in-sample, è un segnale sano. Se sopravvive con il 90% del numero in-sample, sii sospettoso — probabilmente hai testato troppo poche combinazioni di parametri per esplorare davvero lo spazio dei parametri.
Prossimi passi
Comincia dalla guida introduttiva per costruire il tuo primo rule set, poi punta la documentazione sul backtesting su un qualsiasi periodo storico per ottenere una curva di sanity check. Quando sei soddisfatto della struttura, attiva il walk-forward e guarda lo Sharpe scendere. Quel calo è la verità.
Provalo con i tuoi dati
Ogni concetto visto sopra è implementato nella piattaforma. Backtest, walk-forward, paper trading, poi passa al live — stesso set di regole in ogni fase.