Latency arbitrage su Bitcoin: quando l'edge è la struttura, non la previsione

Dopo che la mia ricerca aveva certificato che la price action su BTC a 5 minuti non ha edge tradabile, la domanda giusta non era "quale segnale migliore posso trovare?", ma: "esiste un edge che non richieda affatto di prevedere il prezzo?".

La risposta era nella struttura del mio setup: io vedevo due prezzi dello stesso asset. Il feed dell'exchange di riferimento (Binance futures, via websocket) e la quotazione del mio broker CFD sullo stesso sottostante. Il prezzo del broker segue quello dell'exchange — deve farlo, per costruzione — ma lo segue con un ritardo e un rumore variabili. Quando il feed veloce si muove bruscamente, per una frazione di tempo il prezzo lento è "sbagliato": non una previsione — un fatto, con una scadenza.

Questo è latency arbitrage nella sua forma retail: comprare/vendere il prezzo lento nella direzione in cui quello veloce è già andato, e uscire alla convergenza. La fonte dell'edge è strutturale: paga l'attrito del meccanismo di quotazione del broker.

L'avvertimento simmetrico, subito: è un edge che i broker conoscono benissimo, che i termini di servizio spesso limitano, e che può evaporare con un aggiornamento del loro feed. La verifica di conformità coi ToS e con le regole della prop è parte del progetto, non un dettaglio. Un edge strutturale non è un edge eterno: è un edge finché la struttura resta.

v4, v5: cronaca di un fallimento istruttivo

La v4 funzionava "a sensazione di log": scattava sulle divergenze, chiudeva a tempo. La v5 aggiunse take profit ambiziosi (0,55–0,85%) con orizzonte massimo di 600 secondi. Risultato: 50 trade live, mercato −8,54 $, commissioni −118,48 $, netto −127,02 $. Il 93% della perdita era costi. L'autopsia però va oltre, e ogni dettaglio è una lezione generale:

Tre bug diversi con la stessa radice: componenti scritte prima di aver capito con precisione il fenomeno. La v6 è nata invertendo l'ordine: prima la fisica del fenomeno, poi il codice.

v6: l'architettura cost-gated

Tutto riorganizzato attorno a un principio solo — il fenomeno è una convergenza breve; ogni componente deve rispettarne la fisica:

  1. Cost-gate: si entra solo se la divergenza misurata supera 2× il costo totale stimato live (commissioni + spread corrente + slippage EWMA). È il filtro che manda il sistema in silenzio per ore, ed è corretto così: la selettività qui è la strategia.
  2. Uscita a convergenza, non a target: chiusa la forbice, chiuso il trade. Tempo massimo di permanenza 120 secondi — oltre, l'ipotesi che giustificava il trade è scaduta, e una posizione la cui ipotesi è scaduta va chiusa a prescindere dal suo P&L.
  3. Baseline prop esplicita, hard-coded come costante contrattuale; sizing anti-martingala ancorato al margine residuo rispetto al floor.
  4. Kill-switch sull'EV: il sistema tiene la contabilità della propria aspettativa realizzata su finestra mobile; se l'EV misurato diventa negativo al netto dei costi, si spegne da solo. La domanda "è rotto o è varianza?" risolta con una soglia scritta invece che con l'ansia.
  5. Shadow mode: il sistema fa tutto — rileva, decide, dimensiona, registra — tranne inviare gli ordini. Produce il dataset di trade virtuali con marca temporale e costi stimati, a rischio zero.

Il criterio di promozione dalla shadow mode al denaro vero è scritto nel codice, non nel mio umore: almeno 30 trade shadow con EV medio positivo. Il sistema resta lì finché il criterio non è soddisfatto. Se non lo sarà mai, la v6 morirà senza aver perso un euro — che è il secondo miglior esito possibile per un sistema, e infinitamente migliore del terzo.

Le lezioni portabili (anche se non farete mai HFT)

Il feed Binance e la pipeline dati dietro questo progetto: Ricerca quantitativa con Python e API Binance. Il metodo di sviluppo con l'AI che ha scritto la v6: qui, con i prompt.