Vai al contenuto

Una finestra sul passato ed una sul futuro: la filiera di progetto di un trading system nel 2021

Fino a ieri una delle migliori possibilità di progetto a disposizione del pubblico retail era costituito dalle varie piattaforme a pagamento (o in comodato d’uso) fornite da vari provider (broker ma anche semplici software house). Stiamo parlando di suite per lo sviluppo come Multicharts (forse la migliore soluzione sulla piazza in termini di flessibilità e stabilità), Tradestation (che ha il vantaggio di integrare dati, software e broker in un unico ecosistema), Amibroker (sarà nota se avete letto qualche testo di Howard Bandy), Metastock o le varie soluzioni come MT4 o MT5, solo per citare alcune realtà.

Quando ho iniziato personalmente ad occuparmi di trading sistematico e di intelligenza artificiale applicata al trading con i primi predittori a rete neurale (periodo a cavallo del 2000), ho assistito ad una nuova alfabetizzazione analoga a quella che aveva travolto il mondo negli anni 80 con l’avvento dei Personal Computer commerciali. In ambito italiano (e oggi non solo) sono fioriti prodotti come Visual Trader e Metastock rappresentava lo stato dell’arte per lo stock picking. Anche chi, fino a pochi anni prima, prendeva decisioni operative sulla base dell’osservazione dei grafici, attività che teneva incollati ai monitor molti professionisti del settore, iniziò ad utilizzare questi strumenti che si diffusero su larga scala. Persone insospettabili hanno aumentato le proprie competenze avvicinandosi da “utilizzatori” a questi software, apprendendo i primi “meta-codici” come Easylanguage, VT code o AFL (codici semplificati rispetto ai linguaggi di programmazione dell’epoca). Negli anni tali strumenti si sono ulteriormente specializzati e raffinati, ma tale processo ha portato anche un aumento della complessità. Ai tool canonici si sono aggiunti strumenti per l’analisi genetica (tra i tanti citiamo Adaptrade Builder di Michael Bryant o Strategy Quant). Il panorama dell’offerta commerciale si è anche ulteriormente ampliata negli ultimi anni con la diffusione di piccole suite, specifiche per affrontare temi come l’asset allocation, la rotazione di portafoglio ecc.

Oggi sapersi districare tra questa pletora di strumenti non è semplice e può essere anche estremamente costoso. Easylanguage e Powerlanguage (per citare i meta-codici più diffusi nella comunità dei trader sistematici) hanno raggiunto una complessità tale (si pensi alla programmazione ad oggetti solo per fare un esempio) che ha rimesso in discussione l’opportunità di muoversi diversamente. Se a questo aggiungiamo il fatto che il mondo del Machine Learning sia cresciuto enormemente e si sia diffuso dall’ambito universitario a quello retail, con librerie come TensorflowKeras o Pytorch, il quadro è completo. L’analisi dei dati propedeutica allo sviluppo, è oggi estremamente potenziata e viaggia su codici di programmazione snelli, semplici da interpretare, scalabili e potenti come Python o Swift. Il cambio di passo è stato pilotato proprio da Python, che negli ultimi anni ha sbaragliato la concorrenza ed oggi è il linguaggio di programmazione più ricercato per figure professionali in ambito finanziario. Prende il meglio di R e Matlab, è open source e conta su una community in forte espansione. Crediamo fermamente di trovarci all’alba di una nuova stagione, che assomiglia molto a quella vissuta con l’avvento dei personal computer: è giunto il momento di fare un ulteriore cambio di passo e passare dai metacodici come Easylanguage e Powerlanguage alla potenza e la flessibilità di un vero linguaggio di programmazione come Python?

Se analizziamo il quesito in termini di complessità da gestire, non ci sono più molti dubbi: oggi scrivere una analisi in Python (con le librerie disponibili come Numpy, Pandas, Matplotlib, Seaborn, Plotly & Cufflinks solo per citarne alcune) è più semplice e lineare che farlo in un qualsiasi meta-codice e si aggiunge il vantaggio di controllare l’intera filiera di analisi e progetto. Non esiste più l’esigenza di passare da un tool all’altro a seconda dell’esigenza specifica e si può modulare tutto all’interno di un unico e poliedrico ecosistema open source. Creadiamo fermamente (e stiamo investendo in questa direzione) che il coding, quello vero, rappresenti la nuova alfabetizzazione del prossimo decennio.

Questo non significa che strumenti come Tradestation o Multicharts siano vicini al tramonto e anzi possono essere delle ottime alternative per andare a mercato. Sempre più professionisti portano fuori da tali suite la fase di sviluppo e poi differenziano l’andata a mercato diretta con Python (utilizzando soluzioni come iBridgepy o Backtrader per citare due delle più diffuse) con quella ad esempio di Tradestation. Il tutto in un’ottica di sana ridondanza, non solo dei sistemi di trading, ma anche delle architetture tecnologiche di collegamento.

