Teoria moderna del portafoglio

Gestione quantitativa del rischio in Python

Jamsheed Shorish

Computational Economist

Il trade-off rischio-rendimento

  • Fattori di rischio: fonti di incertezza che influenzano il rendimento
  • Intuitivamente: più incertezza (più rischio) compensata da più rendimento
  • Non si può garantire il rendimento: serve una misura di rendimento atteso
    • rendimento storico medio: proxy del rendimento futuro atteso
Gestione quantitativa del rischio in Python

Propensione al rischio dell'investitore

  • Survey investitori: rendimento minimo richiesto per un dato livello di rischio?
  • La risposta crea un punto dati (rischio, rendimento) del profilo di rischio
  • Varia il livello di rischio => insieme di punti (rischio, rendimento)
  • Propensione al rischio dell'investitore: definisce un rapporto quantificato tra rischio e rendimento
Gestione quantitativa del rischio in Python

Scelta dei pesi di portafoglio

  • Varia i pesi di portafoglio di un portafoglio dato => ottieni un insieme di coppie (rischio, rendimento)
  • Cambiare i pesi = l'inizio del risk management!
  • Obiettivo: cambiare i pesi per massimizzare il rendimento atteso, dato il rischio
    • Equivalentemente: minimizzare il rischio, dato il rendimento atteso
  • Cambiare i pesi = regolare l'esposizione al rischio dell'investitore
Gestione quantitativa del rischio in Python

Teoria moderna del portafoglio

  • Portafoglio efficiente: pesi che generano il massimo rendimento atteso per un dato rischio
  • Modern Portfolio Theory (MPT), 1952
    • H. M. Markowitz (Nobel 1990)
  • Il vettore di pesi efficienti $w^\star$ risolve:

Equazioni del problema di ottimizzazione per trovare il portafoglio efficiente

Gestione quantitativa del rischio in Python

La frontiera efficiente

  • Calcola molti portafogli efficienti per diversi livelli di rischio
  • Frontiera efficiente: luogo delle coppie (rischio, rendimento) generate dai portafogli efficienti
  • Libreria PyPortfolioOpt: strumenti ottimizzati per MPT
    • Classe EfficientFrontier: genera un portafoglio ottimale alla volta
    • Classe Constrained Line Algorithm (CLA): genera l'intera frontiera efficiente
      • Richiede la matrice di covarianza dei rendimenti
      • Richiede una proxy dei rendimenti futuri attesi: rendimenti storici medi
Gestione quantitativa del rischio in Python

Portafoglio di banca d'investimento 2005 - 2010

  • Rendimenti attesi: dati storici
  • Matrice di covarianza: Covariance Shrinkage migliora l'efficienza della stima
  • Oggetto Constrained Line Algorithm CLA
  • Portafoglio a varianza minima: cla.min_volatility()
  • Frontiera efficiente: cla.efficient_frontier()

 

expected_returns = mean_historical_return(prices)

efficient_cov = CovarianceShrinkage(prices).ledoit_wolf()
cla = CLA(expected_returns, efficient_cov)
minimum_variance = cla.min_volatility()
(ret, vol, weights) = cla.efficient_frontier()
Gestione quantitativa del rischio in Python

Visualizzare la frontiera efficiente

  • Scatter plot di coppie (vol, ret)

Grafico della frontiera efficiente come serie di coppie (rischio, rendimento)

Gestione quantitativa del rischio in Python

Visualizzare la frontiera efficiente

  • Scatter plot di coppie (vol, ret)
  • Portafoglio a varianza minima: volatilità più bassa tra tutti i portafogli efficienti

Il portafoglio a varianza minima evidenziato sul grafico della frontiera efficiente

Gestione quantitativa del rischio in Python

Visualizzare la frontiera efficiente

  • Scatter plot di coppie (vol, ret)
  • Portafoglio a varianza minima: volatilità più bassa tra tutti i portafogli efficienti
  • Aumentando la propensione al rischio: ci si muove lungo la frontiera

Spostamento lungo la frontiera efficiente rappresentato da una freccia verso più rischio e più rendimento

Gestione quantitativa del rischio in Python

Esercitiamoci!

Gestione quantitativa del rischio in Python

Preparing Video For Download...