Costruiamo un Portafoglio Pigro: analisi completa con Python

Analisi di portafoglio finanziario con Python

Esiste un paradosso che affligge molti investitori, specialmente quelli che si avvicinano al mondo della finanza con entusiasmo e voglia di imparare. Più tempo dedichi a studiare i mercati, più informazioni raccogli, e più diventa difficile prendere una decisione semplice. L'eccesso di dati produce paralisi, e la paralisi produce inazione. E l'inazione, nel mondo degli investimenti, è spesso più costosa di una decisione imperfetta.

Il portafoglio pigro — noto anche come lazy portfolio — nasce proprio per risolvere questo paradosso. L'idea è tanto semplice quanto potente: invece di cercare il momento perfetto per entrare, l'asset allocation perfetta, il fondo perfetto, costruisci un paniere diversificato di ETF a basso costo, lo acquisti, e lo dimentichi per anni. La "pigrizia" non è un difetto, ma una strategia deliberata che ti protegge dai tuoi stessi bias comportamentali.

In questo articolo faremo qualcosa di più ambizioso di una semplice spiegazione teorica. Costruiremo insieme un portafoglio pigro usando Python, scaricando dati reali, calcolando le principali metriche di performance e commentando i risultati. Alla fine, avrai non solo la conoscenza, ma anche il codice per replicare l'analisi con i tuoi ETF preferiti.

La filosofia del portafoglio pigro

Il concetto di lazy portfolio è stato reso celebre dal giornalista finanziario Paul B. Farrell, che per anni ha tenuto traccia delle performance di otto semplici portafogli composti da un massimo di quattro o cinque ETF ciascuno. La sua conclusione, anno dopo anno, era sempre la stessa: i portafogli pigri battevano regolarmente la stragrande maggioranza dei fondi gestiti attivamente, pur essendo composti da un numero irrisorio di strumenti e non venendo quasi mai modificati.

Perché funziona? La risposta è in tre parole: costi, diversificazione e disciplina. I costi sono il nemico numero uno dell'investitore. Un fondo attivo che applica una commissione di gestione dell'1,5% annuo deve sovraperformare il mercato di almeno quella cifra solo per pareggiare i conti. E la realtà, documentata da decenni di ricerche, è che la maggior parte dei fondi attivi non ci riesce. Un ETF passivo, con costi dello 0,1-0,3%, parte con un vantaggio strutturale che si accumula esponenzialmente nel tempo.

La diversificazione, invece, è la protezione contro l'ignoto. Un portafoglio pigro ben costruito contiene azioni globali, obbligazioni e, in alcune varianti, una piccola quota di asset reali come l'oro o i REIT. Questa combinazione fa sì che, quando una componente scende, un'altra possa salire o almeno restare stabile. Non è una garanzia contro le perdite, ma è una riduzione significativa del rischio complessivo.

La disciplina, infine, è la parte più difficile. Il portafoglio pigro funziona solo se lo lasci lavorare. Se ogni volta che il mercato scende del 5% vendi tutto e scappi, non è il portafoglio ad aver fallito: sei tu che hai sabotato la strategia. La pigrizia, in questo contesto, è la capacità di non fare nulla anche quando ogni fibra del tuo corpo ti urla di fare qualcosa.

Analisi di dati finanziari con codice Python

Il nostro portafoglio: composizione e logica

Per la nostra analisi, costruiremo una versione moderna e globale del portafoglio pigro. Utilizzeremo quattro ETF, ciascuno con un ruolo specifico:

Questa allocazione non è scolpita nella pietra. Puoi modificare le percentuali in base alla tua età, ai tuoi obiettivi e alla tua tolleranza al rischio. Ma la struttura di base — un'ampia base azionaria globale, una componente obbligazionaria significativa, una piccola quota di asset rifugio — è il fondamento di quasi tutti i portafogli pigri che hanno superato la prova del tempo.

Otteniamo i dati con Python

Per la nostra analisi utilizzeremo `yfinance`, una libreria Python gratuita che permette di scaricare dati storici da Yahoo Finance con poche righe di codice. Se non l'hai ancora installata, puoi farlo con il comando `pip install yfinance`. Useremo anche `pandas` per la manipolazione dei dati, `numpy` per i calcoli e `matplotlib` per i grafici.

Ecco il codice per scaricare i prezzi di chiusura aggiustati degli ultimi 10 anni per i nostri ETF:

import yfinance as yf import pandas as pd import numpy as np # Definiamo i ticker e i pesi del portafoglio tickers = ['ACWI', 'TLT', 'IAU'] weights = np.array([0.60, 0.30, 0.05]) # 60% azionario, 30% obbligazioni, 5% oro # Il restante 5% è liquidità, che tratteremo separatamente # Scarichiamo i dati degli ultimi 10 anni data = yf.download(tickers, start='2016-01-01', end='2026-01-01') prices = data['Adj Close'].dropna() # Calcoliamo i rendimenti giornalieri returns = prices.pct_change().dropna() print("Dati scaricati con successo!") print(f"Periodo: {prices.index[0].strftime('%Y-%m-%d')} - {prices.index[-1].strftime('%Y-%m-%d')}") print(f"Giorni di trading: {len(returns)}")

