Teoria moderna del portafoglio

Introduzione all'analisi di portafoglio in Python

Charlotte Werger

Data Scientist

Creare portafogli ottimali

Icona per strategia d’investimento

Introduzione all'analisi di portafoglio in Python

Cos’è l’ottimizzazione di portafoglio?

Incontra Harry Markowitz

Harry Markowitz

Introduzione all'analisi di portafoglio in Python

Il problema di ottimizzazione: trovare i pesi ottimali

$$ Problema di ottimizzazione di Markowitz

In parole povere:

  • Minimizza la varianza del portafoglio, con vincoli:
  • Il rendimento medio atteso è almeno un target
  • I pesi sommano al 100%
  • Almeno alcuni pesi sono positivi
Introduzione all'analisi di portafoglio in Python

Variare i target di rendimento porta alla Frontiera Efficiente

Grafico della frontiera efficiente

Introduzione all'analisi di portafoglio in Python

PyPortfolioOpt per l’ottimizzazione del portafoglio

from pypfopt.efficient_frontier import EfficientFrontier
from pypfopt import risk_models
from pypfopt import expected_returns
df=pd.read_csv('portfolio.csv')
df.head(2)
                XOM        RRC        BBY         MA        PFE       
date
2010-01-04  54.068794  51.300568  32.524055  22.062426  13.940202 
2010-01-05  54.279907  51.993038  33.349487  21.997149  13.741367
# Calcola rendimenti attesi annualizzati e covarianza campionaria
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
Introduzione all'analisi di portafoglio in Python

Ottieni Efficient Frontier e pesi del portafoglio

# Calcola rendimenti attesi annualizzati e rischio
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
# Ottieni l’Efficient Frontier
ef = EfficientFrontier(mu, Sigma)
# Seleziona un portafoglio ottimale
ef.max_sharpe()
Introduzione all'analisi di portafoglio in Python

Ottimizzazioni diverse

# Seleziona il portafoglio a Sharpe massimo
ef.max_sharpe()
# Seleziona un rendimento per un rischio target
ef.efficient_risk(2.3)
# Seleziona il rischio minimo per un rendimento target
ef.efficient_return(1.5)
Introduzione all'analisi di portafoglio in Python

Calcola rischio e performance del portafoglio

# Ottieni le metriche di performance
ef.portfolio_performance(verbose=True, risk_free_rate = 0.01)
Rendimento annuo atteso: 21,3%
Volatilità annua: 19,5%
Rapporto di Sharpe: 0,98
Introduzione all'analisi di portafoglio in Python

Ottimizziamo un portafoglio!

Introduzione all'analisi di portafoglio in Python

Preparing Video For Download...