Probabilmente il segnale di ingresso è la cosa meno determinante del tuo backtest. Posso prendere una mediocre regola momentum, lasciare invariati tutti i timestamp di ingresso e uscita, cambiare solo la funzione che decide quanti contratti detenere e spostare lo Sharpe netto da 0.41 a 0.71 e il drawdown massimo dal 31% al 13%. Stesse operazioni. Stessi eseguiti. Strategia diversa.
È un'affermazione che irrita, e a ragione, perché implica che gran parte del tempo dedicato a ottimizzare i lookback e le soglie dei filtri venga speso sul termine meno rilevante. Quindi vi mostro i risultati effettivi, poi do spazio alle obiezioni, perché c'è una versione sbagliata di questo argomento ed è utile capire quale versione sto sostenendo.
Un segnale, 6 modi per gestirlo
Il segnale: perpetuo ETHUSDT su Binance USDⓈ-M, barre da 1 ora, posizione long quando la EMA a 12 ore è sopra la EMA a 96 ore, altrimenti flat, nessuna posizione short. Da luglio 2022 a giugno 2026. 431 operazioni di andata e ritorno. Commissioni taker su entrambi i lati a 5.0 bps, funding pagato o ricevuto ogni 8 ore sulla posizione effettiva, slippage modellato sulla profondità del book di primo livello. È un segnale volutamente banale: l'ho scelto perché nessuno lo difenderebbe, così offre un banco di prova pulito.
Ogni riga qui sotto condivide timestamp identici per le barre di ingresso e uscita. L'unica differenza è la funzione di dimensionamento.
| Regola di dimensionamento | Sharpe netto | DD massimo | Nozionale scambiato/anno (× posizione media) | Costi in % del PnL lordo | Leva massima |
|---|---|---|---|---|---|
| Nozionale fisso di $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Frazione fissa, 100% dell'equity | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Inverso della volatilità realizzata a 20 giorni | 0.68 | 14.1% | 690× | 29% | 4.4× |
| Target di volatilità annualizzata del 20%, ribilanciamento orario, senza limite | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| Target di volatilità del 20%, banda di non intervento del 20%, limite di leva a 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Mezzo Kelly su media/varianza mobile a 60 giorni | 0.52 | 24.6% | 830× | 33% | 8.1× |
Guardate l'ampiezza della differenza. Tra la riga peggiore e quella migliore c'è una differenza relativa del 73% nello Sharpe e un fattore di 2.4 nel drawdown. Ora trovatemi un parametro del segnale di ingresso, su questo dataset, che sposti lo Sharpe di 0.30 senza essere anche un evidente caso di overfitting. Ci ho provato. La lunghezza della coppia di EMA lo sposta di circa 0.12 sull'intera griglia plausibile, e gran parte di quel movimento è rumore che non si mantiene fuori campione.
Perché l'inverso della volatilità sembra così efficace, e quanta parte del risultato è reale
Il meccanismo è chiaro. Con un nozionale fisso, la dimensione della posizione non è correlata alla volatilità realizzata, quindi il rischio in dollari per operazione è proporzionale alla volatilità di quella settimana. Su ETH, in questo intervallo, la volatilità realizzata a 20 giorni è andata dal 31% al 118% annualizzato. La simulazione a nozionale fisso ha assunto un rischio in dollari 3.8× maggiore a marzo 2024 rispetto a luglio 2023, non perché il segnale fosse più sicuro, ma perché il mercato era più turbolento. Quasi tutto il suo drawdown è concentrato nel quintile di volatilità più alta. Il dimensionamento inversamente proporzionale alla volatilità elimina questo legame, migliorando davvero la distribuzione dei rendimenti.
Ma una parte del miglioramento dello Sharpe è un artefatto di misurazione, e se non distinguete le due componenti prenderete decisioni sbagliate in seguito. Lo Sharpe divide per la deviazione standard dei rendimenti. Il targeting della volatilità è, per definizione, un'operazione che stabilizza la deviazione standard dei rendimenti. State ottimizzando direttamente il denominatore. Una regola che scala le posizioni per raggiungere una volatilità ex ante costante migliorerà lo Sharpe su quasi qualsiasi serie di rendimenti con clustering della volatilità, comprese quelle senza alcun vantaggio. L'ho verificato su segnali rimescolati: randomizzate i timestamp di ingresso, mantenete l'overlay di targeting della volatilità e lo Sharpe migliora comunque di circa 0.06 rispetto al nozionale fisso, partendo da una media nulla. È un miglioramento piccolo, ma non nullo, e dipende solo dalla meccanica del calcolo.
Perciò, quando confronto internamente le regole di dimensionamento, lo Sharpe non è mai l'unico numero nel foglio. Voglio il Calmar, il PnL netto per unità di nozionale medio impiegato e la cascata dal lordo al netto, perché insieme sono molto più difficili da manipolare con un trucco sul denominatore.
La stima della volatilità è un modello, e può introdurre leakage
Il motivo più comune per cui un buon risultato di dimensionamento si rivela falso è che la stima della volatilità usa informazioni della barra su cui dimensiona la posizione. Se la serie della volatilità è calcolata con una finestra centrata, oppure con `rolling().std()` predefinito di pandas applicato dopo un resampling che include la barra parziale corrente, oppure con una standardizzazione sull'intero campione, c'è leakage. È subdolo perché la volatilità persiste nel tempo: il leakage è piccolo su ogni singola riga e la curva dell'equity continua a sembrare plausibile. È solo un po' troppo regolare proprio nelle settimane che contano.
I nostri agenti verificano 4 aspetti per ogni regola di dimensionamento prima che un risultato venga promosso alla coda di paper trading:
- Disponibilità al momento della decisione. La dimensione usata sulla barra che apre alle 14:00 deve essere calcolabile dai dati con timestamp di chiusura ≤ 13:59:59.999. Lo verifichiamo ricalcolando la serie delle dimensioni da un frame troncato, su un campione casuale di 200 punti decisionali, e confrontando i risultati.
- Il lookback dello stimatore è un vero parametro. Una finestra di volatilità a 20 giorni e una a 60 giorni sono 2 strategie diverse. Il lookback entra nella griglia walk-forward insieme a tutto il resto, e se il risultato funziona solo con una durata della finestra, abbiamo scoperto una fragilità.
- Percorso della leva, non solo valore massimo. Mostrate la distribuzione completa della leva lorda. La simulazione senza limiti di leva e con target di volatilità qui sopra ha trascorso il 4% delle ore sopra 5×: un dato che non compare mai nelle tabelle riepilogative, ma determina completamente se la strategia è attuabile.
- Sensibilità del dimensionamento come test di robustezza. Se lo Sharpe crolla quando si cambia il target di volatilità dal 20% al 25%, la strategia non è dimensionata in base alla volatilità: è calibrata sulla leva, e avete trovato il vostro vantaggio scegliendo un numero.
Il limite di leva non è un'aggiunta cosmetica alla gestione del rischio: fa parte della definizione della strategia. Le fasce di Binance per ETHUSDT riducono la leva massima all'aumentare del nozionale della posizione, e con essa sale il tasso di margine di mantenimento. Un backtest che lascia la regola di targeting della volatilità arrivare a 6.3× con un nozionale di $400k descrive una posizione che la piattaforma non permetterà di mantenere con quel margine. La riga con il limite costa 0.05 di Sharpe ed è l'unica delle 2 a descrivere qualcosa di reale.
È nel ribilanciamento che se ne va il denaro
Notate la colonna dei costi. Il ribilanciamento orario verso un target di volatilità ha prodotto lo Sharpe migliore in apparenza e ha anche ceduto il 41% del PnL lordo all'exchange. Ogni anno è stato scambiato un nozionale pari a 1,180× quello medio della posizione, con commissioni di 5 bps per lato, più spread e impatto. La soluzione semplicistica è ribilanciare meno spesso, secondo un calendario. Quella migliore è usare una banda di non intervento: si ridimensiona la posizione solo quando si discosta dal target oltre una certa soglia.
Una banda del 20% ha ridotto il nozionale scambiato annualmente da 1,180× a 402×, cioè del 66%, con un costo di 0.05 di Sharpe. L'ho provata ormai su 8 segnali e il risultato si ripete: bande tra il 15% e il 25% recuperano gran parte del beneficio di controllo del rischio con un terzo del turnover, mentre sotto il 10% si pagano commissioni solo per una precisione di facciata su una quantità che si stima comunque con una finestra di 20 giorni. Non si può ribilanciare fino alla terza cifra decimale quando il numero di riferimento ha un errore standard del 15%.
A febbraio abbiamo avuto un caso in cui il report scritto da un agente attribuiva un miglioramento di 0.22 dello Sharpe al «filtro di ingresso migliorato». La modifica era una riga nel modulo di dimensionamento. Il filtro non era cambiato. Ora faccio stampare in cima al report l'hash della configurazione di dimensionamento, perché l'attribuzione richiede disciplina e i modelli sono pronti a raccontare una storia ordinata quanto chiunque altro.
Cosa succede alla regola di dimensionamento nel paper trading
È qui che il divario tra backtest e paper trading si allarga di più, e perlopiù è una questione aritmetica. Con un dimensionamento che reagisce alla volatilità, la posizione varia di un fattore da 4 a 8 nel campione. A entrambi gli estremi si incontrano vincoli della piattaforma che il backtest non ha mai modellato.
All'estremo piccolo: passo di quantità e nozionale minimo. Il perpetuo ETHUSDT ha un passo di quantità di 0.001 e un minimo di $5. Se la dimensione nella fase di bassa volatilità è di 0.0004 ETH, il backtest la mantiene, mentre il paper trading non mantiene alcuna posizione. Sembra un caso limite, finché non si considera che una regola di targeting della volatilità colloca le posizioni di dimensione minima nei mercati più tranquilli, che per un segnale trend sono spesso quelli in cui si trovano gli ingressi migliori. All'estremo grande: limiti di posizione, fasce di margine e il fatto che una posizione a 6× richiede una gestione rigorosa del margine isolato per cui non avete modellato le liquidazioni nel backtest.
Ne abbiamo individuato un caso in cui la curva dell'equity nel paper trading ha seguito quella del backtest con una differenza inferiore al 3% per 6 settimane, poi si è discostata bruscamente. La causa era l'arrotondamento: troncamento con `int()` invece di arrotondamento al passo minimo, nel dimensionatore degli ordini, applicato a posizioni medie di 1.4 passi. Il backtest dimensionava le posizioni su valori continui, mentre il dimensionatore live perdeva il 20-30% della posizione prevista a ogni piccola operazione. Nessuna stranezza nel modello di esecuzione, nessuna storia sulla latenza. Troncamento.
Dove le obiezioni sono fondate
Ci sono 3 obiezioni valide e non voglio minimizzarle.
La prima, e più importante: il dimensionamento alloca il vantaggio, non può crearlo. Se l'expectancy lorda del segnale è pari o inferiore a zero dopo aver considerato commissioni e funding realistici, tutte le regole della tabella perdono denaro: quelle elaborate lo perdono solo con un profilo di varianza più gradevole. Ho scelto un segnale con un piccolo vantaggio netto positivo in questo intervallo. Se si applicano le stesse 6 regole a un segnale con −1.2 bps netti per operazione, la classifica rimane invariata, ma tutti i valori finali dell'equity sono inferiori a quello iniziale. Il dimensionamento moltiplica qualcosa. Quel qualcosa deve esserci.
Seconda obiezione: il targeting della volatilità ha una modalità di fallimento reale e ben documentata: riduce la leva durante la fase finale di un rapido ribasso e la rialza dopo il rimbalzo. In una brusca ripresa a V, il nozionale fisso vince, a volte nettamente. Il calo azionario di marzo 2020 e la correzione delle criptovalute dell'agosto 2024 hanno entrambi penalizzato il dimensionamento che reagisce alla volatilità durante la fase di recupero. La mia finestra quadriennale su ETH contiene per caso più fasi prolungate di volatilità raggruppata che inversioni a V, e questo favorisce le righe con dimensionamento inversamente proporzionale alla volatilità. Con una finestra diversa parte della classifica si capovolge, e se avessi aperto con una tabella del 2020, questo argomento sarebbe stato meno convincente.
Terza obiezione: la regola di dimensionamento è soggetta a overfitting quanto qualsiasi altra cosa. La regola Half-Kelly basata su stime mobili è l'esempio più chiaro nella mia tabella: sembra sofisticata, ha una motivazione teorica e ha prodotto il secondo drawdown peggiore, perché la stima mobile della media di una serie di rendimenti rumorosa è spazzatura e Kelly è estremamente sensibile a quell'errore. Qualsiasi regola di dimensionamento che usa una stima del rendimento atteso come input eredita l'errore di quella stima e lo amplifica. Le regole che usano soltanto una stima della varianza si comportano molto meglio, perché la varianza è l'unico momento che si riesca davvero a stimare con 4 anni di dati orari.
Cosa mi porterei via da tutto questo: quando un risultato di backtest vi sorprende, controllate il modulo di dimensionamento prima di cercare una soluzione ingegnosa nel segnale. E quando riportate uno Sharpe, affiancategli il percorso della leva e la cascata dei costi, perché un numero che dipende così tanto da una decisione di dimensionamento non è affatto una proprietà del segnale.
← Tutti gli articoli
