- Il trading automatico è trading sistematico eseguito da una macchina: regole codificate, eseguite su un server attivo 24 ore su 24.
- Oltre il 90% dei sistemi sviluppati non supera la validazione out-of-sample: l'overfitting è la norma, non l'eccezione.
- Prima del conto reale serve un periodo di incubazione: da 6 mesi a 2-3 anni, a seconda della frequenza operativa.
- Il portafoglio modello: 3 sistemi × 20 azioni = 60 combinazioni, con rotazione semestrale calcolata point-in-time e sizing a 1/60 del capitale.
- Regola di sopravvivenza: un sistema che perde 2-3 volte il suo massimo storico va staccato e messo in quarantena.
Il trading algoritmico — inteso qui anche come trading automatico — rappresenta per me una branca specifica del trading sistematico. Il trading sistematico non è altro che una tipologia di trading basata sul rispetto totale di regole precise, stabilite a monte. Può essere operato manualmente — ad esempio con strategie sistematiche ibride opzione-sottostante — oppure in modalità automatica, mediante trading system programmati ed eseguiti da una macchina (in questo caso, un PC).
Quali piattaforme servono per il trading automatico?
L'applicazione del trading automatico, come la intendo io, prevede l'utilizzo di piattaforme specifiche, installate su un server Windows attivo 24 ore su 24. Le piattaforme che utilizzo sono da sempre due: TradeStation, come fornitore dati e spesso anche per lo sviluppo, e MultiCharts, principalmente come piattaforma di produzione ed esecuzione.
Un'ulteriore componente che caratterizza il trading automatico, come lo interpreto io, è la fase di post-produzione: applicazioni in Python, opportunamente codificate, che analizzano regimi di volatilità, parametri di correlazione e rotazione degli strumenti finanziari. "Post-produzione" perché entra in gioco dopo che si è deciso quali sistemi usare su conto reale, e su quali sottostanti.
Come nasce un trading system: ricerca e sviluppo
Nella strutturazione dell'attività di trading automatico bisogna necessariamente passare per fasi distinte. La prima è la ricerca e sviluppo: consiste nell'individuare e codificare — nel mio caso in EasyLanguage per TradeStation o PowerLanguage per MultiCharts — quell'insieme di regole e istruzioni che la macchina andrà poi ad applicare pedissequamente ai grafici dei prezzi in tempo reale.
La ricerca di queste regole si svolge perlopiù in maniera soggettiva e può variare da trader a trader. In molti casi si avanza per tentativi, applicando regole derivate dall'analisi tecnica tradizionale, da indicatori e oscillatori. Personalmente preferisco partire da test statistici in grado di individuare il carattere macroscopico dell'asset analizzato, utilizzando la frazione più piccola possibile dei dati storici che ho a disposizione.
Da qui, sempre su quella sola porzione di dati, si procede alla strutturazione delle regole. Quando ci si ritiene soddisfatti del risultato ottenuto, si passa ad applicare le regole codificate su porzioni di dati mai analizzate prima, definite out-of-sample — a differenza delle precedenti, definite in-sample.
Overfitting: perché oltre il 90% dei sistemi finisce nel cestino
Da questa applicazione deriva una delle più grandi frustrazioni dei trader sistematici che applicano algoritmi automatici: spesso oltre il 90% del lavoro viene semplicemente cestinato, perché i dati out-of-sample non confermano quanto individuato sui dati in-sample. È quello che si definisce overfitting: un'ottimizzazione così estrema sui dati storici da produrre risultati che non possono essere replicati in futuro — bastano piccoli cambiamenti nell'andamento del sottostante o del mercato analizzato, e quei risultati si rivelano completamente falsati. Negli ultimi anni ho sviluppato decine di sistemi di ogni tipo, ma pochissimi hanno superato tutte le prove — inclusa quella del tempo — come i sistemi del portafoglio modello offerto.
L'incubazione: la prova del mercato reale
In quelle rare volte in cui ci si trova nel fatidico 5% — qualcosa che continua a funzionare sui dati out-of-sample in maniera molto simile ai risultati ottenuti in-sample — si può andare avanti con lo studio, senza più alterare in alcun modo le regole già codificate. Da questo punto in avanti ci sono diverse strade, e ogni trader ha una sua modalità di utilizzo delle regole codificate. Nella maggior parte dei casi si attiva il trading system in piattaforma e lo si tiene per un periodo definito di incubazione: lo si lascia agire sul mercato in tempo reale, per verificare se mantiene la costanza e i risultati ottenuti sia nel periodo in-sample che in quello out-of-sample.
La lunghezza di questo periodo dipende dal time frame utilizzato e da quante operazioni effettua il sistema: viene decisa ad hoc ed è molto variabile. In media, per trading system che operano con frequenza abbastanza elevata — trade a distanza di pochi giorni l'uno dall'altro — possono bastare anche 6 mesi di incubazione; per sistemi particolarmente lenti, che lavorano magari su time frame giornaliero e non fanno molte operazioni, può essere necessario un anno, o addirittura due o tre.
I tre sistemi del portafoglio modello
I trading system del nostro portafoglio modello — quello che offriamo come servizio — sono stati strutturati esattamente nel modo appena descritto. Sono tre: un trend-following breakout, un mean reverting basato su uno Z-Score applicato a una determinata media mobile, e uno che sfrutta bias infrasettimanali su ticker opportunamente scelti tra quelli a maggiore capitalizzazione dell'S&P 500.
Breakout
Entra sui breakout e cavalca i trend. Poche operazioni, applicato a 20 azioni.
Z-Score su media mobile
Compra la debolezza statistica sotto la media. Operazioni brevi e frequenti, su 20 azioni.
Bias infrasettimanali
Sfrutta ricorrenze infrasettimanali calibrate titolo per titolo, su 20 azioni.
Queste tre classi di trading system, ognuna applicata a venti azioni contemporaneamente, non sono state scelte a caso: tendono a compensarsi l'una con l'altra. Il drawdown del portafoglio combinato — cioè il periodo di perdita massima dei tre sistemi messi assieme — risulta inferiore al drawdown del peggior sistema preso singolarmente. Per questo vanno applicati contemporaneamente tutti e tre: è l'insieme a determinare il portafoglio modello, con le metriche che è possibile visualizzare in tempo reale nell'apposita dashboard.
La rotazione semestrale e il test point-in-time
Inoltre, le azioni presenti nei tre trading system — sessanta in totale — vengono opportunamente ruotate ogni sei mesi, basando le rotazioni su modelli statistici che prendono in considerazione sia le metriche di performance, sia le metriche di correlazione, con l'obiettivo di mantenere coerenza e omogeneità tra i tre sistemi. Questa rotazione viene eseguita da modelli codificati in Python che simulano, in-sample, selezioni totalmente casuali rispetto alle regole di selezione del modello, e verificano se, out-of-sample, le regole di selezione statistiche determinano performance superiori alla selezione casuale dei ticker.
Una precisazione importante, perché è qui che molti backtest mentono: le rotazioni sono calcolate point-in-time. Ogni selezione semestrale utilizza esclusivamente le informazioni disponibili a quella data — non i vincitori di oggi proiettati sul passato. In caso contrario si introdurrebbe il cosiddetto survivorship bias: testare ieri i titoli che sappiamo già aver vinto domani, gonfiando artificialmente i risultati. È una delle prime cose che verifico in qualsiasi backtest, mio o altrui. Questi sono, a grandi linee, i processi rigorosi che applico normalmente alla mia operatività di trading automatico.
Quando un trading system "si rompe": monitoraggio e quarantena
L'ultima fase nell'utilizzo dei trading system automatici consiste nel monitoraggio ed, eventualmente, nella decisione di mettere in standby un sistema. Qui si apre una fase molto personale della gestione. Normalmente può capitare che un trading system smetta di funzionare come previsto; determinarlo, però, è molto difficile, e non esiste un metodo universale (come per tutto il resto, del resto). Per convenzione si potrebbe usare questa regola: se il trading system produce una perdita massima pari al doppio (o al triplo) della perdita storica massima realizzata in passato, allora è il caso di staccarlo dal conto e metterlo in una sorta di quarantena.
A questo punto, lo specifico trading system può prendere due strade: 1) inizia a tirarsi su e a riguadagnare (ma noi lo abbiamo staccato, e quindi abbiamo incassato solo la perdita); 2) si è completamente rotto — il sottostante ha cambiato totalmente natura — e non consente più di guadagnare. Nel primo caso si valuta se rimetterlo a mercato; nel secondo si cestina, e amen.
Questo accade più spesso su sottostanti specifici come i futures — materie prime, azionari, forex eccetera: capita che si rompano e, quando ce ne accorgiamo e decidiamo di intervenire, spesso il danno al conto è già fatto. Per questa ragione la mia attività più intensa è basata su trading system azionari. Primo: dividendo il capitale su 60 combinazioni titolo-sistema di natura diversa, se qualche sistema dovesse rompersi non potrà mai causare danni visibili sul conto. Secondo: è estremamente improbabile che più trading system di natura diversa, su sottostanti molto diversi, si rompano contemporaneamente causando danni evidenti al conto. Terzo: ogni 6 mesi il sistema di rotazione metterà automaticamente in panchina eventuali sistemi poco performanti, riducendo di fatto al minimo i potenziali danni di qualche scheggia impazzita. Ricordiamoci che una singola combinazione su 60 contribuisce per 1/60 dell'esposizione totale: se anche, per assurdo, se ne rompessero 10 o 15 contemporaneamente, il loro apporto negativo resterebbe una frazione dell'intero capitale impiegato.
Position sizing: quanto capitale per ogni operazione?
Da qui — anche se a questo punto si intuisce — si passa al position sizing, ovvero quanto capitale impiego per ogni operazione di un singolo trading system. Beh, qui effettuo un calcolo semplicissimo. Ponendo di espormi a leva 1, divido il capitale totale messo a disposizione del trading algoritmico per 60. Storicamente non è mai successo che tutti e tre i trading system, su tutte le 60 azioni, entrassero a mercato contemporaneamente; ma per precauzione, siccome potrebbe succedere, meglio fare questo calcolo conservativo. In alcuni periodi particolarmente favorevoli tendo a espormi a leva 2 sfruttando il conto a margine — raddoppiando però anche il rischio, sia inteso: in questo caso userò il doppio del capitale per ogni operazione.
| Capitale destinato | Leva | Capitale per posizione (÷60) |
|---|---|---|
| 15.000 € | 1x | 250 € |
| 30.000 € | 1x | 500 € |
| 30.000 € | 2x (conto a margine) | 1.000 € |
Conclusioni
Ricerca su una frazione dei dati, validazione out-of-sample, incubazione a mercato, monitoraggio con regole di quarantena, sizing conservativo: nessuno di questi passaggi, da solo, garantisce nulla. È la catena completa a fare la differenza tra un backtest promettente e un'operatività che regge il mercato reale. Questo è il processo. I risultati, aggiornati ogni giorno, sono sulla dashboard pubblica: verificarli non costa niente.