trading algoritmico e quantitativo

Guida introduttiva al trading algoritmico e quantitativo

In questo articolo introduciamo alcuni dei concetti base di un sistema di trading algoritmico e quantitativo. E’ il primo articolo dei tutorial dedicati al trading algoritmico e quantitativo.

Il trading quantitativo è un’area estremamente complessa della finanza quantistica. Può richiedere molto tempo per acquisire le conoscenze necessarie per costruire le proprie strategie di trading. Non solo, ma richiede una vasta esperienza di programmazione, almeno in un linguaggio come MATLAB, R o Python. Tuttavia, con l’aumentare della frequenza di trading, gli aspetti tecnologici diventano molto più rilevanti. Quindi avere familiarità con C / C ++ sarà di fondamentale importanza. Un sistema di trading quantitativo è costituito da quattro componenti principali:

  • Identificazione della strategia – Trovare una strategia, sfruttare un vantaggio e decidere la frequenza del trading;
  • Backtesting della strategia – Acquisizione dei dati, analisi delle prestazioni della strategia e rimozione dei bias;
  • Sistema di esecuzione – Collegamento a una società di intermediazione o broker, automatizzando il trade e riducendo al minimo i costi di transazione;
  • Gestione del rischio – Assegnazione ottimale del capitale, “dimensionamento del trade” / criterio di Kelly e psicologia di trading;

Inizieremo dando un’occhiata a come identificare una strategia di trading.

Identificazione della Strategia

Tutti i processi del trading algoritmico e quantitativo iniziano con un periodo di ricerca. Questo processo di ricerca comprende la ricerca di una strategia, verificare se la strategia si inserisce in un portafoglio di altre strategie che sono già in esecuzione, ottenere tutti i dati necessari per testare la strategia e cercare di ottimizzare la strategia per avere rendimenti più elevati e / o un rischio inferiore. Sarà necessario tenere conto del proprio profilo patrimoniale nel caso si gestisce la strategia come operatore “al dettaglio” e considerare come i costi di transazione influiranno sulla strategia.

Contrariamente alla credenza popolare, è abbastanza semplice trovare strategie redditizie attraverso varie fonti pubbliche. Gli accademici pubblicano regolarmente risultati delle loro simulazioni di trading (anche se per lo più al lordo dei costi di transazione). I blog di finanza quantitativa discutono dettagliatamente le strategie. Le riviste specializzate delineano alcune delle strategie utilizzate dai fondi.

Potreste chiedervi perché gli individui e le aziende sono desiderosi di condividere le loro strategie redditizie, specialmente quando sanno che la pubblicazione può impedire alla strategia di funzionare nel lungo termine. La ragione sta nel fatto che spesso non condividono i parametri esatti e i metodi usati per ottimizzare la strategia. Queste ottimizzazioni sono la chiave per trasformare una strategia relativamente mediocre in una molto redditizia. In effetti, uno dei modi migliori per creare le strategie uniche è trovare metodi simili e quindi eseguire una procedura di ottimizzazione.

Ecco una piccola lista di siti per iniziare a cercare nuove idee:

Molte delle strategie che troverete rientreranno nelle categorie di mean-reversion e trend-following / momentum. Una strategia di “mean reverting” tenta di sfruttare il principio della media a lungo termine su una “serie di prezzi” (come lo spread tra due asset correlati) e quindi le deviazioni a breve termine tendono a tornare verso la media. Una strategia di momentum tenta invece di sfruttare la psicologia degli investitori e dei grandi fondi strutturati, cercando di “cavalcare” il momentum del mercato, che può acquisire un impulso in una direzione e seguire il trend fino a quando non si inverte.