Ma tocchiamo con mano cosa significhi lavorare in Python e costuirsi gli attrezzi del mestiere. Bisogna ribaltare il paradigma e non procedere per tentativi come troppo spesso viene naturale con molte piattaforme. Una analisi profonda dei dati significa sondarne tutti gli aspetti sotto il nostro controllo, come ad esempio i flussi di scambio su base periodica. In figura 1 vediamo ad esempio il profilo normalizzato dei volumi medi campionati su base oraria del Copper Future (ticker HG).

Fig.1: Activity Factor Copper Future, ticker HG.

In blu possiamo osservare il valor medio normalizzato degli scambi campionati dal 2007 ad oggi, in rosso dal 2015 ad oggi ed infine in lime dal 2019 ad oggi. E’ evidente come il massimo degli scambi si verifichi tra le 9 e le 13 (orario di exchange) e tutti e tre i campionamenti mostrano un massimo di attività alle 10 del mattino. Ciò può tradursi in una maggiore liquidità in termini di contratti scambiati, ma non necessariamente in un minor slippage (differenza tra eseguito teorico ed eseguito reale). Molte inefficienze possono invece manifestarsi nelle fasce meno “partecipate” come la fascia notturna, in cui molti player sono fuori dal gioco.

Passando ad una analisi della tendenza oraria (bias orario), possiamo analizzare l’istogramma di figura 2.

Fig.2: Hourly Bias Copper Future, ticker HG.

Le convenzioni cromatiche sono le medesime e in ordinata vediamo la versione percentuale della tendenza media. Si nota in modo piuttosto evidente una tendenza ribassista dalle 2 alle 8 (proprio nella fascia notturna a basso scambio identificata nel grafico precedente), poi una tendenza rialzista dalle 9 fino a fine giornata (ricordiamo che la sessione inizia alle 19 e termina alle 17). Ma questa indicazione, da sola ci dice ben poco: dobbiamo approfondire la valenza statistica di tale indicazione e per farlo calcoliamo quante volte una determinata tendenza, al rialzo o al ribasso, sia avvenuta per contributi rialzisti o ribassisti. In sostanza non ci accontentiamo di sapere che una certa fascia oraria abbia o meno una tendenza specifica, ma vogliamo sapere quante volte tale tendenza si sia verificata (al netto del valor medio). Nella heatmap di figura 3 possiamo apprezzare i valori percentuali associati a ciascuna tendenza oraria. Le prime tre colonne rappresentano i tre periodi di osservazione (rispettivamente lungo, medio e corto). L’ultima colonna ci da un valore riassuntivo, ottenuto mediante una combinazione lineare dei tre periodi di osservazione.

Fig.3: Samples Percentage on Copper Future, ticker HG.

Per fare un esempio, la tendenza ribassista identificata dalle 2 alle 8 di mattina corrisponde ad una probabilità media dell’80% sulle occorrenze campionate. Per avere un ulteriore elemento di confronto, calcoliamo lo scostamento della varianza in figura 4.

Fig.4: Hourly Bias Standard Deviation on Copper Future, ticker HG.

A varianza meno accentuata corrispondono soluzioni più stabili e viceversa. Il fatto di ripetere l’analisi su tre differenti periodi di osservazione permette di generalizzare ulteriormente quanto determinato.

Questo tipo di informazioni (abbiamo preso soltanto alcuni degli strumenti a disposizione per l’analisi) possono costituire la base di partenza per testare una strategia reversal o di volatility/level breakout o breakdown su un time frame parente di quello orario.

E’ un modo per conoscere la tendenza degli strumenti finanziari in esame e per costruire un sistema di risk management opportuno. Semplificando un modo per “non guidare bendati su strade sconosciute”.

Quando poi inizia la fase di validazione e ottimizzazione, Python permette davvero di fare il salto di qualità con una efficienza senza eguali (tradotta in termini di velocità e semplicità di utilizzo). Possiamo facilmente realizzare una architettura statica o dinamica periodica come una GSA (“Gandalf Segmented Architecture”), simmetrica o asimmetrica. In figura 5 possiamo apprezzare una grigliatura di validazione asimmetrica GSA, mentre in figura 6 una simmetrica.

Fig.5: Esempio grigliatura asimmetrica di validazione con Python su Gold Future.
Fig.6: Esempio grigliatura di validazione simmetrica con Python su Copper Future.

Si noti come in questa fase l’attenzione non si concentri sul realizzare curve “perfette”, ma potenzialmente stabili. Saranno poi considerazioni legate all’aggregazione di tali curve in un unico portafoglio a dare o meno una attribuzione di valore alle singole componenti. Ed è proprio quando si parla di portafogli che librerie come Pandas sbaragliano la concorrenza.

