Uno dei future più utilizzati, sia in ambito “private trading” che “institutional investing”, è di sicuro il Gold Future. Può essere utilizzato per logiche di copertura dal rischio, per portafogli azionari, o per pura speculazione nel breve termine. Il metallo prezioso ha storicamente risposto a logiche di level e volatility breakout, e tale attributo si declina diversamente a seconda del time frame e del periodo storico di analisi. In questo articolo desideriamo sottolineare alcuni aspetti della filiera di produzione di un trading system su Gold Future, affrontando sia la parte di ideazione, che quella di sviluppo e validazione, avvalendoci del paradigma open source e senza utilizzare alcuna piattaforma software a pagamento (qui non viene trattata la fase di messa in opera sul mercato, che sarà oggetto di futuri articoli, ma anche questa parte può essere svolta senza l’ausilio di alcuno strumento oneroso).
Ma torniamo al Gold Future (riprendendo una metodologia che abbiamo già trattato in un articolo del 2021).
Durante la trattazione utilizzeremo un time frame orario di una serie future continuous, exchange time e session hour (fonte dati Tradestation, inizio dati 1 gennaio 2007, termine dati il 5 dicembre 2022).


Il nostro approccio culturale parte dall’osservazione dei dati, alla ricerca di comportamenti ripetitivi, statisticamente significativi. La tavola dell’ “Activity Factor” (fonte Python Academy modulo 3) calcolata su tre differenti orizzonti temporali, ci mostra come i volumi medi di scambio vivano tre fasi distinte durante la sessione:
- Elevata attività dalle 9 alle 14.
- Media attività dalle 3 alle 8.
- Bassa attività dalle 19 alle 2.

Per quanto riguarda l’andamento medio su base oraria (“Hourly Bias” calcolato sui medesimi tre periodi temporali, fonte modulo 3 Python Academy), notiamo una tendenza ribassista dalle 3 alle 10, una tendenza lateral rialzista dalle 11 alle 17 (quando si chiude la sessione) ed una tendenza lateral rialzista alla ripresa della sessione dalle 19 alla mezzanotte.

Per la validazione della tecnica grezza di compravendita utilizzeremo una GSA (“Gandalf Segmented Architecture”) simmetrica a 5000 ore per ciascun intervallo in sample ed out of sample (tale tecnica di validazione, ampiamente studiata nel modulo 4 della Python Academy è anche presentata in questo articolo scritto per SIAT).

Tale segmentazione simmetrica dà luogo a 10 periodi in sample e a 9 periodi out of sample.

A questo punto, per sondare l’effettiva utilità di utilizzare una logica di breakout (lavoriamo solo sul fronte long in quest’esempio), ipotizziamo di entrare long con ordine stop (con un contratto pieno) alla violazione del massimo delle ultime 6 ore (un quarto delle 24 ore). Per l’uscita, tenendo conto delle indicazioni su Activity Factor e Hourly Bias, chiudiamo la posizione alle 23 in apertura (anche per tener conto di un possibile avvicendamento degli operatori a cavallo della notte americana).

Di seguito l’equity line del sistema in in sample e a seguire le metriche del performance report (fonte modulo 4 Python Academy).


La dinamica è ascendente, anche se le metriche sono deboli (in particolar modo sulla sostenibilità dell’Average Trade). Iniziamo quindi a lavorare sull’ottimizzazione parametrica e lo facciamo rigorosamente solo nelle fasi in sample.
Decidiamo di “limare” il numero di ore su cui costruire il massimo dei massimi. Facciamo variare tale periodo tra 2 e 100 con step 1.

Di seguito le tavole di ottimizzazione per Average Trade, Profit Factor, Sharpe Ratio e Kestner Ratio.




A questo punto decidiamo di selezionare un valore sub-ottimo nell’area più promettente e stabile per tutte e quattro le metriche: 23 ore. Tale valore assume anche senso fisico (causale) pensando che la sessione sul CME si estende proprio per 23 ore.
Rilanciamo a questo punto il trading system.

Le metriche sono decisamente migliorate, anche se ancora sono sotto soglia di operatività, considerando che non stiamo imputando i costi fissi di slippage e commissioni (normalmente stimiamo a 100 $ l’Average Trade minimo ad unico contratto per prendere in esame un sistema sul Gold Future).


A questo punto possiamo propagare la logica sulla segmentazione out of sample.


La dinamica è rimasta ascendente e le metriche sono generalmente migliorate (a cominciare dall’Average Trade). La cosa non era scontata, visto che normalmente assistiamo ad un decadimento delle metriche tra in sample ed out of sample. La segmentazione GSA ricopre un ruolo fondamentale in questo senso.
Visioniamo quindi il grafico delle distribuzioni di trade in in sample ed in out of sample, per cogliere eventuali differenze macroscopiche che possano denunciare un sovra-adattamento alle condizioni in sample.

i seguito invece una prima analisi quantitativa dei delta sulle principali metriche in in sample ed out of sample.

Non osserviamo decadimenti metrici sostanziali, dunque decidiamo di propagare il sistema sull’intero storico.

La dinamica è ascendente, anche se la parte finale del grafico ha subito una ricombinazione distruttiva aggregando la fase in sample ed out of sample. Ci aiuterà la fase di fine tuning per filtrare i trade (in generale tale fase va completata esclusivamente in in sample, ma possiamo andare in deroga a tale regola se non stiamo parlando di un’ottimizzazione parametrica, ma dell’aggiunta di un filtro di carattere generale).
Di seguito le metriche relative.

