Portefeuilles de Markowitz

Introduction à la gestion du risque de portefeuille en Python

Dakota Wixom

Quantitative Analyst | QuantCourse.com

100 000 portefeuilles générés aléatoirement

Introduction à la gestion du risque de portefeuille en Python

Ratio de Sharpe

Le ratio de Sharpe mesure le rendement ajusté au risque.

Pour calculer la version 1966 du ratio de Sharpe :

$$ S = \frac{ R_a - r_f }{\sigma_a} $$

  • S : ratio de Sharpe
  • $ R_a $ : rendement de l'actif
  • $ r_f $ : taux sans risque
  • $ \sigma_a $ : volatilité de l'actif
Introduction à la gestion du risque de portefeuille en Python

La frontière efficiente

Introduction à la gestion du risque de portefeuille en Python

Les portefeuilles de Markowitz

Tout point sur la frontière efficiente est un portefeuille optimal.

Ces deux points courants sont les portefeuilles de Markowitz :

  • MSR : portefeuille à Max Sharpe Ratio
  • GMV : portefeuille à Global Minimum Volatility

Introduction à la gestion du risque de portefeuille en Python

Choisir un portefeuille

Comment choisir le meilleur portefeuille ?

  • Choisir un portefeuille sur le bord de la frontière efficiente
  • Un rendement plus élevé exige de tolérer plus de risque
Introduction à la gestion du risque de portefeuille en Python

Sélectionner le MSR en Python

En supposant un DataFrame df de portefeuilles aléatoires avec les colonnes Volatility et Returns :

numstocks = 5
risk_free = 0
df["Sharpe"] = (df["Returns"] - risk_free) / df["Volatility"]
MSR = df.sort_values(by=['Sharpe'], ascending=False)
MSR_weights = MSR.iloc[0, 0:numstocks]
np.array(MSR_weights)
array([0.15, 0.35, 0.10, 0.15, 0.25])
Introduction à la gestion du risque de portefeuille en Python

Les rendements passés ne garantissent pas les rendements futurs

Même si un portefeuille à Max Sharpe Ratio semble attrayant, en pratique, il est très difficile de prévoir les rendements.

Introduction à la gestion du risque de portefeuille en Python

Sélectionner le GMV en Python

En supposant un DataFrame df de portefeuilles aléatoires avec les colonnes Volatility et Returns :

numstocks = 5
GMV = df.sort_values(by=['Volatility'], ascending=True)
GMV_weights = GMV.iloc[0, 0:numstocks]
np.array(GMV_weights)
array([0.25, 0.15, 0.35, 0.15, 0.10])
Introduction à la gestion du risque de portefeuille en Python

Passons à la pratique !

Introduction à la gestion du risque de portefeuille en Python

Preparing Video For Download...