Strategie di allocazione statica Buy and Hold ribilanciate periodicamente

Strategie di allocazione statica “lazy portfolio” ribilanciate periodicamente

Sommario

Per i trader sistematici che stanno considerando un orizzonte di investimento a lungo termine, una delle forme più comuni di un portafoglio prevede l’allocazione statica del capitale con diverse percentuali tra un paniere di classi di asset diversificati, che viene periodicamente ribilanciato in modo da mantere costanti le percentuali di allocazione. Questi portafogli sono spesso definiti “lazy portfolio” perchè il loro ribilanciamento è “statico”, cioè mantiene constati le percentuali iniziali di diversificazione tra gli asset.

Uno dei portafogli più popolari di questo tipo è il portafoglio 60/40 tra azionario e obbligazionario USA, spesso implementato tramite grandi ETF su indici azionari e obbligazionari, come SPY e AGG .

Un altro portfolio famoso in questo settore è l’All Weather Portfolio di Ray Dalio (fondatore di Bridgewater Associates). L’approccio di questo portafoglio è di prevedere una maggiore allocazione verso le obbligazioni, rispetto alle azioni e alle materie prime. Lo scopo è quello di “pesare il rischio” del portafoglio aumentando l’allocazione in asset a bassa volatilità.

L’implementazione  di questo portafoglio per gli investitori retail prevede la selezione di ETF per rappresentare le principali classi di asset (azioni, obbligazioni a lungo e medio termine, materie prime e oro). Una selezione di ETF che potrebbero essere appropriati per questo tipo di portafoglio può include VTITLTIEIGLD e GSG [1].

Data la diffusione di questo tipo di portafogli di investimento, può essere utile descrivere come DataInvestor permette una semplice e rapida simulazione.

Con la recente versione di DataInvestor abbiamo incluso un utile script a riga di comando che può eseguire facilmente il backtest di strategie con ribilanciamento periodo del tipo “buy & hold”. Il codice sorgente dello script può essere scaricato dal repository github.

Nelle seguenti paragrafi descriviamo come  usare per eseguire simulazioni personalizzate.

Simulazione di strategie “Lazy Portfolio” con  DataInvestor

Innanzitutto, dobbiamo installare DataInvestor, il nostro framework open-source per effettuare backtest basati sugli eventi. Il framework è disponibile nel seguente repository di github:

github.com/datatrading-info/DataInvestor

Per procedere con l’installazione ti consiglio di seguire questa guida.

Dopo aver effettuato il download e l’installazione del framework, possiamo scegliere una specifica directory dove dobbiamo posizionare i file CSV con le serie storiche degli ETF e creare un file config.yaml nella stessa directory dove eseguiamo lo script.

Il file di configurazione contiene le indicazioni dove DataInvestor trova i dati in input (CSV_DATA_DIR) e dove salvare le statistiche prodotte (OUTPUT_DIR):

				
					---
CSV_DATA_DIR: data
OUTPUT_DIR: out
				
			

Ora siamo pronti per iniziare a eseguire un backtest per un esempio di “lazy portfolio”.

Simulazione del portfolio All Weather

Descrivamo ora come effettuare un backtest dell’All Weather Portfolio di Ray Dalio per la selezione dei cinque ETF sopra descritti.

Usiamo una specifica allocazione statica  descritta da Ray Dalio [1] e riportata nella seguente tabella:

TickerDescrizioneAllocazione
VTIMercato azionario totale degli Stati Uniti30%
TLTObbligazioni statunitensi a lungo termine40%
IEIObbligazioni USA a medio termine15%
GLDOro7,5%
GGSCommodities7,5%

Assicuriamoci di scaricare da Yahoo Finance i dati storici per ciascun ETF. Ad esempio, i dati per VTI possono essere trovati qui .

Nota: è inoltre necessario scaricare i dati storici sia per SPY che per AGG al fine di creare un portafoglio 60/40 di benchmark.

Posizioniamo i file CSV scaricati nella directory specificata in config.yaml con il parametro CSV_DATA_DIR.  Assicuriamoci che l’ambiente virtuale Python (o ambiente Anaconda) sia attivo e quindi eseguiamo il seguente comando:

				
					python static_backtest.py --start-date="2007-01-31" --allocations=VTI:0.3,TLT:0.4,IEI:0.15,GLD:0.075,GSG:0.075 --title="All Weather Portfolio" --id="all-weather-portfolio" --tearsheet
				
			

Il comando indica al backtest di iniziare il 31 gennaio 2007 e di terminare con gli ultimi dati disponibili all’interno dei file CSV.

Le allocazioni percentuali sono specificate come un elenco di ticker e valori percentuali compresi tra 0,0 e 1,0, separati da virgole. Viene inoltre fornito il titolo della simulazione e l’identificatore del file contenente le statistiche JSON che sono calcolate e memorizzate al completamento del backtest.

Una volta completato il backtest, dovrebbe essere visibile un report, simile al seguente:

trading-algoritmico-datainvestor_static_allocation_all_weather_tearsheet

Per creare i propri portafogli su misura dobbiamo modificare il parametro --allocations dove si specifica l’elenco dei ticker e le loro allocazioni percentuali in un formato simile al Portafoglio All Weather precedente.

In realtà non abbiamo bisogno di garantire che le allocazioni siano pari al 100% poiché il meccanismo di costruzione del portafoglio predefinito in DataInvestor ridimensionerà i valori di conseguenza. È tuttavia necessario garantire che tutti i pesi siano positivi. DataInvestor non supporta ancora lo shorting , ma stiamo lavorando per introdurlo nelle prossime versioni.

In questo modo è possibile simulare rapidamente molti backtest in stile ‘buy and hold’ e quindi confrontare molti approcci di investimento a lungo termine con i dati storici  di un paniere di ETF.

Dettagli del backtest

Forniamo ora maggiori dettagli sulle statistiche restituite dal backtest:

  • Lo script sta effettivamente creando due backtest: uno per la strategia primaria e uno per il benchmark 60/40.
  • Ogni backtest viene ribilanciato alla fine di ogni mese con l’esecuzione istantanea  di un ordine a mercato che viene effettuata all’apertura del primo giorno utile del mese successivo.
  • L’1% del capitale è mantenuto cash durante entrambi i backtest in modo da evitare che gli ordini target superino la liquidità corrente a causa di significative variazioni di prezzo overnight.
  • Lo script fa uso di una libreria Python chiamata click per analizzare direttamente gli argomenti della riga di comando.

Riepilogo

Abbiamo descritto come usare un utile script di supporto per eseguire backtest su portafogli “buy & hold” allocati in modo statico con ribilanciamenti mensili, comunemente implementati tramite ETF a basso costo.

Lo script è progettato per essere facilmente modificato in modo da poter applicare ribilanciamenti alternativi, in ordine di pesi degli asset e frequenza giornalieria. DataInvestor gestisce il ribilanciamento giornaliero e settimanale, come implementato in questo codice.

Con qualche modifica è possibile confrontare direttamente due strategie ‘buy & hold’, modificando la strategia di benchmark utilizzata all’interno dello script.

Se hai domande sullo script o in generale su DataInvestor, non esitare a inviarci un’e-mail all’indirizzo .

Riferimenti

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...

Scroll to Top