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é du risque.

Pour calculer la version de 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.

Deux points usuels sont appelés portefeuilles de Markowitz :

  • MSR : portefeuille au Max Sharpe Ratio
  • GMV : portefeuille à Volatilité Minimale Globale

Introduction à la gestion du risque de portefeuille en Python

Choisir un portefeuille

Comment choisir le meilleur portefeuille ?

  • Visez un portefeuille sur le bord de la frontière efficiente
  • Rendement potentiellement plus élevé si vous acceptez 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 performances passées ne préjugent pas des rendements futurs

Même si un portefeuille au Max Sharpe Ratio peut sembler attractif, en pratique, les rendements sont très difficiles à prévoir.

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...