Un altro aspetto estremamente importante del trading algoritmico e quantitativo è la frequenza di trading. Il trading a bassa frequenza (LFT) si riferisce generalmente a qualsiasi strategia che tiene aperte posizioni per più di un giorno di negoziazione. Corrispondentemente, il trading ad alta frequenza (HFT) si riferisce generalmente a una strategia apre e chiude operazioni all’interno di un giorno. Il trading ad altissima frequenza (UHFT) si riferisce a strategie che effettuano operazioni nell’ordine di secondi e addirittura millisecondi. Per un professionista retail l’HFT e l’UHFT sono possibili e redditizi solamente tramite una conoscenza dettagliata dello “stack tecnologico” del trading e delle dinamiche dell’order book.

Una volta identificata una strategia o una serie di strategie, è necessario testare la redditività tramite i dati storici. Questo è il dominio del backtesting.

Backtesting della Strategia

L’obiettivo del backtesting consiste nel verificare che la strategia identificata tramite il processo appena descritto è proficua se applicata a dati sia storici che a dati “out-of-sample”. Questo stabilisce l’aspettativa di come la strategia si comporterà nel “mondo reale”. Tuttavia, per vari motivi, il backtesting NON è una garanzia di successo. È forse l’area più delicata sottile del trading algoritmico e quantitativo poiché comporta numerosi bias, che devono essere attentamente considerati e il più possibile eliminati. Discuteremo i tipi comuni di bias, tra cui bias previsionali, bias di sopravvivenza e bias di ottimizzazione (noto anche come bias “data-snooping”). Altre aree importanti nel backtesting comprendono la disponibilità e la pulizia dei dati storici, il factoring in  costi di transazione realistici e l’adozione su una solida piattaforma di backtesting. Discuteremo ulteriormente dei costi di transazione nella seguente sezione Sistemi di esecuzione.

Dopo aver identificato una strategia, è necessario ottenere i dati storici attraverso i quali effettuare i test e ottimizzare la strategia. Esiste un numero significativo di fornitori di dati per qualsiasi mercato desiderate operare. Generalmente i costi si adattano alla qualità, alla profondità e alla tempestività dei dati. Il tradizionale punto di partenza per i trader algoritmici principianti (almeno a livello retail) è utilizzare il set di dati gratuito di Yahoo Finance. Non mi dilungherò troppo sui fornitori, piuttosto mi piacerebbe concentrarmi sulle caratteristiche generali che deve assolutamente avere un set di dati storici.

Le caratteristiche principali dei set di dati storici includono accuratezza / pulizia, bias di sopravvivenza e aggiustamento delle azioni aziendali come dividendi e scissioni di azioni:

  • L’Accuratezza riguarda la qualità complessiva dei dati, indipendentemente dal fatto che contenga errori. Gli errori a volte possono essere facili da identificare, ad esempio con un filtro spike, che individuerà gli “spike” non corretti nei dati delle serie temporali e li correggeranno. Altre volte possono essere molto difficili da individuare. Spesso è necessario avere due o più provider e quindi controllare tutti i dati dell’uno con i dati del’altro.
  • Il Bias di sopravvivenza è spesso una “caratteristica” dei set di dati gratuiti o poco costosi. Un set di dati con bias di sopravvivenza non contiene gli asset che non vengono più scambiati. Nel caso dei titoli azionari, significa che non contiene le azioni delistate o in bancarotta. Questo pregiudizio significa che qualsiasi strategia di trading azionario testata su un set di dati di questo tipo avrà probabilmente prestazioni migliori rispetto al “mondo reale” in quanto i “vincitori” storici sono già stati preselezionati.
  • Gli Eventi societari comprendono le attività “logistiche” svolte dall’azienda che di solito causano un cambiamento del prezzo grezzo con andamento pari a una funzione a gradini. Tali attività non dovrebbero essere incluse nel calcolo della variazione del prezzo. Gli aggiustamenti per dividendi e le scissioni di azioni sono i principali colpevoli. È necessario eseguire un processo noto come back adjustment per ciascuna di queste azioni. Bisogna stare molto attenti a non confondere una divisione azionaria con un vero aggiustamento dei ritorni!

