Di recente mi sono appassionato, per vari motivi tra cui la voglia di sperimentare nuove tecnologie, agli algoritmi di trading automatico. Qualche tempo fa ho letto un libro di AI (Artificial Intelligence) o all’italiana IA e mi sono chiesto se effettivamente algoritmi di ML (Machine Learning). La mia ambizione è solo quella di divertirmi con un nuovo giocatolo, non certo di competere con bravi scienziati, investitori e trader che si stanno cimentando con la materia. Fatte le prime prove mi sono reso conto che il passo verso algoritmi di AI possono arrivare solo dopo aver preso padronanza con la materia, ossia l’analisi tecnica e il backtesting.
Imparato un po’ di pyhton e le API Backtrader per il testing su dati storici mi sono creato la mia sandbox. Purtroppo in italiano non esiste un termine che esprime il significato per ‘sandbox‘, in tedesco direi Sandkiest, In italiano sarebbe sabbiera o qualcosa del genere. in pratica la scatola di sabbia in cui giocano i bambini nei parco giochi inglesi e tedeschi. In Italia si gioca con la sabbia al mare, non in una scatola come invece fanno i bambini tedeschi e inglesi. A ogni modo mi sono creato l’ambiente con cui giocare così composto:
- Python con framework Backtrader
- Storico dei dati giornalieri di alcune azioni FTSE MIB dal 2010 a fine 2020.
- Algoritmi di trand following da sperimentare
Il paniere di azione è composto da alcune azioni che hanno dati storici fino al 2010 , nello specifico questo è l’elenco di 26 azioni che ho utilizzato per le mie prove:
tickers = [
'ENEL','ENI','EXO','FCA','G','HER','IP','ISP','MB','PRY',
'A2A','AMP','ATL','BAMI','BGN','BMED','BPE','BZU','CPR','DIA',
'SRG','STM','TEN','TIT','UCG','UNI'
]
La scelta di Backtrader è legata semplicemente al fatto che ho trovato una guida rapida e veloce che nel giro di una giornata mi ha consentito di implementare il primo algoritmo. E’ semplice intuitivo e con alcune funzioni di ottimizzazione degli algoritmi. Gestisce la simulazione con diversi aspetti come le commissioni, OCO, stop, limit, gestione del cash e dimensionamento degli ordini,…. Framework ben fatto con due limiti individuati fino ad ora:
- Elevato utilizzo della memoria nelle ottimizzazione, per ottimizzare 5 parametri sul mio portafoglio di 10 pagina troppo. Sicuramente il fatto che uso un PC con 8GB non aiuta, ma credo che l’algoritmo sia pensato per le prestazioni a discapito della ram. In effetti le CPU (8) sono sempre a tappo quando gira l’ottimizzazione.
- Il secondo limite è l’utilizzo degli stoploss, take profit e trailing stop. Tipicamente queste sono caratteristiche legate agli ordini stessi, su Backtrader vanno implementate ad hoc con alcuni accorgimenti in modo un po’ macchinoso.
Presa padronanza del sistema ho voluto fare delle prove con diverse strategie di trand following che si trovano abitualmente in giro. Ho saltato i classici incroci di medie e mi sono soffermato su 3 strategie che si appoggiano ad indicatori interessanti e popolari: HMA, MACD e RSI. Ho incrociato i diversi indicatori perché ovunque si legge che un indicatore da il segnale e il secondo la conferma. Ovviamente non mi sono inventato l’acqua calda ho iniziato con le strategie ritenute valide da esperti del settore.
I risultati che ho ottenuto mi hanno aperto gli occhi su alcuni nozioni studiate sulla carta e per le quali l’istinto darebbe indicazioni contrarie.
Di seguito i risultati delle prove fatte, con il seguente contesto di contorno:
- Solo posizioni long
- Entrate con importo costante da 10.000€
- Cash iniziale 260.000€ sufficiente per coprire acquistare tutti i titoli insieme
- Nessuna leva
- Senza Stop loss o trailing stop
- Prese di posizione solo al verificarsi di eventi legati alla strategia
- Indici di valutazione: permanenza nel mercato, ritorno cumulativo, sharpe, max drowdown e DD più lungo, altri indicatori non sono interessanti almeno per me
- Vengono applicate commissioni 6,75€ a eseguito e la tobing tax al 0,7%
- Vengono utilizzati i dati di Yahoo Finance aggiustati sulle operazioni societarie (split, dividendi,…)
RSI
- Entrata in situazione di iperventuto RSI < 30
- Uscita dopo 5 giorni o RSI > 50
Il risultato è stato deludente, dal 2010 al 2018 ha raggiunto un ritorno di 15% ca, ma nel 2018 ha subito un calo importate e poi un crollo nel 2020 con il crollo dei mercati di marzo. Dopo 10 anni ha totalizzato ricavi netto tobin tax lordo cap.g. per 2.431€. La permanenza nel mercato è stato da 54%, ossia molto poco tenendo conto che sono 26 i titoli su cui operare.
Time in Market | 50.0% |
Cumulative Return | 0.94% |
CAGR% | 0.08% |
Sharpe | 0.05 |
Sortino | 0.06 |
Max Drawdown | -26.55% |
Longest DD Days | 959 |
Qui il link alla scheda del risultato.
MACD
- Entrata con istogramma positivo
- Uscita con istogramma negativo
Il risultato è decisamente migliore con un guadagno netto di 231.563€. Nel periodo 2011-2012 non è stato possibile entrare su alcune posizione per assenza di liquidità. L’impossibilità ad entrare in posizione altera il risultato della simulazione perché riduce le perdite ma ritarda anche i guadagni.
Time in Market | 55.0% |
Cumulative Return | 89.06% |
CAGR% | 5.96% |
Sharpe | 0.53 |
Sortino | 0.76 |
Max Drawdown | -31.14% |
Longest DD Days | 1091 |
Qui il link alla scheda del risultato.
HMA
- Entrata: HMA passa da decrescete a crescente
- Uscita: HMA passa da crescete a descrescente
Il risultato non è entusiasmante, la liquidità è scarsa dal 2011 al 2013, molte operazioni non vengono eseguite assenza di liquidità e al termine del periodo il guadagno netto è di 89.761 € (netto tobin lordo cap.g.).
Time in Market | 58.0% |
Cumulative Return | 34.52% |
CAGR% | 2.73% |
Sharpe | 0.26 |
Sortino | 0.37 |
Max Drawdown | -37.55% |
Longest DD Days | 2037 |
Qui il link alla scheda del risultato
Buy and Hold
Il risultato più interessante è dato dalla strategia Buy and hold, ossia compro il 1/1/2010 e vendo il 31/12/2020. Bene, con questa strategia il P&L netto è di 433.342, ossia il capitale di partenza è moltiplicato per 2,66, una media di ca. 10% annuo.
Time in Market | 100.0% |
Cumulative Return | 166.74% |
CAGR% | 9.33% |
Sharpe | 0.52 |
Sortino | 0.71 |
Max Drawdown | -38.63% |
Longest DD Days | 970 |
Qui il link alla scheda del risultato
Per riassumere la strategia vincente sembra essere Buy and Hold la migliore.
BAH | MACD | HMA | RSI | |
Time in Market | 100.0% | 55.0% | 58.0% | 50.0% |
Cumulative Return | 166.74% | 89.06% | 34.52% | 0.94% |
CAGR% | 9.33% | 5.96% | 2.73% | 0.08% |
Sharpe | 0.52 | 0.53 | 0.26 | 0.05 |
Sortino | 0.71 | 0.76 | 0.37 | 0.06 |
Max Drawdown | -38.63% | -31.14% | -37.55% | -26.55% |
Longest DD Days | 970 | 1091 | 2037 | 959 |
Guardando il puro profitto la strategia ‘BuyAndHold’ è sicuramente la strategia migliore, ma a lunga distanza. In un decalogo di regole direi che la prima da mettere è di non chiudere una posizione in perdità salvo in caso di necessità di liquidità o per una strategia molto profittevole. Il periodo sott’acqua è molto lungo 970 giorni con una perdita massima del 38,63%.
Considerando l’indice di sharpe la strategia MACD sembra migliore perché in effette è più costante nel tempo. Una simulazione togliendo le commissioni e la tobin tax mostra come la MACD sia tutto sommato migliore per alcuni aspetti rispetto alla BuyAndHold. In particolare il periodo DD massimo è di ‘soli’ giorni 640 giorni, ben 330 in meno rispetto a BuyAndHold. L’indice di sharpe si porta a 0.62 e il rendimento si assesta su 288.923€. Nel corso di 10 anni vengono lasciati ben 50.000 in commissioni e tobin tax sul campo.
Time in Market | 55.0% |
Cumulative Return | 111.12% |
CAGR% | 7.03% |
Sharpe | 0.62 |
Sortino | 0.91 |
Max Drawdown | -30.2% |
Longest DD Days | 640 |
Ecco il factsheet della strategia MACD senza commissioni
Lascia un commento