Il sistema cuba 2470 operazioni, con un Average Trade che rasenta I 100 $ ed un Profit Factor di 1.3, Pur essendo un sistema di “Level Breakout” mostra un Percent Winning Trade del 53.52% (tipico di un sistema reversal) ed un Reward Risk Ratio di 1.13. L’Average Open Draw Down (valor medio, scarsamente visionato e che a nostro avviso costituisce una misura del rischio medio atteso di fondamentale importanza) è di -5574 $ ed il Max Open Draw Down, registrato il 9 novembre 2020, è di -28270 $. Ricordiamo che stiamo parlando di un sistema grezzo senza alcun tipo di money o position management.
Per completare la fase di validazione applichiamo una funzione di GPDR (“Gandalf Persistence Distribution Ratio”, fonte Python Academy modulo 4) che confronti i percentuali di distribuzione delle due distribuzioni di trade, tra in sample ed out of sample.

Il valore di 2.67 (> 1) a valle di una tolleranza nulla, conferma quanto di buono avevamo visto nella prima analisi delle distribuzioni.
E’ lecito a questo punto applicare un filtro di Blast Off (teoria di Larry Williams particolarmente utile quando si lavora questo tipo di strumento) per filtrare i trade sulla base della volatilità giornaliera. Di seguito la versione finale del trading system.


La dinamica è ascendente ed il filtro di volatilità ha escluso molti trade destinati a non andare in guadagno a causa della natura ciclica della volatilità. Diamo uno sguardo alle metriche.

I trade sono diminuiti in maniera sostanziale (ora sono 873), Profitto ed Average Trade sono aumentati considerevolmente (150830 $ e 172 $ rispettivamente), come pure il Profit Factor (1.61), il Percent Winning Trade (54.98%) ed il Reward Risk Ratio (1.32).
La sostenibilità sul lungo termine è aumentata da 21.79 a 38.47 (Sustainability) e si sono praticamente dimezzati tutti i fattori di rischio (Average Open Draw Down -2421 $ e Max Open Draw Down -10550 $).
Un’operazione in media rimane a rischio per 13 ore dopo l’ingresso (Avg Time in Trade) ed il Calmar Ratio Yearly di 3.16 testimonia che abbiamo oltre tre volte la probabilità media di profitto rispetto al valor medio di draw down.
La regolarità della curva di equity è testimoniata da un Kestner Ratio di 0.35.
A seguire l’analisi grafica del draw down istantaneo (fonte Python Academy modulo 4, motore di backtest versione “Wintermute”).


Il profilo istantaneo dei draw down è regolare a testimonianza di un’esposizione al rischio uniforme.


Il Profit(Loss su base annuale (ad unico contratto) fa emergere due anni critici in particolare, il 2018 ed il 2021. In tali anni la natura breakout dello strumento ha risposto meno bene alla logica proposta.

Giugno, Luglio ed Ottobre sono i mesi più sfavorevoli (storicamente) all’applicazione di tale strategia. Di seguito la “heatmap” dei profitti mensili, anno su anno.



Il dettaglio del MAE (“Maximum Adverse Excursion”) e del MFE (“Maximum Favorable Excursion”) testimonia quanto possa essere aggiunto in termini di position management (Stoloss, TakeProfit, ecc.)
Infine la tavola che evidenzia il Profit/Loss delle singole operazioni in base al numero di ore dall’ingresso in posizione.

Sovrapponendo l’architettura GSA all’Equity Line della strategia e all’andamento dei prezzi del sottostante, possiamo cogliere l’intero processo di validazione.

Quello che abbiamo raccontato in questo articolo è solo una traccia nel bosco, alla ricerca di una delle tante strategie possibili su uno degli strumenti più utilizzati tra le commodity. Ovviamente vuole essere soltanto uno spunto didattico per realizzare sistemi più competitivi e stabili e in alcun modo questo rappresenta un consiglio di investimento di alcun tipo (diffidiamo i lettori dalla messa in opera di tale strategia, così com’è).
Detto questo speriamo di essere riusciti a descrivere coerentemente l’intera filiera di ideazione, progetto e validazione di una strategia di trading intraday, tenendo conto dei principali paletti e rischi che si incontrano lungo la strada.
Tutto quello che avete visto è prodotto in house con Python (codice open source) senza l’utilizzo di alcuna suite commerciale. Oggi questo è diventato realtà grazie a linguaggi come Python e community che si stanno ingrandendo giorno dopo giorno. Il mondo del trading algoritmico professionale sta migrando verso questo tipo di tecnologie, che non dipendono da vendor o da aziende che possono interrompere l’erogazione dei loro strumenti e questo è riconosciuto come valore, anche in termini di investimento nella propria formazione. Di seguito potete vedere il cammino di popolarità di Python (in termini di adozione, ricerche e posti di lavoro) testimoniato dall’ultima classifica di dicembre 2022 del TIOBE Index.


Che siate professionisti del settore, trader, investitori, analisti finanziari o semplici appassionati, vi consigliamo di tenere conto di questa possibilità. Quello che vi serve è un flusso dati (per cominciare potete utilizzare fonti gratuite, ma poi diventa vitale utilizzare dati di buona qualità, soprattutto in intraday) ed un broker per inviare gli ordini a mercato. Per tutto il resto avete Python.
Tutto ciò può essere fatto in completa autonomia, studiando Python al servizio dell’Analisi Quantitativa in modo completamente indipendente e gratuito. Se invece per voi, al momento, il tempo è una risorsa preziosa, come Gandalf Project abbiamo realizzato un potente acceleratore didattico che si chiama Python Academy, e che è giunto alla sua quinta edizione (2023). Qui potete leggere tutti i dettagli.
Have a good trade!
Giovanni Trombetta
Founder – Head of R&D
Gandalf Project