🚀 Dall’Intuizione all’Algoritmo: Come Ho Implementato Markowitz e Black-Litterman con il codice

💡 L’Intuizione Iniziale

Tutto è iniziato con una domanda apparentemente semplice: “Come posso costruire il portfolio perfetto?”. Ho voluto scrivere questo post per divulgare lavori che avevo già realizzato per me, stimolato dalla riunione del Prof. Pomante (Uniroma Sda Bocconi e Luiss) dove ho partecipato ieri (19.7.25), in Allianz Bank Fa, grazie Francesca Alberici e Domenico Lella.

Da anni studio i mercati finanziari e mi sono sempre affascinato le teorie di ottimizzazione di portfolio. Ma c’è una differenza abissale tra comprendere la teoria e implementarla praticamente. È come la differenza tra sapere che Einstein ha formulato E=mc² e costruire effettivamente un reattore nucleare.

💭 “La teoria senza pratica è sterile, la pratica senza teoria è cieca” – E qui entra in gioco Python, il ponte perfetto tra teoria finanziaria e implementazione concreta.

📚 I Giganti su cui Ho Costruito

Prima di sporcarmi le mani con il codice, ho voluto comprendere a fondo i due pilastri della teoria moderna di portfolio:

🎖️ Harry Markowitz (1952)

Il Pioniere che ha rivoluzionato la finanza con la teoria Media-Varianza. Ha dimostrato matematicamente che “non mettere tutte le uova nello stesso paniere” non è solo saggezza popolare, ma ottimalità matematica.

Il suo insights: Il rischio di un portfolio non è semplicemente la somma dei rischi individuali, ma dipende dalle correlazioni tra gli asset.

🧠 Black & Litterman (1990)

Gli Evoluzionisti che hanno risolto i problemi pratici di Markowitz. Hanno capito che i portfolio teoricamente “ottimi” spesso sono inutilizzabili nella realtà.

La loro genialata: Partire dall’equilibrio di mercato e permettere all’investitore di esprimere views specifiche con diversi livelli di confidenza.

🔬 Il Laboratorio Digitale

Ho deciso di creare un sistema che non fosse solo un esercizio accademico, ma uno strumento professionale per analizzare 18 ETF diversificati su multiple asset class:

# L'universo che ho scelto di analizzare
etf_universe = {
    # Azionari globali
    '^SPX': 'S&P 500',  # Il cuore del mercato USA
    'EWI': 'Italia',     # Il mio focus locale  
    'EEM': 'Emerging Markets',  # Il futuro della crescita
    
    # Obbligazioni (la stabilità)
    'AGG': 'US Aggregate Bonds',
    'SHY': 'Short Treasury',    # Liquidità sicura
    'BIL': 'T-Bills',          # Cash equivalents
    
    # Materie prime (la diversificazione)
    'GLD': 'Gold',             # L'assicurazione 
    'SLV': 'Silver',           # Il fratello minore
}
🎯 Perché proprio questi ETF? Ho voluto coprire tutte le principali asset class: azioni sviluppate e emergenti, obbligazioni di diverse durate, materie prime preziose. L’obiettivo era avere un universo abbastanza ampio da permettere vera diversificazione, ma non così vasto da rendere l’analisi ingestibile.

⚙️ L’Implementazione: Dal Concetto al Codice

🔧 Markowitz: L’Eleganza della Matematica Pura

Il modello di Markowitz è matematicamente bellissimo. È un problema di ottimizzazione convessa che cerca di massimizzare il rendimento per un dato livello di rischio:

def optimize_markowitz(self, target_risk):
    """
    Il cuore del modello: massimizzare μ'w soggetto a:
    - w'Σw ≤ σ² (vincolo di rischio)
    - Σw = 1 (investimento completo)
    - w ≥ 0 (no vendite allo scoperto)
    """
    objective = lambda weights: -np.dot(weights, self.mean_returns)
    
    constraints = [
        {'type': 'eq', 'fun': lambda w: np.sum(w) - 1},
        {'type': 'ineq', 'fun': lambda w: target_risk - portfolio_risk(w)}
    ]
    
    result = minimize(objective, initial_weights, 
                     constraints=constraints, bounds=bounds)
    
    return result.x if result.success else None
🧮 Il Fascino della Matematica: Ogni volta che eseguo questo codice, provo la stessa emozione di quando risolvo un’equazione complessa. C’è qualcosa di magico nel vedere come la matematica trasforma dati storici caotici in allocazioni ottimali precise.
🎯 Black-Litterman: L’Arte di Bilanciare Views e Mercato

Black-Litterman è più sofisticato. Non si limita a ottimizzare sui dati storici, ma integra l’intelligenza umana nel processo:

def apply_black_litterman(self, views):
    """
    La formula che cambia tutto:
    μ_BL = [(τΣ)⁻¹ + P'Ω⁻¹P]⁻¹[(τΣ)⁻¹π + P'Ω⁻¹Q]
    
    Dove:
    π = rendimenti di equilibrio (dal mercato)
    Q = le mie views specifiche  
    Ω = quanto sono sicuro delle mie views
    """
    
    # Costruisco la matrice delle views
    P = self.create_picking_matrix(views)
    Q = self.extract_view_returns(views)
    Omega = self.calculate_uncertainty_matrix(views)
    
    # La magia di Black-Litterman
    tau = 0.05  # Incertezza sui rendimenti di equilibrio
    bl_returns = self.calculate_bl_returns(P, Q, Omega, tau)
    
    return bl_returns

