Simulation historique et de Monte Carlo

Gestion quantitative des risques en Python

Jamsheed Shorish

Computational Economist

Simulation historique

  • Aucune classe de distributions adéquate ?
  • Simulation historique : utiliser le passé pour prévoir l'avenir
    • Aucune hypothèse de distribution requise
    • Les pertes passées deviennent des pertes simulées pour demain
Gestion quantitative des risques en Python

Simulation historique en Python

  • VaR : partir des rendements dans asset_returns
  • Calculer portfolio_returns à l'aide des weights du portefeuille
  • Convertir portfolio_returns en losses
  • VaR : calculer np.quantile() de losses, p. ex. au niveau de confiance de 95 %
  • Suppose que la distribution future des pertes est exactement la même que dans le passé

 

weights = [0.25, 0.25, 0.25, 0.25]

portfolio_returns = asset_returns.dot(weights)
losses = - portfolio_returns
VaR_95 = np.quantile(losses, 0.95)
Gestion quantitative des risques en Python

Simulation de Monte Carlo

  • Simulation de Monte Carlo : puissante combinaison d'estimation paramétrique et de simulation
    • Suppose une ou des distributions pour la perte du portefeuille et/ou les facteurs de risque
    • S'appuie sur des tirages aléatoires dans ces distributions pour créer une trajectoire aléatoire, appelée exécution
    • Répéter les tirages $\Rightarrow$ crée un ensemble d'exécutions de simulation
  • Calculer la perte simulée du portefeuille pour chaque exécution jusqu'au temps visé
  • Estimer la VaR comme le quantile des pertes simulées
Gestion quantitative des risques en Python

Simulation de Monte Carlo en Python

  • Étape 1 :
    • Importer la distribution Normale norm de scipy.stats
    • Définir total_steps (1 jour = 1440 minutes)
    • Définir le nombre d'exécutions N
    • Calculer la moyenne mu et l'écart type sigma des portfolio_losses
from scipy.stats import norm

total_steps = 1440
N = 10000
mu = portfolio_losses.mean() sigma = portfolio_losses.std()
Gestion quantitative des risques en Python

Simulation de Monte Carlo en Python

  • Étape 2 :
    • Initialiser le vecteur daily_loss pour N exécutions
    • Boucler sur N exécutions
      • Calculer le vecteur loss simulé par Monte Carlo
        • Utilise norm.rvs() pour tirer à répétition de la distribution Normale standard
        • Tirages ajustés aux données avec mu et sigma mis à l'échelle par 1/total_steps
daily_loss = np.zeros(N)

for n in range(N):
loss = ( mu * (1/total_steps) + norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps) )
Gestion quantitative des risques en Python

Simulation de Monte Carlo en Python

  • Étape 3 :
    • Générer la daily_loss cumulative pour chaque exécution n
    • Utiliser np.quantile() pour obtenir la VaR à 95 % p. ex., sur daily_loss

 

daily_loss = np.zeros(N)
for n in range(N):

loss = mu * (1/total_steps) + ... norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps)
daily_loss[n] = sum(loss)
VaR_95 = np.quantile(daily_loss, 0.95)
Gestion quantitative des risques en Python

Simuler les rendements d'actif

  • Perfectionnement : générer des trajectoires aléatoires des rendements d'actif du portefeuille
    • Plus réaliste : les rendements peuvent être simulés individuellement
    • Les rendements d'actif peuvent être corrélés
      • Rappel : matrice de covariance efficiente e_cov
      • Utilisée à l'étape 2 pour calculer les rendements d'actif
  • Exercices : simulation de Monte Carlo avec simulation des rendements d'actif
Gestion quantitative des risques en Python

Passons à la pratique !

Gestion quantitative des risques en Python

Preparing Video For Download...