Per eseguire una procedura di backtest è necessario utilizzare una piattaforma software. Si può scegliere tra software dedicati, come Tradestation o Multicharts, una piattaforma numerica come Excel o MATLAB, o un’implementazione completamente personalizzata in un linguaggio di programmazione come Python o C ++. Non approfondiamo Tradestation (o simili), Excel o MATLAB, poiché credo nella creazione di uno stack completo di tecnologie interne (per i motivi illustrati di seguito). Uno dei vantaggi di utilizzare uno stack interno consiste nell’elevata integrazione tra il software di backtesting e il sistema di esecuzione, e quindi avere la possibilità di implementare strategie statistiche estremamente avanzate. In particolare per le strategie HFT è essenziale utilizzare un’implementazione personalizzata.

Performance

Quando si esegue il backtest di un sistema, si deve essere in grado di quantificare le performance della strategia. Le metriche “standard del settore” per le strategie quantitative sono il massimo drawdown e il Sharpe Ratio. Il massimo drawdown rappresenta la perdita più elevata, cioè la discesa più elevata da “picco-a-valle” nella curva dell’equity in un particolare periodo di tempo (solitamente annuale). Questo numero è spesso rappresentato con notazione percentuale. Le strategie LFT tenderanno ad avere drawdown maggiori rispetto alle strategie HFT, a causa di una serie di fattori statistici. Un backtest storico mostrerà il massimo drawdown nel passato, che è un buon indicatore per le future prestazioni della strategia. La seconda misura è il Sharpe Ratio, che è definito euristicamente come la media dei rendimenti divisa per la deviazione standard di tali rendimenti. Qui, i rendimenti si riferiscono al ritorno della strategia al di sopra di un benchmark predeterminato, come l’S&P500 o un Treasury Bill trimestrale. Si noti che il rendimento annualizzato non è una misura solitamente utilizzata, in quanto non tiene conto della volatilità della strategia (diversamente dal Sharpe Ratio).

Una volta che una strategia è stata testata e ritenuta priva di bias (nella misura in cui ciò è possibile!), con un buon Sharpe e drawdown minimizzato, è tempo di costruire un sistema di esecuzione.

Sistema di Esecuzione

Nel trading algoritmico e quantitativo un sistema di esecuzione è il mezzo con cui le azioni (comprare / vendere) generate dalla strategia sono inviate ed eseguite dal broker. Indipendentemente dal fatto che la generazione del trade possa essere parzialmente o completamente automatizzata, il meccanismo di esecuzione può essere manuale, semi-manuale (cioè “one-click”) o completamente automatizzata. Le tecniche manuali e semi-manuali sono le più comuni per le strategie LFT. Mentre per le strategie HFT è necessario creare un meccanismo di esecuzione completamente automatizzato, che sarà spesso strettamente associato al generatore dei trade (a causa dell’interdipendenza tra strategia e tecnologia). 

Le principali caratteristiche di un sistema di esecuzione sono:

  • l’interfaccia con il broker;
  • la minimizzazione dei costi di transazione (compresa la commissione, lo slippage e lo spread);
  • la divergenza delle prestazioni del sistema live dalle presta.zioni backtested;

Esistono molti modi per interfacciarsi con una società di intermediazione. Si va dal chiamare il broker tramite telefono fino ad un’interfaccia API (Application Programming Interface) ad alte prestazioni completamente automatizzata. Idealmente, l’obiettivo è automatizzare il più possibile l’esecuzione dei tuoi trade. Questo libera il tuo tempo per concentrarti su ulteriori ricerche e ti consente di eseguire più strategie simultaneamente o anche strategie con frequenza più elevata (in effetti, HFT è essenzialmente impossibile senza l’esecuzione automatica). I più comuni software di backtest descritti sopra, come MATLAB, Excel e Tradestation, sono validi per strategie a bassa frequenza, e quindi sono più semplici. Tuttavia sarà necessario sviluppare un sistema di esecuzione interno, scritto in un linguaggio ad alte prestazioni come il C ++, se si vuol operare in HFT. Come aneddoto, in un’azienda dove ho collaborato, si prevedeva un “ciclo di trading” di 10 minuti in cui si doveva scaricare i nuovi dati di mercato ogni 10 minuti e quindi eseguire operazioni basate su tali informazioni nello stesso arco di tempo. Per far questo ho sviluppato uno script Python ottimizzato. Per qualsiasi cosa si avvicini ai dati di frequenza al secondo, o di tick, credo che sarebbe più opportuno utilizzare C / C++.