📊 I Risultati: Quando la Teoria Incontra la Realtà

Dopo mesi di sviluppo e test, i risultati hanno superato le mie aspettative. Ma soprattutto, hanno rivelato insight interessanti:

🎯 L’Insight Chiave: Black-Litterman genera rendimenti attesi leggermente inferiori, ma compensa con maggiore diversificazione e stabilità. È il classico trade-off qualità-quantità: preferiresti 12.4% con alta concentrazione o 11.8% ben diversificati?

🎭 Le Views: Dove l’Arte Incontra la Scienza

La parte più affascinante di Black-Litterman sono le “Views” – la possibilità di incorporare le proprie convinzioni nel modello matematico.

Ecco come ho testato alcune views durante lo sviluppo:

🇮🇹 View sull’Italia (EWI):
  • View: “Credo che l’Italia outperformerà del 3% grazie al PNRR”
  • Confidenza: 7/10
  • Risultato: Il sistema ha aumentato l’allocazione su EWI dal 2% al 15%
🏛️ View sui Treasury (SHY):
  • View: “I tassi non saliranno quanto previsto dal mercato”
  • Confidenza: 6/10
  • Risultato: Sovrappeso moderato sui bond a breve termine
💡 L’Eureka Moment: Ho capito che Black-Litterman non è solo un modello matematico, ma un framework per strutturare il pensiero. Ti costringe a quantificare le tue intuizioni e a essere onesto sui tuoi livelli di certezza.

🏗️ L’Architettura del Sistema

Il mio sistema finale è composto da tre moduli Python integrati:

# Portfolio Analyzer Pro - Architettura
├── markowitz_plus.py      # Implementazione Markowitz completa
├── blklitt01.py          # Modello Black-Litterman 
└── portfolio_analyzer_pro.py  # Sistema di confronto integrato

# Output generati
reports/
├── portfolio_comparison.xlsx    # Confronto diretto
├── detailed_analysis.xlsx      # Correlazioni e stabilità
└── storici_completi.xlsx       # Dati storici completi

Ogni modulo è stato progettato con modularità e riusabilità in mente. Posso facilmente:

  • 🔄 Aggiungere nuovi ETF all’universo
  • 📊 Modificare i parametri di rischio
  • 🎯 Testare diverse combinazioni di views
  • 📈 Analizzare periodi storici diversi
  • 💾 Esportare i risultati in formato professionale

🔮 Le Lezioni Apprese

1. 🎯 La Precisione delle Views È Tutto

Ho scoperto che in Black-Litterman, essere precisi sui livelli di confidenza è cruciale. Una view con confidenza 10/10 può stravolgere completamente il portfolio, mentre una 5/10 produce aggiustamenti sottili.

2. 📊 I Dati Parlano, Ma Vanno Interpretati

Markowitz può sembrare “migliore” perché genera rendimenti più alti, ma ignora la realtà implementativa. Black-Litterman sacrifica qualche punto percentuale per la stabilità – un trade-off che nella vita reale vale oro.

3. 🧮 La Matematica È Solo l’Inizio

Il vero valore non è nel modello perfetto, ma nella comprensione dei trade-off. Ogni scelta ha conseguenze: più rendimento = più rischio, più diversificazione = diluizione del potenziale.

🎓 La Riflessione Più Profonda: Questo progetto mi ha insegnato che la finanza quantitativa non è solo matematica applicata, ma filosofia formalizzata. Ogni formula nasconde una visione del mondo su come funzionano i mercati e come dovremmo investire.

🚀 Il Viaggio Continua

Implementare Markowitz e Black-Litterman in Python è stato solo l’inizio. Ho in mente diversi sviluppi futuri:

  • 🤖 ML-Enhanced Views: Usare machine learning per generare views automatiche
  • Rebalancing Dinamico: Sistema di aggiornamento periodico automatico
  • 💰 Transaction Costs: Incorporare i costi reali di implementazione
  • 📱 Dashboard Interattivo: Interfaccia web per l’analisi real-time
💭 La tecnologia evolve, i mercati cambiano, ma i principi fondamentali di diversificazione e ottimizzazione rimangono eterni. Il mio obiettivo è continuare a costruire strumenti che traducano questi principi in azioni concrete.
🎯 Per chi volesse approfondire invito a contattarmi. Il codice è pure Python e realizzato a titolo di studio e le conclusioni sono necessariamente semplificate e prendono come intervallo temporale 1 anno. Il modello attuale utilizza più prodotti e crea portafogli per i periodi 1,3,5,10 anni di mantenimento del portafoglio. Inoltre utilizzo il metodo Montecarlo per la definizione con un certo intervallo di confidenza dei valori attesi del portafoglio. Lavori che sto mettendo in piedi, essendo il sistema modulare:
🤖 ML/AI Come utilizzare machine learning e AI per migliorare i sistemi. Al prossimo articolo!

Perché alla fine, ogni grande investitore è semplicemente qualcuno che ha trasformato intuizioni in algoritmi e algoritmi in risultati.

Tags: #FinanzaQuantitativa #Python #Markowitz #BlackLitterman #PortfolioOptimization #ETF #Investing

Show Buttons
Hide Buttons
Translate »