Théorie moderne du portefeuille

Introduction à l’analyse de portefeuille en Python

Charlotte Werger

Data Scientist

Créer des portefeuilles optimaux

Icône pour stratégie d’investissement

Introduction à l’analyse de portefeuille en Python

Qu’est-ce que l’optimisation de portefeuille ?

Voici Harry Markowitz

Harry Markowitz

Introduction à l’analyse de portefeuille en Python

Le problème d’optimisation : trouver les pondérations optimales

$$ Problème d’optimisation de Markowitz

En mots :

  • Minimiser la variance du portefeuille, sous contraintes :
  • Le rendement moyen attendu est au moins un seuil cible
  • Les pondérations somment à 100 %
  • Au moins certaines pondérations sont positives
Introduction à l’analyse de portefeuille en Python

Des rendements cibles variables tracent la frontière efficiente

Graphe de la frontière efficiente

Introduction à l’analyse de portefeuille en Python

PyPortfolioOpt pour l’optimisation de portefeuille

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
# Calculer les rendements annualisés attendus et la covariance empirique
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
Introduction à l’analyse de portefeuille en Python

Frontière efficiente et pondérations du portefeuille

# Calculer les rendements annualisés attendus et le risque
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
# Obtenir la frontière efficiente
ef = EfficientFrontier(mu, Sigma)
# Sélectionner un portefeuille optimal
ef.max_sharpe()
Introduction à l’analyse de portefeuille en Python

Optimisations possibles

# Sélectionner le portefeuille à Sharpe maximal
ef.max_sharpe()
# Fixer un rendement cible pour un risque donné 
ef.efficient_risk(2.3)
# Minimiser le risque pour un rendement cible
ef.efficient_return(1.5)
Introduction à l’analyse de portefeuille en Python

Calculer le risque et la performance du portefeuille

# Obtenir les indicateurs de performance
ef.portfolio_performance(verbose=True, risk_free_rate = 0.01)
Rendement annuel attendu : 21,3 %
Volatilité annuelle : 19,5 %
Ratio de Sharpe : 0,98
Introduction à l’analyse de portefeuille en Python

Optimisons un portefeuille !

Introduction à l’analyse de portefeuille en Python

Preparing Video For Download...