Nei grandi fondi, l’algotrader non si occupa di ottimizzare l’esecuzione dei trade. Tuttavia, nelle piccole società o nelle aziende di HFT, gli algotrader sono anche gli esecutori quindi è spesso auspicabile uno skillet molto più ampio. 

Le tue capacità di programmazione saranno altrettanto importanti, se non di più, delle tue statistiche e dei tuoi talenti di econometria!

Commissioni, slippage e spread

Un altro importante problema che ricade nell’ambito del sistema di esecuzione è quello della minimizzazione dei costi di transazione. Ci sono generalmente tre componenti per i costi di transazione: le commissioni (o imposte), che sono le commissioni addebitate dall’intermediario, dall’exchange e dalla SEC (o un ente governativo simile); slippage, che è la differenza tra il prezzo a cui volevi comprare un asset rispetto al prezzo al quale il trade viene effettivamente eseguito; lo spread, che è la differenza tra il prezzo bid/ask del titolo oggetto del trade. Si noti che lo spread NON è costante e dipende dalla liquidità corrente (vale a dire la disponibilità di ordini di acquisto / vendita) sul mercato.

I costi di transazione possono fare la differenza tra una strategia estremamente redditizia con un buon Sharpe Ratio e una strategia estremamente non redditizia con un Sharpe Ratio terribile. Può essere molto difficile prevedere correttamente i costi di transazione tramite un backtest. A seconda della frequenza della strategia, sarà necessario accedere ai dati storici, che devono includere i dati di tick per i prezzi bid/ask. Per questi motivi i grandi fondi di investimento dedicano intere squadre di quants solamente ai processi di ottimizzazione dell’esecuzione. Si consideri, ad esempio, il caso in cui un fondo voglia chiudere una notevole quantitaà di posizioni (le ragioni per farlo sono molte e varie!). “Scaricando” così tante azioni sul mercato, esse deprimeranno rapidamente il prezzo e potrebbero non ottenere un’esecuzione ottimale. Quindi, nonostate gli algoritmi prevedano la gestione di ordini “drip feed” per uscire o entrare sui mercati, i grandi fondi corrono il rischio di slippage. Oltre a ciò, esistono strategie che “cacciano” queste situazioni e possono sfruttare queste inefficienze. Questo è il dominio dell’ fund structure arbitrage.

Infine il principale problema dei sistemi di esecuzione riguarda la divergenza delle prestazioni della strategia dalle prestazioni backtested. Questo può accadere per una serie di motivi. Abbiamo già discusso in precedenza del bias di previsione e l’ottimizzazione, prendendo in considerazione i test retrospettivi. Tuttavia, alcune strategie non permettono di testare facilmente questi bias prima della attiviazione della strategia nel mercato reale. Si verifica prevalentemente nel HFT. Inoltre potrebbero esserci dei bug nel sistema di esecuzione o nella stessa strategia di trading che non viene rilevato nella fase di backtesting ma si presenta nel live-trading. Il mercato potrebbe essere stato soggetto ad un cambio di regime dopo lo sviluppo della tua strategia. Nuovi contesti normativi, variazione del sentiment degli investitori e fenomeni macroeconomici possono portare a divergenze nel modo in cui il mercato si comportato fino a quel momento e quindi influenzare la redditività della tua strategia.

Gestione del Rischio