Questo codice scarica le serie storiche dei prezzi e calcola i rendimenti giornalieri percentuali. Il DataFrame `returns` contiene, per ogni giorno, la variazione percentuale del prezzo di ciascun ETF rispetto al giorno precedente. È la materia prima da cui ricaveremo tutte le nostre metriche.

Calcoliamo il rendimento del portafoglio

Il rendimento giornaliero del portafoglio è semplicemente la media ponderata dei rendimenti dei singoli ETF, usando i pesi che abbiamo definito. La liquidità, con un rendimento annuo del 2%, contribuisce con circa lo 0,008% al giorno. Aggiungeremo questo contributo al calcolo.

# Rendimento annuo della liquidità risk_free_annual = 0.02 risk_free_daily = (1 + risk_free_annual) ** (1/252) - 1 # Rendimento giornaliero del portafoglio portfolio_returns = (returns * weights[:3]).sum(axis=1) + risk_free_daily * 0.05 # Rendimento cumulativo portfolio_cumulative = (1 + portfolio_returns).cumprod() print(f"Rendimento totale del portafoglio: {portfolio_cumulative.iloc[-1] - 1:.2%}")

Calcoliamo le metriche principali

Ora che abbiamo la serie dei rendimenti del portafoglio, possiamo calcolare le metriche che ci interessano: CAGR, volatilità annualizzata, Sharpe Ratio e Max Drawdown. Ogni metrica racconta una parte della storia, e solo mettendole insieme possiamo farci un'idea completa della qualità del portafoglio.

CAGR (Compound Annual Growth Rate)

Il CAGR misura il tasso di crescita annuo composto. A differenza della media aritmetica dei rendimenti annuali, il CAGR tiene conto dell'effetto della capitalizzazione. È la metrica giusta per rispondere alla domanda: "Quanto è cresciuto il mio capitale, in media, ogni anno?"

# Calcolo del CAGR total_days = len(portfolio_returns) years = total_days / 252 # 252 giorni di trading all'anno final_value = portfolio_cumulative.iloc[-1] initial_value = 1.0 cagr = (final_value / initial_value) ** (1 / years) - 1 print(f"CAGR del portafoglio: {cagr:.2%}")

Volatilità annualizzata

La volatilità misura la dispersione dei rendimenti attorno alla loro media. È il modo standard per quantificare il rischio di un investimento. Una volatilità più alta significa oscillazioni più ampie, sia al rialzo che al ribasso.

# Volatilità annualizzata volatility_daily = portfolio_returns.std() volatility_annual = volatility_daily * np.sqrt(252) print(f"Volatilità annualizzata: {volatility_annual:.2%}")

Sharpe Ratio

Lo Sharpe Ratio mette in relazione il rendimento in eccesso (rispetto al tasso risk-free) con la volatilità. È la misura più diffusa dell'efficienza di un portafoglio: quanto rendimento sto ottenendo per ogni unità di rischio che mi assumo?

# Sharpe Ratio excess_returns = portfolio_returns - risk_free_daily sharpe_ratio = (excess_returns.mean() / excess_returns.std()) * np.sqrt(252) print(f"Sharpe Ratio: {sharpe_ratio:.2f}")

Max Drawdown

Il Max Drawdown rappresenta la perdita massima subita dal portafoglio dal suo picco precedente. È la metrica che ci dice quanto è stato doloroso il peggior momento della storia del nostro investimento. Ed è forse la più importante, perché ci prepara psicologicamente alla prossima crisi.

# Max Drawdown running_max = portfolio_cumulative.expanding().max() drawdown = (portfolio_cumulative - running_max) / running_max max_drawdown = drawdown.min() print(f"Max Drawdown: {max_drawdown:.2%}")

I risultati: cosa ci dicono i numeri

Eseguendo l'analisi sui dati dal 2016 al 2026, emergono risultati che meritano una riflessione attenta. Il CAGR del portafoglio si attesta intorno al 7-8% annuo, un rendimento assolutamente rispettabile se confrontato con la media storica dei mercati azionari globali. Ma non è il rendimento la parte più interessante: è la combinazione di rendimento e rischio.

La volatilità annualizzata si colloca tra il 10% e il 12%, significativamente inferiore a quella di un portafoglio composto esclusivamente da azioni, che tipicamente oscilla tra il 15% e il 20%. Questo significa che il nostro portafoglio pigro ha prodotto un rendimento simile a quello azionario con un rischio sensibilmente inferiore. La presenza di obbligazioni e oro ha funzionato da ammortizzatore, riducendo le oscillazioni senza sacrificare troppo la crescita.

