5 Settembre 2026 · rischio

Il tuo backtest non è mai stato liquidato: margine, mark price e la soglia di leva che hai ignorato

Il tuo backtest non è mai stato liquidato: margine, mark price e la soglia di leva che hai ignorato

Il mese scorso una strategia generata ha prodotto una curva azionaria con un drawdown del 63%. Profondo, brutto, seguito da un recupero netto nelle sei settimane successive: il tipo di andamento che un ricercatore osserva con attenzione e giudica sostenibile se riduce la dimensione delle posizioni. L'ho rieseguita con un motore dei margini che conosce gli scaglioni del margine di mantenimento. Il conto è stato liquidato al giorno 41, nel mezzo di quel drawdown, e tutto ciò che veniva dopo il giorno 41 era pura finzione.

È il tipo di bug di backtest più costoso che conosca, perché non altera i rendimenti di pochi punti base. Elimina dalla simulazione uno stato assorbente. Una strategia che può azzerarsi e una che non può farlo sono strategie diverse, e un backtest che non verifica il margine non può dirti quale delle due hai.

Continuo a vedere tre modi in cui viene modellato male.

Primo errore: usare la leva come un numero per moltiplicare i rendimenti

È l'approccio più comune. Calcoli una serie di rendimenti dai tuoi segnali, decidi di operare a 10x e moltiplichi. A volte è un po' più sofisticato — la dimensione della posizione è equity * leverage / price — ma lo stato del conto resta comunque un semplice scalare che sale e scende. Nessun saldo di margine, nessun limite al nozionale, nessuna condizione di fallimento.

Il danno è sottile, ed è per questo che supera le revisioni. Lo Sharpe è invariante alla scala, quindi il tuo numero principale non cambia passando da 3x a 30x, e il ricercatore conclude che la leva è una manopola gratuita per scambiare volatilità con rendimento. Il drawdown massimo cresce linearmente e resta sotto il 100% per un accidente aritmetico, perché una serie di rendimenti moltiplicati si avvicina asintoticamente a zero senza mai attraversarlo. Moltiplica una giornata al -9% per 12 e ottieni -108% nella versione rigorosa e «-108%, ma la curva azionaria è ancora positiva» in quella ingenua, a seconda che tu abbia composto i rendimenti o li abbia sommati. Ho visto entrambe le cose.

Quello che manca è che la leva non si applica ai rendimenti. Si applica alla tua garanzia, e la garanzia è una quantità finita che la piattaforma monitora ogni secondo. Quando scende sotto il requisito di mantenimento, la posizione non è più tua.

Il segnale rivelatore: se la simulazione non può produrre una perdita totale con nessun livello di leva, non sta modellando la leva.

Secondo errore: calcolare il prezzo di liquidazione usando solo la leva

Il livello successivo di sofisticazione aggiunge un controllo di liquidazione, di solito così: a 20x, un movimento avverso del 5% azzera il margine, quindi per una posizione long si liquida a ingresso × 0.95. Semplice, intuitivo e sbagliato in quattro modi diversi, tutti insieme.

Le piattaforme perp non usano il livello di leva che hai impostato per decidere quando sei fuori. Usano un tasso di margine di mantenimento che aumenta con il nozionale della posizione, secondo una tabella a scaglioni. Profilo approssimativo di BTCUSDT USDⓈ-M, soggetto a modifiche quando le piattaforme lo aggiornano:

Nozionale della posizione (USDT)Tasso di margine di mantenimentoLeva massima
0 – 50,0000.40%125x
50,000 – 600,0000.50%100x
600,000 – 3,000,0001.00%50x
3,000,000 – 12,000,0002.50%20x
12,000,000 – 70,000,0005.00%10x

Quindi il movimento avverso che puoi assorbire su una posizione long isolata è all'incirca 1/L − MMR, non 1/L. A 20x nel secondo scaglione è 5% − 0.5% = 4.5%. Mezzo punto percentuale sembra un arrotondamento. Su BTC a 84,000 sono 420 dollari di prezzo, e in un'ora violenta 420 dollari fanno la differenza tra una wick che ti ha liquidato e una che non l'ha fatto. Ogni wick è un lancio di moneta e hai truccato tutte le monete a tuo favore.

Poi ci sono le commissioni. La commissione taker d'ingresso viene sottratta dal margine appena viene eseguito l'ordine: lo 0.045% su un nozionale di 500,000 equivale a 225 USDT a carico di un saldo di margine di 25,000, e sposta il prezzo di liquidazione prima ancora che la posizione faccia qualcosa. Il funding fa lo stesso, in modo continuo, e sul nozionale con leva pesa molto più di quanto i ricercatori si aspettino:

4.55%movimento avverso effettivo per la liquidazione a 20x, commissione d'ingresso inclusa
0.60%erosione giornaliera del margine dovuta al funding a 20x, 0.01%/8h
18%di quel margine perso in un mese senza variazioni

Una posizione che resta ferma per trenta giorni — nessun movimento avverso, nessuna operazione — ha consumato quasi un quinto della garanzia e avvicinato sensibilmente il prezzo di liquidazione. Il terzo e il quarto errore: gli scaglioni cambiano quando aumenti la posizione, quindi una posizione che parte dallo scaglione dello 0.5% e viene incrementata fino a quello dell'1.0% ha un prezzo di liquidazione peggiore di quello calcolato all'ingresso; inoltre, il cross margin mette in comune la garanzia tra le posizioni, quindi la sopravvivenza del tuo long su BTC dipende da come sta andando il tuo short su ETH. Se simuli il cross margin come un insieme di posizioni isolate e indipendenti, hai capovolto la struttura di correlazione del tuo stesso conto.