L’ultimo componente di un sistema di trading quantitativo è il processo di gestione del rischio. Il “Risk Management” include tutti i bias discussi in precedenza. Include il rischio della tecnologia, come la possibilità di malfunzionamenti nei server che ospitano il nostro sistema o nei server dell’exchange. Comprende il rischio di intermediazione, come ad esempio la bancarotta di un broker (non è uno scenario così improbabile, come è accaduto con MF Global!). Sinteticamente il “Rischio” comprende quasi tutto ciò che potrebbe interferire con l’implementazione dei nostri trading system, e sono molte le cause di queste interferenze. Moltissimi libri sono dedicati alla gestione del rischio per le strategie quantitative, quindi non rimando alla letteratura disponibile se si vuole approfondire questa tematica.

La gestione del rischio comprende anche ciò che è noto come allocazione ottimale del capitale, che è una branca della Gestione del Portafoglio. Quest’ultima descrive il modo in cui il capitale viene assegnato a un insieme di strategie diverse e ai singoli trade all’interno di tali strategie. È un’area complessa e si basa su una matematica non banale. L’approccio standard con cui viene gestito il capitale e il levarege delle strategie è il criterio di Kelly. Dato che questo è un articolo introduttivo, non mi dilungherò sulle formule che lo compongono. Il criterio di Kelly fa alcune ipotesi sulla natura statistica dei rendimenti, che non sono del tutto validi per i mercati finanziari, quindi gli algotrader sono spesso prudenti quando si tratta dell’implementazione di questo criterio.

Un altro componente chiave della gestione del rischio è la gestione emotiva e psicologica. Ci sono molti bias cognitivi che possono insinuarsi nel trading. Anche se questo è meno problematico con il trading algoritmico se il sistema viene lasciato lavorare senza interruzioni una volta che è stato avviato! Un bias comune è quello dell’avversione alla perdita, in cui una posizione perdente non viene chiusa a causa del dolore provocato dal dover realizzare una perdita. Allo stesso modo, i profitti possono essere presi troppo presto nel timore di perdere un profitto già guadagnato. Un altro bias comune è noto come recency bias. Questo si manifesta quando i trader mettono troppa enfasi sugli eventi recenti e trascurano la visione a lungo termine. Poi, naturalmente, ci sono i classici bias emotivi: come la paura e l’avidità. Questi possono spesso portare a un leverage eccessivo o troppo ridotto, che può causare un blow-up (cioè la liquidazione di tutte le posizione e, addirittura, la chiusura del conto) o una notevole riduzione dei profitti.

Conclusione

Come si può ben intuire, il trading algoritmico e quantitativo è un settore estremamente complesso, anche se molto interessante, della finanza quantitativa. In questo articolo ho solamente sfiorato la superficie dell’argomento, e sta già diventando piuttosto lungo! Sono stati scritti interi libri e documenti su questioni a cui ho dedicato solamente una o due frasi. Per questo motivo, prima di andare live con sistemi di trading quantitativo, è necessario prevedere un significativo periodo di studio. Per lo meno avrai bisogno di un ampio background in statistica ed econometria, con molta esperienza nella programmazione, attraverso un linguaggio di programmazione come MATLAB, Python o R.

Per strategie più sofisticate per approcci HFT è inoltre necessario un set di competenze in aspetti come la modifica del kernel Linux, conoscenza avanzata del C / C ++, programmazione assembler e ottimizzazione della latenza della rete.

Se sei interessato a provare a creare le tue strategie di trading algoritmiche, il mio primo suggerimento è sicuramente quello di diventare un bravo programmatore. Inoltre dovrai implementare, il più possibile personalmente (o almeno conoscere ogni singolo aspetto funzionale e tecnico) il processo di acquisizione dati, le strategie di backtester e il sistema di esecuzione.

Dato che stai facendo trading con il tuo capitale, non dormiresti meglio la notte sapendo che hai completamente testato il tuo sistema e sei consapevole delle sue insidie e dei possibili problemi? L’esternalizzazione a un fornitore, se potenzialmente permette di risparmiare tempo nel breve termine, potrebbe essere estremamente costoso nel lungo termine.

Gli altri articoli di questa serie

Benvenuto su DataTrading!

Sono Gianluca, ingegnere software e data scientist. Sono appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Torna in alto
Scroll to Top