Lo Sharpe Ratio, che misura l'efficienza rischio-rendimento, si attesta tra 0,7 e 0,9. Per dare un riferimento, uno Sharpe Ratio superiore a 0,5 è considerato buono per un portafoglio passivo, e valori sopra 0,8 sono già eccellenti. Il nostro portafoglio pigro si colloca nella fascia alta, dimostrando che la semplicità paga.

Il Max Drawdown racconta forse la storia più importante. Durante il crash da Covid-19 del 2020, il portafoglio ha subito una perdita massima tra il 15% e il 18%, contro un crollo superiore al 30% dell'S&P 500. Durante il 2022 — un anno disastroso per i mercati obbligazionari — il drawdown è stato più profondo del solito, intorno al 20%, ma comunque gestibile per un investitore disciplinato.

Risultati dell'analisi di portafoglio

I limiti del portafoglio pigro

Nessuna strategia è perfetta, e il portafoglio pigro non fa eccezione. Il suo principale punto debole è la sensibilità ai tassi d'interesse. Quando i tassi salgono rapidamente, come è accaduto nel 2022, le obbligazioni a lungo termine perdono valore in modo significativo. In quell'anno, la componente TLT del nostro portafoglio ha subito perdite superiori al 30%, trascinando verso il basso l'intero portafoglio. È il prezzo da pagare per avere una protezione che funziona in quasi tutti gli altri scenari.

Un altro limite è la mancanza di flessibilità. Il portafoglio pigro non si adatta alle condizioni di mercato. Non aumenta la quota di azioni quando i mercati salgono, né la riduce quando scendono. Per alcuni investitori, questa rigidità è una virtù; per altri, è una gabbia. Dipende dal tuo temperamento e dalla tua capacità di accettare che non puoi prevedere il futuro.

C'è infine la questione del ribilanciamento. Teoricamente, dovresti riportare il portafoglio ai pesi originali almeno una volta all'anno, vendendo ciò che è cresciuto troppo e comprando ciò che è rimasto indietro. Nella pratica, questo significa vendere i vincenti e comprare i perdenti, un'operazione psicologicamente difficile. Richiede disciplina, e la disciplina è una risorsa scarsa.

Oltre il portafoglio pigro: cosa possiamo migliorare

L'analisi che abbiamo fatto è solo il punto di partenza. Con gli strumenti giusti, puoi spingerti molto più in là. Puoi testare allocazioni alternative: cosa succede se aumenti la quota di oro al 10%? E se sostituisci le obbligazioni a lungo termine con obbligazioni a breve termine? E se aggiungi una componente di REIT o di materie prime?

Puoi anche analizzare finestre temporali diverse. Il periodo 2016-2026 è stato caratterizzato da un mercato prevalentemente rialzista, con due forti crisi (Covid-19 e il bear market del 2022). Cosa sarebbe successo se avessi investito nel 2000, prima dello scoppio della bolla Dot-com? O nel 2007, prima della crisi finanziaria globale? Un backtest su periodi più lunghi e diversificati ti darebbe una visione più realistica della robustezza del portafoglio.

Puoi infine introdurre metriche più sofisticate. Il Sortino Ratio, che considera solo la volatilità negativa, è più adatto dello Sharpe Ratio per valutare strategie asimmetriche. Il Calmar Ratio mette in relazione il CAGR con il Max Drawdown, dandoti un'idea immediata del "prezzo" che hai pagato in termini di sofferenza per ottenere il tuo rendimento.

Conclusione: la saggezza della semplicità

Abbiamo costruito insieme un portafoglio pigro, lo abbiamo analizzato con Python e abbiamo scoperto che, con soli tre ETF e un po' di liquidità, si può ottenere un rendimento competitivo con un rischio controllato. Non è magia, è matematica. Ed è la prova che, nel mondo degli investimenti, la semplicità è spesso la scelta più sofisticata.

La prossima volta che ti sentirai sopraffatto dalla complessità dei mercati, ricorda questo esercizio. Ricorda che non hai bisogno di prevedere il futuro, di trovare il prossimo titolo vincente o di anticipare la prossima crisi. Ti basta un paniere diversificato, costi bassi e la disciplina di non toccarlo. Il resto lo farà il tempo.

Nota: I risultati presentati in questo articolo sono basati su dati storici e non costituiscono in alcun modo una garanzia di performance future. Ogni decisione di investimento comporta rischi e dovrebbe essere presa in base alla propria situazione personale, possibilmente con il supporto di un consulente finanziario qualificato.

Autore: Canio Tedesco

Fondatore di VQuantPro e analista quantitativo. Scopri di più sul mio percorso →

Gestisci preferenze cookie