Una delle chiavi di lettura si evincono dal raffinamento durante la fase di fine tuning, potenziata dalla ricerca automatica delle aree di stabilità: vengono svolte delle ottimizzazioni multi-parametriche dalla macchina che è in grado, per ogni coppia, di isolare le zone (“plateau”) più stabili.

Fig.7: Esempio ottimizzazione a due parametri e ricerca automatica delle aree di stabilità per Sharpe Ratio.

Infine con Python possiamo rendere “quantitativa” e non “qualitativa” anche la fase di confronto tra diverse distribuzioni di trade generati durante la fase di addestramento e di test (in figura 8 possiamo osservare il campionamento GPDR.

Fig.8: Distribuzione dei trade di una strategia in “in sample” ed in “out of sample” sfruttando la segmentazione GSA.
Fig.9: Gandalf Persistence Distribution Index GPDR.

Un approccio rigoroso non è mai la garanzia di sistemi miracolosi che battano sistematicamente il mercato e invitiamo a diffidare da soluzioni chiavi in mano troppo semplicisticheAssecondare la natura degli strumenti, senza tirare troppo la corda è un’arte che si acquisisce con l’esperienza. Ad esempio, è possibile ottenere strategie che non stiano dando contributo negli ultimi due anni e che solo adesso si stiano “riaccendendo”, proprio grazie alla GSA che non impone una verifica statica tra un singolo periodo di training (in sample) ed uno di test (out of sample).

Fig.10: sistema correttamente validato con GSA su Copper Future.

Il sistema di figura 10 ha delle metriche di tutto rispetto, eppure un occhio poco allenato lo avrebbe probabilmente messo in panchina, per motivi legati ad una selezione puntuale dei migliori sistemi a disposizione.

Fig.11: metriche di un sistema correttamente validato con GSA su Copper Future.

Il “bias di selezione” è un altro degli aspetti da non sottovalutare: non conviene quasi mai scegliere i migliori sistemi da mettere in campo unicamente sulla base delle migliori performance dell’ultimo periodo. Anche qui conviene diversificare l’allestimento pescando da differenti tipologie di curve. E anche su questo Python ci viene in soccorso.

Sintetizzando, oggi la sfida è quella per la gestione della complessità. Avere un unico strumento di analisi, ideazione, sviluppo e produzione come Python rappresenta un aiuto insostituibile a nostro avviso. Essere indipendenti se vogliamo creare un nuovo indicatore, una nuova metrica di performance report, se desideriamo variare la modalità di validazione o di allestimento di un portafoglio rotazionale di strategie o asset, se vogliamo collegare elementi di Artificial Intelligence per la previsione dei prezzi, oppure se semplicemente non vogliamo più dipendere da nessuno per le nostre analisi, Python è oggi una risposta concreta.

Come è noto abbiamo prodotto un potente acceleratore che racchiude tutti gli elementi citati e molti altri ancora e che si chiama Python Academy (qui si possono leggere tutti i dettagli). 

Ma il bello di linguaggi come Python è che è completamente open source: in rete troverete una miriade di risorse da cui iniziare.

Siamo entrati in un decennio importante.

Buon lavoro a tutti!

Giovanni Trombetta

Head of R&D Gandalf Project

AVVERTENZE: I contenuti di questo articolo (e degli altri contenuti in questo sito) e le opinioni espresse non devono in nessun caso essere considerati come un invito all’investimento.
Le analisi non costituiscono mai una sollecitazione all’acquisto o alla vendita di qualsivoglia strumento finanziario. Queste note hanno per oggetto analisi finanziarie e ricerca in materia di investimento. Qualora vengano espresse delle raccomandazioni, queste hanno carattere generale, sono rivolte ad un pubblico indistinto e mancano dell’elemento della personalizzazione.
Sebbene frutto di approfondite analisi, le informazioni contenute in questo e negli altri articoli possono contenere errori. Gli autori non possono in nessun caso essere ritenuti responsabili per eventuali scelte effettuate dai lettori sulla base di tali informazioni erronee. Chi decide di porre in essere una qualsiasi operazione finanziaria sulla base delle informazioni contenute nel sito lo fa assumendone la totale responsabilità.

DISCLAIMER: The contents of these notes and the opinions expressed should in no case be considered as an invitation to invest. The analyzes never constitute a solicitation to buy or sell any financial instrument.
These notes relate to financial analysis and investment research. If recommendations are made, these are of a general nature, are aimed at an indistinct audience and lack the element of personalization.
Although the result of in-depth analysis, the information contained in these notes may contain errors. The authors cannot under any circumstances be held responsible for any choices made by readers on the basis of such erroneous information. Anyone who decides to carry out any financial transaction on the basis of the information contained in the site does so assuming full responsibility.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *