Vai al contenuto

Un Asset Allocation Open Source con Python

Oggi lavorare sull’Asset Allocation non richiede più costosi tool a pagamento o servizi di terze parti, ma può essere fatto in completa autonomia grazie ai linguaggi open source. In questo articolo faremo vedere come sia possibile manipolare i dati, costruire un portafoglio di asset e visionare i risultati da un punto di vista quantitativo. Il tutto con Python e con le sue librerie open source (crediamo talmente in questo paradigma che arricchiamo di continuo il nostro percorso di punta “Python Academy“).

Il recente evento pandemico ha avuto un effetto su quasi tutti gli asset e, per quantificarlo, diamo uno sguardo a tre mercati di riferimento che sono spesso alla base di un primo asset management per la costruzione di un semplice portafoglio grezzo: il mercato azionario (prenderemo SPY, SPDR S&P 500 ETF Trust, che mira a fornire risultati di investimento che, al lordo delle spese, corrispondono generalmente al prezzo e alla performance dell’Indice S&P 500), il mercato obbligazionario (TLT, iShares 20+ Year Treasury Bond ETF, il cui investimento mira a tracciare i risultati di investimento dell’ICE Treasury 20+ Year Bond Index) e il mercato dell’oro (GLD, SPDR Gold Shares, legato all’andamento del prezzo dei lingotti d’oro, meno le spese delle operazioni del Trust). Si tratta di alcuni tra gli ETF più liquidi sul mercato americano e possono essere negoziati come delle azioni.

Analizziamo questi asset singolarmente caricando gli storici daily da Yahoo Finance con la libreria quantitativa open source “FFN“. Partiamo da SPY e otteniamo la curva aggregata dei rendimenti giornalieri:


Fig.1: aggregato rendimenti di SPY dal 2007 ad oggi.

Il grafico di figura 1 ci restituisce rapidamente quanto avrebbe fruttato un investimento su azionario per ogni dollaro investito da gennaio 2007: circa il 200% del capitale. Si tratta di una rappresentazione stile Net Asset Value (NAV) tipica dei fondi. A colpo d’occhio possiamo subito apprezzare i momenti di ricorrezione, come quelli a cavallo tra l’autunno del 2008 e la prima parte del 2009, il 2011, l’autunno 2015, l’inizio del 2016 e del 2018 ed infine la profonda ricorrezione di fine febbraio e inizio marzo 2020. Per apprezzare meglio questi momenti di sofferenza andiamo a graficare la heatmap dei contributi percentuali su base mensile ed annuale e lo facciamo sfruttando la libreria “Seaborn“:

Fig.2: aggregato rendimenti percentuali mensili di SPY dal 2007 ad oggi.

Si nota immediatamente come la lunga fase ricorrettiva del 2008 sia stata ben poca cosa rispetto a ciò che è accaduto su questo strumento durante il Covid19. Visioniamo adesso come siano andati i corsi obbligazionari su TLT:

Fig.3: aggregato rendimenti percentuali di TLT dal 2007 ad oggi.

Per quanto meno regolare nei run up (accelerazioni positive della nostra curva di equity), intuiamo una possibile correlazione inversa di breve periodo proprio nei momenti di crisi del mercato azionario. Per apprezzare maggiormente tale fenomeno, anche in questo caso rappresentiamo i contributi mensili aggregati:

Fig.4: aggregato rendimenti percentuali mensili di TLT dal 2007 ad oggi. 

Quella che era stata una intuizione grafica (sorretta per la verità da nozioni macroeconomiche) si palesa analizzando sia il 2008 che l’ultima crisi. Sembra che TLT fletta soltanto durante le fasi di ripartenza dell’azionario. Per chiudere la nostra analisi di partenza, procediamo allo stesso modo anche sull’oro con GLD:

Fig.5: aggregato rendimenti percentuali di GLD dal 2007 ad oggi.
Fig.6: aggregato rendimenti percentuali mensili di GLD dal 2007 ad oggi.

Siamo questa volta di fronte ad un asset fortemente decorrelato (almeno sul lungo periodo) rispetto a SPY e TLT. Le annate più critiche sembrano essere il 2011, il 2012 ed il 2013.

Leggiamo spesso sui giornali di influenti Hedge Fund che perdono denaro e desideriamo fare un esperimento didattico: come avrebbe pagato comporre un ipotetico portafoglio con una eguale esposizione sul mercato azionario (SPY), obbligazionario (TLT) e su gold (GLD)? Mettiamo insieme le tre curve dei profitti percentuali giornalieri aggregati:

Fig.7: aggregato rendimenti percentuali di SPY, TLT e GLD dal 2007 ad oggi.

La libreria FFN consente di popolare da subito alcune statistiche, proprie di un performance report professionale: è possibile apprezzare la presenza delle principali metriche associate a SPY, TLT e GLD (ad esempio lo Sharpe, il Sortino o il Calmar Ratio):

Fig.8: statistiche relative alle singole componenti (SPY-TLT-GLD) dal 2007 ad oggi.

Per apprezzare meglio quello che vediamo da un punto di vista grafico, misuriamo la matrice di correlazione tra le tre serie storiche percentuali.

Fig.9: matrice di correlazione di SPY, TLT e GLD dal 2007 ad oggi.

L’analisi di lungo periodo segnala una correlazione positiva tra tutti e tre gli asset con un 25% di correlazione tra GLD e SPY, un 86% tra SPY e TLT ed infine un 53% tra GLD e TLT. Ma se vogliamo cogliere le correlazioni inverse che abbiamo intuito guardando i NAV, dobbiamo restringere le finestre temporali: in figura 10 possiamo osservare una seconda matrice delle correlazioni da gennaio 2020 ad oggi.

Fig.10: matrice di correlazione di SPY, TLT e GLD da gennaio 2020 ad oggi.

Adesso le relazioni inverse si manifestano con forza: decorrelazione quasi totale tra GLD e SPY (-9% dove 0% indicherebbe la decorrelazione completa), correlazione diretta tra GLD e TLT (74%) ed infine correlazione inversa tra SPY e TLT (-68%). Degli ingredienti succulenti per allestire un portafoglio che sovraperformi già in forma statica una esposizione sui singoli asset.

Fig.11: aggregato rendimenti percentuali di un portafoglio equidistribuito su SPY, TLT e GLD dal 2007 ad oggi.

La curva ottenuta in figura 11 potrebbe sorprendere qualcuno: non c’è trucco e non c’è inganno, la regolarità ottenuta non è frutto di ottimizzazioni o di strane alchimie. Abbiamo semplicemente scommesso ex post sulla natura decorrelata di breve periodo dei tre asset. Nonostante questo, in alcuni momenti, i contributi si sommano in maniera distruttiva, come si vede dal grafico del draw down di figura 12.

Fig.12: draw down aggregato rendimenti percentuali di un portafoglio equidistribuito su SPY, TLT e GLD dal 2007 ad oggi.

In particolare la crisi pandemica all’interno della quale ancora ci troviamo, ha agito come una lama calda nel burro, “ignorando” le proprietà di decorrelazione del nostro portafoglio.

Il Max Draw Down di oltre il 40% è calcolato sul capitale iniziale (che vale 1 su una curva di NAV):

(1.7 – 2.12) / 1 = 0.42 => -42%

L’aggregato mensile mostra una sofferenza apparentemente inferiore solo perchè su base mese le perdite sono decisamente più contenute (il max draw down è maturato tra il 20 di febbraio ed il 23 marzo 2020).

Fig.13: aggregato rendimenti percentuali mensili di un portafoglio equidistribuito su SPY, TLT e GLD dal 2007 ad oggi.

Sempre da FFN visualizziamo il nostro performance report:

Fig.14: metriche di un portafoglio equidistribuito su SPY, TLT e GLD dal 2007 ad oggi.

Due parole sui numeri che è possibile osservare: le metriche sono relative al rinvestimento dell’intero capitale cumulato fino a quel momento.Il Total Return del 221% si declina in un CAGR del 9% (Il CAGR, Compound Annual Growth Rate è il tasso annuo di crescita composto e è un indice che rappresenta il tasso di crescita di un certo valore in un dato arco di tempo) mediante la seguente formula:

(1 + CAGR) ^ Numero_Anni – 1 = Capitale_Finale => 1.0907 ^ 13.5 – 1 = 2.22

Total_Return = Capitale_Finale – Capitale_Iniziale => 3.22 – 1 = 2.22 

Sintetizzando stiamo parlando di una strategia molto poco costosa in termini di manutenzione (in fondo si prende posizione sui tre asset all’inizio dello storico e si monitora ogni mese l’andamento di profitti e ricorrezioni. Si può pensare di aggiungere un sistema di Performance Control che lenisca le fasi di ricorrezione, ma questo, come abbiamo visto nell’articolo “Un vaccino per il Draw Down“, porterebbe ad contestualmente ad una generale diminuzione dei profitti.

Cosa possiamo fare per migliorare ulteriormente i nostri rendimenti?

Partiamo da due obiettivi distint1: diminuire il rischio atteso o aumentare il rendimento atteso della strategia originale. 

A) Diminuzione del rischio atteso: per andare in questa direzione applichiamo un algoritmo rotazionalemensile ed investiamo il 33% del nostro capitale su ciascun asset soltanto se, su una finestra scorrevole di N giorni, abbiamo registrato un profitto. In caso contrario taglieremo quella particolare linea di investimento. Visioniamo i risultati nelle tavole seguenti: 

Fig.15: prima tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

E’ subito evidente come siamo andati nella direzione cercata, ma abbiamo bisogno di ulteriori conferme metriche. Il draw down si è generalmente contenuto, sia nei valori massimi che medi.

Fig.16: draw down associato alla prima tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

A seguire il consueto aggregato percentuale mensile:

Fig.17: aggregato rendimenti percentuali mensili associati alla prima tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

Quella ottenuta si dimostra essere una strategia sufficientemente regolare e arischio contenuto. A seguire qualche dettaglio metrico (sempre da FFN):

Fig.18: metriche associate alla prima tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

Siamo passati dal 222% al 198% di Total Return, da un CAGR del 9.07% ad 8.48%, ma soprattutto (obiettivo del nostro progetto) da un Max Draw Down del -19.16% al -9.57% (si osservino le aree 2008-2009 e 2020).

Per avere una visione dell’esposizione in atto per ciascun trigger di rotazione, possiamo osservare il numero di asset attivi per ciascun intervallo temporale in figura 19:

Fig.19: allocazione dinamica della prima tecnica rotazionale.

In rosso il numero medio di asset contemporaneamente investiti che porta al 66% del totale la nostra potenza di fuoco.

B) Aumento del rendimento atteso: per andare in questa direzione applichiamo il medesimo filtro dell’esempio precedente, ma questa volta allochiamo l’intero capitale sugli asset attivi (tecnica rotazionale a perimetro costante).

Fig.20: seconda tecnica rotazionale a perimetro costante su SPY, TLT e GLD dal 2007 ad oggi.

Siamo riusciti a sovraperformare in modo costante la strategia statica originaria, a costo di un minor contenimento del rischio atteso (come si può vedere dalla tavola 21):

Fig.21: draw down associato alla seconda tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi. 

Si noti come il draw down associato al capitale iniziale sia decisamente più profondo. Di seguito l’aggregato mensile:

Fig.22: aggregato rendimenti percentuali mensili associati alla seconda tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

Per chiudere vediamo le metriche associate a questa seconda strategia rotazionale:

Fig.23: metriche associate alla seconda tecnica rotazionale su SPY, TLT e GLD dal 2007 ad oggi.

Si noti come il draw down calcolato dinamicamente sulla curva in progressione registri lo stesso ordine di grandezza del caso statico (e non si tratta di un risultato da poco).


In conclusione in questo articolo abbiamo visto come sia possibile progettare una semplice strategia di asset allocation con un codice open source, ricorrendo a tre semplici ETF. A partire da questa prima strategia abbiamo applicato due sistemi di money management in competizione tra di loro, che lavorano con un algoritmo rotazionale mensile (massimo 12 interventi all’anno). Nel primo caso abbiamo ottenuto una strategia a rischio contenuto, nel secondo abbiamo sovraperformato i rendimenti.

Il fatto di aver ottenuto tutto questo con poche righe di codice è il vero valore che ci regala l’utilizzo di Python, che ha il grande pregio di permetterci di modellare anche strategie complesse con relativa semplicità. Non servono tool a pagamento di terze parti e nemmeno una laurea in ingegneria aerospaziale. Da non trascurare il fatto che oggi Python costituisce una competenza insostituibile per entrare nel mondo del lavoro anche in ambito finanziario. Se siete stati incuriositi da questa trattazione e desiderate investire su voi stessi e sulle vostre competenze (che non si fermino alla codifica di una piattaforma di trading, ma che vi consentano di essere indipendenti nell’analisi dei dati, nella progettazione di sistemi di trading e di investing, nella validazione, nei criteri di ottimizzazione dinalica e multiparametro, nelle tecniche di equity & performance control o nella progettazione di algoritmi rotazionali per l’asset allocation) allora il seguente percorso potrebbe fare al caso vostro: “Python Academy” (per fissare un colloquio gratuito con i docenti potete scrivere una email ad info@gandalfproject.com).

Giovanni Trombetta

Head of Research & Development
Gandalf Project

“Le informazioni del Sito non costituiscono sollecitazione al pubblico risparmio e non sono volte a promuovere alcuna forma di investimento o commercio, né a promuovere o collocare strumenti finanziari o servizi di investimento o prodotti/servizi bancari/finanziari.”

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 *