Institut National de Statistique
Et d’Économie Appliquée
TP de Simulation :
Comparaison du prix d’une option d’achat entre Black-
Scholes et Monte-Carlo à l’aide du langage C++.
Préparé par : Encadré par :
EL MOUJAOUID ANASS (AF) M. Yassine El Qalli.
TP1 : Comparaison du prix d’une option d’achat entre Black&Scholes et Monte-Carlo à l’aide du langage C++
Introduction :
Le payoff des produits dérivés est exprimé par une fonction de l’actif sous-jacent,
pour trouver le prix du produit dérivés dans un modèle complet , on calcule
l’espérance sous l’unique probabilité risque neutre du payoff actualisé.
En général, on utilise trois méthodes pour l’évaluation des options européennes :
Méthode des martingales par formule fermée
Méthode EDP par différences finies
Méthode des simulations
La troisième méthode est en générale la plus utilisée , car c’est trop difficile de
disposer d’une formule exacte pour des produits complexes ,même les équations
différentielles sont parfois difficiles à mettre en pratique .
Modèle de Black and Sholes :
Pour le prix d’une option européenne d’achat. Black et Scholes ont
proposé une formule, pour le prix d’uneoption européenne d’achat. Cette
formule est très utilisée en pratique.
Hypothèse du modèle :
Pour calculer le prix de l’option Black and Sholes ont supposé que :
Le calcul du prix de l’option Black & Sholes est basé sur des hypothèses bien précises :
Le marché est complet
Le temps est continu
Le taux d’intérêt est constant
La volatilité est constante
La dynamique du sous-jacent sous la probabilité risque neutre est donnée par :
𝑑𝑆𝑡 = 𝑆𝑡(𝑟𝑑𝑡 + 𝜎𝑑𝑊𝑡)
Avec 𝑊𝑡 Est un mouvement brownien sous la probabilité risque neutre.
𝑟 : est le rendement sans risque.
𝜎 : La volatilité du sous-jacent
Black & Scholes ont montré que le prix en 0 est l’espérance actualisée du
payoff sous la probabilité risque-neutre .Dans le cas des options européenne ,la
formule d’un call pour tout 𝑡 ≤ 𝑇 est donnée par :
𝐶𝑡 = 𝑒−(𝑇−𝑡)𝐸[(𝑆𝑇 − 𝐾)+ ] = 𝑆𝑡𝖭(𝑑1) − 𝐾𝑒−𝑟(𝑇−𝑡)𝖭(𝑑2)
Où :
𝑟 est le taux sans risque.
𝖭 est la fonction de répartition de la gaussienne.
Monte Carlo :
Le but est d'estimer l'espérance mathématique d'une certaine variable 𝑋, on a
d’après la loi forte des grands nombres pour (𝑋𝑖)=1,…,𝑛 un 𝑛 échantillon de loi 𝑖𝑖𝑑 de
loi commune celle de 𝑋, alors limX= 𝐸[𝑋]
𝑛->+00
En générale si 𝑋 est de loi 𝐿 et l’on suppose que l’on sait simuler une suite de
tirages indépendants 𝑋1, … , 𝑋𝑛
Convergence de l’algorithme :
Le problème qui se pose maintenant est d’évaluer théoriquement l’exactitude
de cette méthode. Le théorème central limite permet de donner les intervalles de
confiance de l’erreur commise lors du calcul. En effet si on considère l’erreur de
l’estimation
Cette erreur peut être estimée à l’aide du théorème central limite, qui décrit le
comportement asymptotique de la loi de √𝑛𝜀𝑛 pour 𝑛 grand. En effet on
√𝑛𝗌𝑛
𝜎
→ 𝖭(0,1).
On peut déduire de ce théorème un intervalle de confiance pour 𝜀𝑛. Pour un
𝜎
intervalle de confiance à 95%, on a : |𝜀𝑛 | ≤ 1.96 En utilisant l’estimateur classique de la
√𝑛
variance .
Méthode de réduction de la variance :
On a l’erreur due à l’approximation de l’espérance par une méthode Monte-Carlo à 𝑁
𝜎
simulations est majoré par le ratio . Il est intéressant à réécrire cette espérance
√𝑛
comme fonction d’une espérance d’une autre variable aléatoire qui a une variance
plus faible. C’est l’idée de base des techniques de la réduction de la variance.
Plusieurs techniques ont été développées pour implémenter cette idée comme :
variables de contrôles, variables antithétiques...
Variable de contrôle :
L’idée est d’écrire [𝑓(𝑋)] = 𝐸[𝑓(𝑋) − ℎ(𝑋)] + 𝐸[ℎ(𝑋)] où 𝐸[ℎ(𝑋)] est
d’espérance nul ou calculable explicitement : et 𝑣𝑎[𝑓(𝑋) − ℎ(𝑋)] < 𝑣𝑎𝑟[𝑓(𝑋)].
Dans ce cas le calcul va effectuer sur [𝑓(𝑋) − ℎ(𝑋)] et puisque la variance est
plus faible, l’estimateur sera de meilleure qualité.
En générale la variance d’un put est plus faible qu’un call, parce que le payoff du
put est borné contrairement au payoff du call. Pour cela, pour calculer le prix d’une
option d’achat européen on calcul le prix du put et en utilisant la parité Call-Put pour
calculer le prix du call.
Variable antithétique :
1
Si on veut calculer 𝐼 = ∫0 (𝑥)𝑑𝑥 , on génère donc 𝑛 variable aléatoires
indépendants : 𝑈1, … , 𝑈𝑛 de loi uniforme sur [0,1], donc 𝐼 est approchait par :
1 1 1
𝐼2𝑛 = [ ((𝑈1) + 𝑔(1 − 𝑈1)) + ⋯ + ((𝑈𝑛) + 𝑔(1 − 𝑈𝑛))]
𝑛 2 2
1
Cet estimateur à une variance moins que 𝐼0 = [ 𝑔(𝑈 ) + ⋯ + g(𝑈 )]
2𝑛 2𝑛 1 2𝑛
TP :
Importation des bibliothèques sous 𝐶 :
Black and Sholes : La fonction suivante calcul le prix d’un call par la formule
close :
Variable de contrôle :
On a calculé la variance avec la méthode de variable contrôle voilà le code :
L’intervalle de confiance associé :
Variable antithétique :
Pour cela on a créé une fonction qui génère un nombre aléatoire :
L’intervalle de confiance associé est :
Utilisation de la fonction cin pour entrer les variables ainsi que le nombre d’itération et la fonction cout
pour nous donner les sorties.
Un exemple d’exécution :
Pour un T= 1, 𝐾 = 100, 𝑆 = 111, 𝜎 = 0.1, 𝑟 = 0.1 , on aura lambda =122.06 .
Pour N=10 000 itérations :
Pour N=20 000 itérations :
Dont la finalité de comparer la solution explicite de black & scholes et les deux méthodes de réduction de la variance
On trace le graphe ci-dessous :
Comparaison de la solution explicite de Black & Scholes et les deux méthodes de réduction de
variance :Var Antithétique et Var Contrôle pour N=1000 itérations
TP2 : Considérer le modèle de Black-Scholes et comparer les schémas d’Euler et
Milstein avec la solution explicite .
Introduction :
La finalité de ce deuxième TP est de décrire la trajectoire d’un processus donné à travers des
méthodes utilisées .L’intérêt de cette type de simulation est de calculer une option qui dépend
du trajectoire comme les options asiatiques et barrières.
Cadre théorique :
Considérons le cas du modèle de Black-Scholes de dynamique de prix suivant :
La simulation explicite est :
Le schéma d’Euler s’écrit :
Avec :
Le schéma de Milstein :
Implémentation numérique :
Pour l’implémentation des résultats, on a utilisé langage C++, et pour tracer les graphes nous
avons usé Gnuplot .
Dans le commencement , on a importé les library suivantes qui vont nous servir dans la suite.
Pour le calcul on a trouvé les résultats suivants :
Pour un nombre d’itération égal à 200 et une solution initialisée 100 ,et par exemple on choisit la maturité à 2 ans et une
Volatilité 0.3 ,on a trouvé l’erreur quadratique par MSEP_Euler égale à 400.53 ,et par le MSEP_Milshtein égale à 390.92 .
Le code ci-dessous, nous serve à ouvrir Gnuplot et tracer les trajectoires de chaque méthode :
On obtient comme résultat :
On remarque que le schéma de Milstein converge plus rapidement que le schéma d’Euler .
On constate que que la solution explicite et le schéma de Milstein coïncident rapidement
avant que
le schéma d’Euler coïncide avec la solution explicite(Cela est remarqué graphiquement ) .
On peut conclure empiriquement que dans le cadre de Black et Scholes la
simulation de Milstein est plus adapté que celle d’Euler. Ce qui est compatible
avec lerésultat de
la comparaison dans le cadre théorique.
TP3 :
Dans ce TP ,on cherche à comparer les deux schémas implicites et de Cranck-Nicolson avec la formule
close de Black & Scholes ,Vérifier que le schéma de Cranck-Nicolson converge avant le schéma
implicite .
Introduction :
Les différences finies sont des types des équations qui consistent à résoudre une version discrète de l’EDP
sur une grille en remplaçant les dérivées partielles par des approximations discrètes de type différence
progressive, centrée, rétrograde.
Généralité :
𝜕𝑢 (𝑡+ℎ,)−𝑢(𝑡,𝑥)
On a (𝑡, 𝑥) = lim , en utilisant la formule de Taylor on aura :
𝜕𝑡 ℎ→0 ℎ
Différence progressive :
𝜕𝑢
La différence progressive pour (𝑡, 𝑥) est :
𝜕𝑡
𝜕𝑢 (𝑡 + 𝑘, 𝑥) − (𝑡, 𝑥) 𝑘 𝜕2𝑢
(𝑡, 𝑥) = − (𝑡, 𝑥) 𝑎𝑣𝑒𝑐 𝒕 < 𝒕 < 𝒕 + 𝒌
𝜕𝑡 𝑘 2 𝜕𝑡2
Différence rétrograde :
𝜕𝑢
Pour (𝑡, 𝑥) :
𝜕𝑡
𝜕𝑢 (𝑡, 𝑥) − (𝑡 − 𝑘, 𝑥) 𝑘 𝜕2𝑢
(𝑡, 𝑥) = + (𝑡, 𝑥) 𝑎𝑣𝑒𝑐 𝒕 − 𝒌 < 𝒕 < 𝒕
𝜕𝑡 𝑘 2 𝜕𝑡2
Différence centrée :
𝜕𝑢
Pour (𝑡, 𝑥) :
𝜕𝑡
𝜕𝑢 (𝑡, 𝑥 + ℎ) − (𝑡, 𝑥 − ℎ) ℎ2 𝜕3𝑢
(𝑡, 𝑥) = + (𝑡, 𝑥) 𝑎𝑣𝑒𝑐 𝒙 − 𝒉 < 𝒙< 𝒙 + 𝒉
𝜕𝑡 2ℎ 6 𝜕𝑥 3
Méthode des différences finies :
Dans les différences finies, on se place dans le cas où (𝑡, 𝑥) ∈ [0, 𝑇] × [𝑎, 𝑏].
𝑇
𝑘 = ∆𝑡 =
𝑀+1
𝑏−𝑎
Pour 𝑀, 𝑁 𝑒𝑛𝑡𝑖𝑒𝑟 > 0 on pose : ℎ = ∆𝑥 = et on pose par la suite
𝑁+1
𝗅𝑡𝑗 = 𝑗𝑘 𝑒𝑡 𝑥𝑛 = 𝑎 + 𝑛ℎ 𝖩
𝑈𝑗, = (𝑡𝑗, 𝑥𝑛) 𝑒𝑡 𝐹𝑗,𝑛 = 𝑓((𝑡𝑗, 𝑥𝑛), on va présenter 3 méthodes :
Démarche :
On utilise la différence progressive et 2la différence centré pour écrire
𝜕 𝑢
l’équation en un point ( , 𝑥 ), on a (𝑡, 𝑥 ) ≈ (𝑡,+ℎ)−2𝑢(𝑡,𝑎)+𝑢(𝑡,𝑎−ℎ)
𝑗 𝑛 𝜕𝑥2 0 ℎ2
Dans la suite on va étudier l’approximation par les différences finies du problème :
𝜕𝑢 𝜕2𝑢
− = 𝑓 𝑠𝑢𝑟 [0, 𝑇] × [𝑎, 𝑏]
𝜕𝑡 𝜕𝑡2
(𝑡 = 0, 𝑥) = 𝑢0(𝑥) 𝑑𝑎𝑛𝑠 [𝑎, 𝑏]
(𝑡, 𝑥 = 0) = 𝛼, 𝑢(𝑡, 𝑥 = 𝑏) = 𝛽 𝑝𝑜𝑢𝑟 𝑡 𝑑𝑒 [0, 𝑇] 𝖩
On a les donné initiale : 𝑈0, = 𝑢0(𝑥𝑛) 𝑝𝑜𝑢𝑟 1 ≤ 𝑛 ≤ 𝑁
Schéma implicite :
Ce schéma consiste à prendre pour la dérivée en temps la différence
rétrograde par rapport au schéma explicite on obtient alors :
𝑈𝑗+1, − 𝑈𝑗, 𝑈𝑗+1,+1 − 2𝑈𝑗+1,𝑛 + 𝑈𝑗+1,𝑛−1
− = (𝑡𝑗+1, 𝑥𝑛)
𝑘 ℎ2
Schéma de Crank-Nicolson:
C’est une moyenne des deux formules explicite et implicite .
Implementation sous C++ :
Sous C++, le prix du call obtenu à l’aide du schéma approximatif implicite et de CN comparé à la
formule close de Black & Scholes est donné par la dernière colonne de la matrice des solutions