Volatilité et ruptures structurelles
Visualiser les changements de volatilité aide à révéler de possibles points de rupture structurelle dans les séries temporelles. En identifiant les moments où la volatilité semble changer, vous pouvez choisir de façon éclairée un point de rupture qui servira ensuite à des analyses statistiques complémentaires (comme le test de Chow).
Vous examinerez deux visualisations de la volatilité pour le portefeuille d’une banque d’investissement sur la période 2008 - 2009, selon deux pondérations disponibles : weights_with_citi et weights_without_citi. Elles correspondent respectivement à des portefeuilles équipondérés avec et sans Citibank, laquelle a présenté (comme vous l’avez vu au chapitre 1) la volatilité la plus élevée des quatre actifs sur la période.
Les prix du portefeuille pour 2008 - 2009 avec Citibank sont disponibles dans prices_with_citi, et sans Citibank dans prices_without_citi.
Cet exercice fait partie du cours
Gestion quantitative des risques en Python
Instructions
- Trouvez les séries de rendements pour les deux portefeuilles en utilisant
weights_with_citietweights_without_citi. - Calculez les écarts types sur fenêtre glissante de 30 jours pour les deux portefeuilles.
- Combinez les deux objets
Seriesde Pandas en un unique objetDataFramenommé "vol". - Tracez le contenu de l’objet
volpour comparer l’évolution des volatilités des deux portefeuilles dans le temps.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Find the time series of returns with and without Citibank
ret_with_citi = prices_with_citi.____.dot(weights_with_citi)
ret_without_citi = prices_without_citi.pct_change().____(____)
# Find the average 30-day rolling window volatility as the standard deviation
vol_with_citi = ret_with_citi.____.std().dropna().rename("With Citi")
vol_without_citi = ret_without_citi.rolling(30).____.dropna().rename("Without Citi")
# Combine two volatilities into one Pandas DataFrame
vol = pd.concat([____, ____], axis=1)
# Plot volatilities over time
vol.____().set_ylabel("Losses")
plt.show()