Théorie moderne du portefeuille

Gestion quantitative des risques en Python

Jamsheed Shorish

Computational Economist

Le compromis risque-rendement

  • Facteurs de risque : sources d'incertitude qui influencent le rendement
  • Intuition : plus d'incertitude (plus de risque) compensée par un rendement plus élevé
  • Impossible de garantir un rendement : il faut une mesure du rendement attendu
    • moyenne historique des rendements : substitut du rendement futur attendu
Gestion quantitative des risques en Python

Tolérance au risque de l'investisseur

  • Sondage d'investisseurs : rendement minimal exigé pour un niveau de risque donné ?
  • Chaque réponse crée un point « données » de profil (risque, rendement)
  • On fait varier le risque ⇒ ensemble de points (risque, rendement)
  • Tolérance au risque de l'investisseur : définit une relation chiffrée entre risque et rendement
Gestion quantitative des risques en Python

Choisir les pondérations du portefeuille

  • Faire varier les pondérations du portefeuille donné ⇒ crée des couples (risque, rendement)
  • Changer les pondérations = début de la gestion du risque !
  • Objectif : modifier les pondérations pour maximiser le rendement attendu, pour un niveau de risque donné
    • Équivalent : minimiser le risque, pour un niveau de rendement attendu
  • Changer les pondérations = ajuster l'exposition au risque de l'investisseur
Gestion quantitative des risques en Python

Théorie moderne du portefeuille

  • Portefeuille efficient : pondérations qui génèrent le rendement attendu le plus élevé pour un risque donné
  • Modern Portfolio Theory (MPT), 1952
    • H. M. Markowitz (prix Nobel 1990)
  • Le vecteur de pondérations efficient $w^\star$ résout :

Équations d'optimisation pour trouver le portefeuille efficient

Gestion quantitative des risques en Python

La frontière efficiente

  • Calculer plusieurs portefeuilles efficients pour différents niveaux de risque
  • Frontière efficiente : lieu des couples (risque, rendement) issus des portefeuilles efficients
  • Bibliothèque PyPortfolioOpt : outils d'optimisation pour la MPT
    • Classe EfficientFrontier : génère un portefeuille optimal à la fois
    • Classe Constrained Line Algorithm (CLA) : génère toute la frontière efficiente
      • Exige la matrice de covariance des rendements
      • Exige un substitut du rendement futur attendu : moyenne des rendements historiques
Gestion quantitative des risques en Python

Portefeuille de banque d'investissement 2005 - 2010

  • Rendements attendus : données historiques
  • Matrice de covariance : Covariance Shrinkage améliore l'estimation
  • Objet Constrained Line Algorithm CLA
  • Portefeuille à variance minimale : cla.min_volatility()
  • Frontière 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()
Gestion quantitative des risques en Python

Visualiser la frontière efficiente

  • Nuage de points des couples (vol, rend)

Graphique de la frontière efficiente tracée comme une série de couples (risque, rendement)

Gestion quantitative des risques en Python

Visualiser la frontière efficiente

  • Nuage de points des couples (vol, rend)
  • Portefeuille à variance minimale : plus petite volatilité de tous les portefeuilles efficients possibles

Le portefeuille à variance minimale mis en évidence sur le graphique de la frontière efficiente

Gestion quantitative des risques en Python

Visualiser la frontière efficiente

  • Nuage de points des couples (vol, rend)
  • Portefeuille à variance minimale : plus petite volatilité de tous les portefeuilles efficients possibles
  • Tolérance au risque accrue : se déplacer le long de la frontière

Déplacement le long de la frontière efficiente représenté par une flèche allant vers plus de risque et plus de rendement

Gestion quantitative des risques en Python

Passons à la pratique !

Gestion quantitative des risques en Python

Preparing Video For Download...