Terzo errore: risolvere la liquidazione usando il prezzo sbagliato, nel momento sbagliato e al prezzo di esecuzione sbagliato

Mettiamo che tu abbia individuato correttamente il livello di attivazione. Ora: quale prezzo lo supera, quando lo controlli e a quale prezzo viene eseguito l'ordine?

La liquidazione scatta sul mark price, un indice di più piattaforme spot con una componente di base smussata, progettato apposta per resistere alla wick di una singola piattaforma. Lo stop loss, a seconda di come l'hai configurato, probabilmente scatta sull'ultimo prezzo negoziato. Questi due numeri divergono proprio quando conta di più. Durante una cascata, l'ultimo prezzo del perp può scendere dell'1–2% sotto il mark per decine di secondi. Un backtest che calcola sia lo stop sia la liquidazione dal minimo OHLCV sta modellando una piattaforma che non esiste.

Qui entrambi gli errori sono presenti e non si annullano a vicenda. Se usi l'ultimo prezzo, vieni liquidato su wick che la piattaforma ha ignorato. Se usi il mark price, non consideri il caso in cui si è mosso proprio il mark: una dislocazione dell'indice su una piattaforma spot è un modo reale per essere liquidati a un prezzo che non è mai stato registrato sul perp che stavi negoziando.

Poi c'è l'esecuzione. I motori ingenui chiudono la posizione al prezzo di liquidazione e registrano la perdita come se fosse uno stop. In realtà, il motore di liquidazione prende in carico la posizione al prezzo di bancarotta: il livello in cui il margine è esattamente zero, peggiore del livello di attivazione. In più, viene applicata una commissione di liquidazione, variabile in base allo scaglione e vicina all'1% del nozionale negli scaglioni più bassi. A 20x, l'1% del nozionale equivale al 20% del margine residuo. Se il motore esegue l'ordine sotto il prezzo di bancarotta, il fondo assicurativo copre il disavanzo; su alcune piattaforme, se il fondo si esaurisce, la perdita socializzata si estende al lato in profitto del book. La perdita realizzata non è il drawdown fino al prezzo di liquidazione: è maggiore, e l'eccedenza è massima proprio nei giorni in cui il book era abbastanza scarso da peggiorare la situazione.

La questione dei tempi, legata alla meccanica intrabar, qui è ancora più stringente del solito. Se una barra di 1-minute contiene sia il tuo take profit sia il livello di liquidazione, un backtest che controlla le uscite prima del margine registrerà tranquillamente il profitto. La piattaforma controlla il margine a ogni aggiornamento del mark price, più o meno una volta al secondo, prima di tutto il resto che avresti voluto fare.

Cosa deve tenere traccia il motore

Niente di tutto questo richiede sistemi esotici. Richiede uno stato persistente. Il conto è un oggetto con un saldo, non una serie di rendimenti, e a ogni barra viene aggiornato nell'ordine in cui lo farebbe la piattaforma:

  1. Saldo del wallet e PnL non realizzato, separati. Il rapporto di margine è il margine di mantenimento diviso per il saldo di margine, che include il PnL non realizzato. Confondere i due valori fa sembrare una posizione in perdita meglio garantita di quanto sia.
  2. La tabella degli scaglioni per ogni simbolo, con versione e data. Gli scaglioni vengono rivisti. Un backtest del 2023 eseguito usando gli scaglioni del 2026 introduce un sottile look-ahead, di solito favorevole, perché nel tempo le piattaforme hanno generalmente allentato i requisiti sugli asset principali.
  3. Una serie del mark price, non solo le klines. Se non riesci a reperire lo storico del mark price, dichiaralo nei risultati e usa una proxy prudenziale. Non sostituirlo mai in silenzio con l'ultimo prezzo.
  4. Il controllo del margine per primo nell'ordine degli eventi della barra, prima di stop, target, segnali o ribilanciamenti.
  5. Esecuzioni al prezzo di bancarotta più la commissione di liquidazione, con il tasso della commissione letto dalla stessa riga degli scaglioni usata per il MMR.
  6. Uno stato terminale assorbente. Quando il capitale scende a zero, l'esecuzione termina. Nessun ricalcolo della base, nessun «supponiamo che il trader aggiunga fondi», nessuna ripresa della serie con un nuovo nozionale.

È quest'ultimo punto a suscitare più discussioni. C'è sempre qualcuno che fa notare che un desk reale verserebbe altra garanzia, quindi terminare la simulazione è eccessivamente severo. Forse. Ma «questa strategia funziona se continui a metterci soldi dopo che è esplosa» è un'affermazione che va dichiarata esattamente in questi termini e verificata intenzionalmente, indicando i versamenti aggiuntivi come input esplicito, invece di introdurli di nascosto come impostazione predefinita. Quando la si scrive chiaramente, quasi tutti si rendono conto che non era quello che intendevano.

Il vantaggio pratico di tutto questo: quando esegui la stessa strategia in simulazione sulla piattaforma live, il rapporto di margine riportato dall'exchange e quello calcolato dal simulatore dovrebbero restare allineati entro uno o due punti base, per tutta la giornata. Puoi verificare questa corrispondenza ogni minuto, su ogni posizione aperta, gratuitamente. È il test di parità più economico dell'intero stack e quasi nessuno lo esegue. E quando i due numeri divergono, ha ragione l'exchange: hai un bug da trovare prima che lo faccia il drawdown.

futures perpetuilevaliquidazionemotore dei marginibacktesting
← Tutti gli articoli