Vous êtes sur la page 1sur 24

Projet Info - Calcul de sensibilités

Thomas Jannaud - François Thibout

19/03/09

1
TABLE DES MATIÈRES 2

Table des matières


1 Introduction - Rappel du Sujet 3

2 Méthodes Théoriques 3
2.1 Calcul des sensibilités . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 Différences finies . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Processus Tangent . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.3 Formule de Bismut . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.4 Maliavin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Génération de ST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Génération par formules fermées . . . . . . . . . . . . . . . . . 6
2.2.2 Génération par le schéma d’Euler . . . . . . . . . . . . . . . . . 7
2.2.3 Génération par le schéma de Milshtein . . . . . . . . . . . . . . 7
2.3 Méthodes de réduction de variance . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Variables de contrôle statiques . . . . . . . . . . . . . . . . . . 8
2.3.2 Variables corrélées négativement . . . . . . . . . . . . . . . . . 8
2.3.3 Variables de contrôle adaptatives . . . . . . . . . . . . . . . . . 9
2.3.4 Importance sampling . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.5 Gradient stochastique . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.6 Quasi Monte-Carlo . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Structure du code 12
3.1 Principaux fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Points clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Pointeurs de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4 Présentation des résultats 14


4.1 Convergence de Monte-Carlo . . . . . . . . . . . . . . . . . . . . . . . 14
4.1.1 Tests des divers schémas . . . . . . . . . . . . . . . . . . . . . . 14
4.1.2 Exemple de convergence du TCL . . . . . . . . . . . . . . . . . 14
4.1.3 Autres exemples . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.1.4 Comparaison des différentes méthodes utilisées . . . . . . . . . 17
4.2 Méthodes de réduction de variance . . . . . . . . . . . . . . . . . . . . 19
4.2.1 Application à la simulation du prix d’un Call . . . . . . . . . . 19
4.2.2 Application à la simulation du delta d’un Call . . . . . . . . . 20
4.2.3 Méthodes QMC . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5 Conclusion : Benchmarks 22
5.1 Génération du sous-jacent . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2 Calcul des sensibilités . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.3 Réductions de variance . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 MÉTHODES THÉORIQUES

1 Introduction - Rappel du Sujet


Calculer les sensibilités (delta, gamma, vega) d’un call européen vanille dans le
modèle de Black-Scholes. On utilisera et comparera :
1. L’approche par différences finies à pas fixe (cf. polycopié, chapitre 9, section 2),
2. L’approche par différences finies à pas décroissant (cf. polycopié, chapitre 9,
section 2),
3. L’approche par processus tangent (on dérive/différentie formellement le payoff
lorsque c’est possible),
4. L’approche par “calcul de Malliavin” (on utilise la formule avec poids obtenue
après intégration par parties ou différentiation de la densité dans le chapitre 2 du
poly). On testera au passage les propositions de réduction de variance suggérées
dans les exercices qui parsèment cette section.
On simulera :
– le processus de prix de manière exacte
– puis en considérant son schéma d’Euler "naïf".
– et enfin son schéma de Milshtein.
Considérer ensuite un modèle de type pseudo-CEV (ϑ ∈]0, 1[) :
Xt
dXt = rXt dt + Xtϑ dWt , X 0 = x0 > 0
1 + Xt2
Calculer u(x) = IE(g(XT )|X0 = x) pour g(x) = (x − K)+ et g(x) = (K − x)+ ,
puis implémenter différentes méthodes de calcul du delta correspondant.

Tester des méthodes de réduction de variance fondées sur les formules donnant le
delta d’un call (et d’un put) dans le modèle de Black-Scholes, comme celles proposées
en cours au chapitre 2 (notamment dans les exercices).

Références :
– polycopié de cours
– Boyle P., M. Broadie et P. Glasserman, Monte-Carlo Methods for security pri-
cing, Journal of Economic Dynamics and Control, 21, 1267-1321, 1997.
– Fournié E., J.-M. Lasry, J. Lebuchoux et P.-L. Lions, Applications of Malliavin
calculus to Monte Carlo methods in Finnance II, Finance and Stochastics, 5,
201-236, 2001.
– Fournié E., J.-M. Lasry, J. Lebuchoux, P.-L. Lions et N. Touzi, Applications of
Malliavin calculus to Monte Carlo methods in Finance, Finance and Stochastics,
3, 391-412, 1999.
– Kloeden P.E. et E. Platen, Numerical solution of stochastic differential equa-
tions, Applications of Mathematics, 23, Springer-Verlag, New York, 1992.

2 Méthodes Théoriques
Nous présentons ici les méthodes que l’on a utilisées pour calculer les sensibilités
aux différents paramètres d’un Call, lorsque le sous-jacent suit un modèle :

3
2.1 Calcul des sensibilités 2 MÉTHODES THÉORIQUES

dSt
– Black Scholes : St = rdt + σdWt
dSt Stη
– CEV : St = rdt + σ √ dWt
1+St2

On notera C(x, T, K, σ) le prix de l’option ; avec h(x) = (x − K)+ , dans tous les cas,
C(x, T, K, σ) = e−rT IE(h(STx ))

Nous chercherons à calculer en particulier,


– ∆ = ∂C
∂x
2
– Γ = ∂∂xC2
– V ega = ∂C∂σ

2.1 Calcul des sensibilités


2.1.1 Différences finies
On a C(x, T, K, σ) = IE(h(STx )) = IE(h(x, ω)) et :
– la fonction h ne présente d’irrégularités qu’en K
– ST 6= K, IP − p.s
– h est lipschitzienne
∂S x
– ST et ∂xT sont intégrables
L’intégrabilité pour B-S réside dans la formule fermée que l’on obtient. Pour CEV,
on a 0 < η < 1 et l’EDS régissant St a donc des coefficients sous-linéaires, ce qui im-
plique l’existence de tous les moments de St .
x
∂h(ST )
On sait alors que ∂C
∂x = e−rT IE( ∂x ) et qu’en première approximation,

∂C
∂x ≈ e−rT IE( h(x+,ω)−h(x−,ω)
2 )

Nous calculons cette espérance par Monte Carlo. Cette méthode fonctionne aussi
pour le Vega. Pour Gamma, on pourrait utiliser

∂2C h(x + , ω) + h(x − , ω) − 2h(x, ω)


≈ e−rT IE( )
∂x2 

Puisqu’il faut calibrer , une autre manière consiste à utiliser les Différences
finies à pas décroissant, i.e prendre n = nCγ par exemple. Nous avons pris γ = 14 ,
comme conseillé dans le cours.

Difficultés rencontrées La méthode des différences finies se comporte très bien


sauf pour le calcul du Gamma ; la dérivée seconde de h(x) est en effet un dirac, et il
est très difficile d’en rendre compte directement par Monte Carlo sans atteindre un
nombre de simulations prohibitif.

4
2.1 Calcul des sensibilités 2 MÉTHODES THÉORIQUES

2.1.2 Processus Tangent


x
∂h(ST )
Puisque ∂C
∂x = e−rT IE( ∂x ), on a aussi
∂C ∂h ∂S x
= e−rT IE( (STx ) T )
∂x ∂x ∂x
∂Stx
Yt = ∂x est appelé le processus tangent. Dans le cas Black-Scholes, on a simple-
2
(r− σ2 )t+σWt
ment Yt = e , sinon dans le cas général, si dSt = f (St )dt + g(St )dWt , alors
dYt 0 0
Yt = f (S t )dt + g (St )dW t, Y0 = 1

On peut alors simuler le processus tangent en même temps que l’on simule le pro-
cessus lui même, par un schéma d’Euler ou de Millstein, puis estimer nos sensibilités
par Monte-Carlo.

Remarques
– Dans le cas du Gamma d’un payoff régulier, il faudrait simuler le proces-
2
sus tangent du processus tangent (nul dans BS !) ∂∂xC2 = e−rT IE(YT2 h(2) (STx ) +
∂YTx 0 x
∂x h (ST )) (formule fausse dans le cas du put ou du call puisque h présente un
saut)

– Le cas du Vega est plus compliqué car σ intervient directement dans l’équation.
∂S σ
Dans le cas où dStσ = f (Stσ )dt + σg(Stσ )dWt , si Zt = ∂σt , alors

dZt = Zt f 0 (Stσ )dt + (g(Stσ ) + σZt g 0 (Stσ ))dWt

– Simuler le processus tangent ne coûte pas plus cher, puisqu’il se calcule en même
temps que St

2.1.3 Formule de Bismut


Si dXt = b(Xtx )dt + g(Xtx )dWt , alors (sous certaines conditions)
Z T Z T
   g(Xsx )Hs 
∀f, ∀H ∈ L2 , IE f (XTx ) Hs dWs = IE f 0 (XTx )YT ds
0 0 Ys

Ainsi,
∂C
∆=
∂x
f onctionpayof f
−rT ∂z }| {
= e IE( h(STx ) )
∂x
Z T
1 Ys
= e−rT IE(h(STx ) dWs )
T 0 g(Ssx )

5
2.2 Génération de ST 2 MÉTHODES THÉORIQUES

Cette formule se simplifie dans le cas de Black Scholes puisque g(Ssx ) = σSsx et
Sx
Ys = xs . On obtient finalement ∆ = e−rT IE(h(STx ) W
σT ).
T

Il paraît vraiment compliqué d’utiliser cette formule pour calculer le Gamma dans
le cas de CEV par exemple.

2.1.4 Maliavin
Pour le cas de Black-Scholes, on peut continuer le calcul de la formule de Bismut
pour obtenir Gamma.

On a en effet
∂h(STx ) WT
e−rT IE( ) = e−rT IE(h(STx ) )
∂x σT
et ceci quelque soit h(x). On peut alors "appliquer cette formule sur elle-même", et
on obtient :

∂2C
Γ=
∂x2
1
= e−rT IE(h0 (STx )STx − h(STx )WT )
x2 σT
1 W2 1
= e−rT 2 IE(h(STx )( T − WT − ))
x σT σT σ

Remarque Maliavin ne fonctionne que parce que l’on dispose de la loi exacte de
ST .

2.2 Génération de ST
Trois manières différentes de génération de ST ont été implémentées. Il s’agit de la
génération par formule fermée, la génération avec un schéma d’Euler et la génération
par un Schéma de Milshtein.

Les équations de diffusions du type Black Scholes et CEV sont toutes deux de la
forme dSt = b(t, St )dt+σ(t, St )dWt avec b et σ continues et lipshitziennes. De manière
plus générales, elles vérifient toutes les conditions de régularités requises pour que leurs
schémas d’Euler et de Milshtein convergent vers leur valeur réelle.

2.2.1 Génération par formules fermées


Dans le cadre de Black Scholes, nous avons la dynamique suivante du sous-jacent
2
(r− σ2 )T +σWT
St : dS
St = rdt + σdWt . Il en résulte alors que ST = S0 e
t
soit encore
σ2

ST = S0 e(r− 2 )T +σ T Z
où Z ∼ N (0, 1) (loi normale).

6
2.2 Génération de ST 2 MÉTHODES THÉORIQUES

Générer ST revient donc simplement à générer une distribution normale Z, ce qu’il


est aisé de faire à partir de nombres uniformément répartis sur l’intervalle [0, 1].

Par contre, dans le cadre de la dynamique CEV, il n’est pas possible d’obtenir
simplement la valeur de ST comme une fonction de variables aléatoires simples. On est
donc conduit à modéliser sa dynamique par des schémas du type Euler ou Milshtein.

2.2.2 Génération par le schéma d’Euler


La discrétisation d’Euler (à pas constant) de la dynamique Black Scholes donne
p
S tnk+1 = S tnk + S tnk (r∆tn + σ ∆tn Uk+1 ), S 0 = S0 , k = 0, ..., n − 1

avec ∆tn = Tn , tnk = kT t


pn
n = k∆n et (Uk )1≤k≤n = T (Wtk − Wtk−1 ), une séquence iid
n n

de variables normales.

La discrétisation d’Euler de la dynamique CEV donne (mêmes notations)


η
S tnk p
S tnk+1 = S tnk (1 + r∆tn + σ q ∆tn Uk+1 ), S 0 = S0 , k = 0, ..., n − 1
2
1 + S tnk

Les conditions de régularité font que tnkn → t ⇒ S tnkn → St , ce qui implique que
S T converge vers ST .

2.2.3 Génération par le schéma de Milshtein


La discrétisation de Milshtein de la dynamique Black Scholes donne (mêmes no-
tations)
1 p 1
S tnk+1 = S tnk 1+(r− σ 2 )∆tn +σ ∆tn Uk+1 + σ 2 ∆tn Uk+1
2

, S 0 = S0 , k = 0, ..., n−1
2 2

La discrétisation de Milshtein de la dynamique CEV donne (mêmes notations)

S tnk+1 = S tnk

1 S tnk 2
+ S tnk (r − σ 2 2 (1 + η + ηS tnk )∆tn )
2 (1 + S n )2
tk

Stηn p
+ S tnk σ q k ∆tn Uk+1
1 + St2n
k


1 S tnk 2
+ S tnk σ 2 2 (1 + η + ηS tnk )∆tn Uk+1
2
2 (1 + S tnk )2
S 0 = S0 k = 0, ..., n − 1

7
2.3 Méthodes de réduction de variance 2 MÉTHODES THÉORIQUES

Comme dans les schémas d’Euler, les conditions de régularité font que S T converge
vers ST .

2.3 Méthodes de réduction de variance


2.3.1 Variables de contrôle statiques
Principe général
On cherche une variable aléatoire Ξ avec les caractéristiques suivantes :
– IE[Ξ] est calculable avec une complexité très faible (1)
– X − Ξ est calculable avec la même complexité que X (2)
– Var[X − Ξ] ≤ Var[X] (3)
On considère alors la nouvelle variable aléatoire X 0 = X − Ξ + IE[Ξ]. Alors,
IE[X] = IE[X 0 ], et Var[X 0 ] ≤ Var[X]. En pratique, la condition (3) est rarement
prise en compte, et on cherche simplement Ξ tel que X − Ξ soit "petit". Générale-
ment, on observe que la variance de X 0 est bien réduite.

Application à la simulation des sensibilités d’une option Européenne

L’idée est de substituer XTx par xerT = IEQT [XTx ] dans les formules utilisées
pour calculer les sensibilités, en écrivant ϑ(XTx ) = ϑ(xerT ) + ϑ(XTx ) − ϑ(xerT ) .
| {z }
Ξ
e

Ainsi, pour calculer le delta d’une option européenne de pay-off φ(XTx ), et de prix
f (x) = IEQ [φ(XTx )], on obtient les formules suivantes :
Xx
– processus tangent : f 0 (x) = φ0 (xerT )erT + IEQ [(φ0 (XTx ) − φ0 (xerT )) xT ]
– Maliavin : f 0 (x) = xσT
1
IEQ [(φ(XTx ) − φ(xerT ))WT ]
Pour calculer le gamma d’une option européenne, on part de f 00 (x) =
1 Q 0 x x x
x2 σT IE [(φ (XT )XT −φ(XT ))WT ], et on applique le même type de raisonnement pour
00
trouver que f (x) = x2 σT IEQ [(φ0 (XTx )XTx − φ(XTx ) − φ0 (xerT )xerT + φ(xerT ))WT ].
1

2.3.2 Variables corrélées négativement


Principe général
Considérons les v.a : X = ϕ(Z). S’il existe une fonction T décroissante vérifiant
loi
Z = T (Z), alors X = ϕ(Z) et X 0 := ϕ(T (Z)) ont même loi, et Cov(X, X 0 ) ≤ 0.
0
On a alors 2Var( X+X
2 ) ≤ Var(X), ce qui implique une réduction de variance (à
temps de calcul donné).

Application à la méthode des variables antithétiques

Dans le modèle de BS, une option ayant un payoff monotone en ST (ex : call ou
put européen) est de la forme hT = ϕ(STx ) ou ϕ est monotone.
σ2

loi loi
On a Stx ∼ xe(r− 2 )T +σ T Z
avec Z ∼ N (0, 1), et donc hT ∼ f (Z) avec f monotone.

8
2.3 Méthodes de réduction de variance 2 MÉTHODES THÉORIQUES

loi
Puisque Z ∼ −Z, en posant h0T = f (−Z), on obtient la réduction de variance sou-
h +h0
haitée avec la nouvelle variable T 2 T .

Application à la méthode de réduction de variance par la parité call-put

Si on note Call0 = e−rT IEQ (STx − K)+ et P ut0 = e−rT IEQ (K − STx )+ , la parité
Call-Put s’écrit Call0 − P ut0 = x − e−rT K.

Ainsi en posant X = e−rT (STx − K)+ et X 0 = e−rT (K − STx )+ + x − e−rT K, on a


IE[X] = IE[X 0 ] et Cov(X, X 0 ) < 0.
0
Si l’on considère X 00 = X+X
2 , alors IEQ [X 00 ] = IEQ [X] et 2Var[X 00 ] ≤ Var[X].
Nous verrons comment améliorer cette relation dans le paragraphe suivant.

2.3.3 Variables de contrôle adaptatives


Principe général
On part de 2 v.a distinctes X et X 0 , de même espérance, et l’on pose Ξ = X − X 0 .
On a donc IE[Ξ] = 0.

En considérant X λ = X − λΞ, l’idée est d’estimer IEX par IEX λmin avec λmin
rendant la variance de X λ minimale.

Estimation de λmin
VarX λmin est polynômiale du 2nd degré, et λmin = Cov(X,Ξ)
VarX .

CM PM PM
On pose λM = VM avec CM = 1
M k=1 Xk (Xk − Xk0 ) et VM = 1
M k=1 (Xk −
M →∞
Xk0 )2 . La loi forte des grands nombres implique alors que λM → λmin .

Deux approches existent (autre exemple : section 2.3.5).


– l’approche batch consiste
PM à estimer une valeur approximative correcte λM de
1 λM
λmin puis IE[X] par M k=1 Xk .
– l’approche récursive consiste à approcher simultanément λmin et IE[X] par
1
PM
M k=1 Xk − λk−1 Ξk .
√ 1
PM
Ces deux algorithmes convergent. Pour le dernier, on a le résultat suivant : M(M k=1 X”k −
2 2
IE[X]) → N (0, σmin ) où σmin = VarX λmin .

Remarque L’approche batch étant relativement peu commode à implémenter, l’ap-


proche récursive a été privilégiée. Elle est aussi beaucoup plus souple vis-à-vis du
paramètre M.

Application à la méthode de réduction de variance par la parité call-put


Comme dans le paragraphe précédent,on pose X = e−rT (XTx −K)+ et X 0 = e−rT (K −
XTx )+ + x − e−rT K.

9
2.3 Méthodes de réduction de variance 2 MÉTHODES THÉORIQUES

X et X 0 vérifient les hypothèses précédentes et on peut donc leur appliquer direc-


tement cette technique.

2.3.4 Importance sampling


Dans un cadre BS, considérons l’option Européenne de pay-off hT = ϕ(STx ) avec
σ2

encore Stx = xe(r− 2 )T +σ T Z
, Z ∼ N (0, 1), et hT = f (Z).

Le principe de cette technique est de "décaler" Z à Z + θ (constant), de manière


à ce que ST soit centré sur les éléments "importants" du pay-off.
Par exemple le payoff du call est nul si ST < K. Et donc une simulation par MC en
partant de S0  K aboutirait à 50% de trajectoires au moins "gâchées".

L’importance sampling se base sur l’identité suivante, connue sous le nom de for-
2
mule de Cameron-Martin : IEf (Z) = eθ /2 IE[f (Z + θ)e−θ(Z+θ) ] où Z ∼ N (0, 1).

Il faut alors trouver θ réduisant significativement la variance.


– Intuitivement, pour un Call très hors de la monnaie (x  K) une idée √
consiste-
rait à recentrer XTx vers le strike K en choissant θ tel que IE(xeµT +σ T (Z+θ) ) =
ln( x )+rT
K (soit θ = − σK√T ).
2
– Une autre méthode serait de chercher le θ minimisant la variance (ou = e−θ IE[f (Z+
θ)2 e−2θZ ]). C’est un problème de minimisation qui peut être résolu par la mé-
thode du gradient stochastique, étudiée dans la section suivante.

2.3.5 Gradient stochastique


On part de la formule de Cameron-Martin, et on cherche à trouver θmin minimi-
2
sant L(θ) = e−θ IE[f (Z + θ)2 e−2θZ ].

On définit par récurrence θn+1 = θn − γn+1 Ha (θn , Zn+1 ) et θ0 = 0 avec Ha (θ, z) =


−a(|θ|2 +1)1/2
e ϕ(z − θ)2 (2θ − z). En appliquant le théorème de Robbins-Monro, on dé-
p.s.
duit que θn → θmin .

Comme pour l’estimation par variable de contrôle adaptative (section 2.3.3), deux
approches existent :
– approche batch : estimer θmin par θbmin = θM , et dans un second temps estimer
|θ 2
PM (m) min |
b
par Monte Carlo IEf (Z) ≈ 1 f (Z (m) + θbmin )e−(θmin |Z )− 2 .
b
M m=1

– approche récursive (approche retenue) : simuler simultanément θ et IEf (Z) par


|θ |2
−(θm−1 |Z (m) )− m−1
1
PM (m)
M m=1 f (Z + θ m−1 )e 2 .

La convergence du MC de batch s’effectue selon le TLC avec une variance de


L(θbmin ) − IE[f (Z)]2 .
2
Pour le MC du récursif, la variance est de σmin = L(θmin ) − IE[f (Z)]2 .

10
2.3 Méthodes de réduction de variance 2 MÉTHODES THÉORIQUES

2.3.6 Quasi Monte-Carlo


Les méthodes de Quasi Monte-Carlo permettent d’accélérer la convergence de
Monte-Carlo dans le cas unidimensionnel. L’idée consiste à remplacer U1 , U2 , ...Un ∈
[0, 1], aléatoires, par V1 , V2 , ...Vn ∈ [0, 1], non-aléatoires et plus équirépartis sur [0, 1]
que les Ui .

On pourrait bien sûr prendre n1 , n2 , ... n−1


n mais ceci n’est pas une "vraie suite",
au sens où si l’on exécute l’algorithme avec cette suite, que l’on juge le résultat in-
satisfaisant parce qu’il faut plus d’étapes, on ne peut pas rajouter d’étapes sans tout
refaire. Il faut utiliser des suites à discrépance faible. La vitesse de convergence
est alors en n1 pour des pay-offs suffisamment réguliers.

Suite de Halton p1 , p2 , ..., pd sont d nombres premiers distincts. La suite de Hal-


ton d−dimensionnelle
Pr (ξn )n≥1 est définie par ξn = (φp1 (n), φp2 (n), ..., φpd (n)) et
ak
φp (n) = k=0 pk+1 avec n = a0 + a1 p + ... + ar pr . C’est une suite à discrépance
d
faible.

Suite de Kakutani p1 , p2 , ..., pd sont d nombres premiers distincts, et y1 , ..., yd ∈


[0, 1[ avec yi > p1i . La suite de Kakutani d−dimensionnelle (ξn )n≥1 est définie par
ξn+1 = ξn ⊕p y (en vectoriel) avec ⊕p une addition avec propagation de la retenue de
gauche à droite dans l’écriture en base p. Ex : 0.120482 ⊕10 .340851 = 0.460243

C’est aussi une suite à discrépance faible.

Difficultés rencontrées Utiliser quasi Monte-Carlo n’est pas plus difficile que
Monte-Carlo, et l’on aura d = 2 dans nos programmes. Cependant :
– il faut prendre garde au fait que ces suites ont leurs composantes qui se calculent
indépendamment. Ce sont des suites vectorielles et elles ne conservent leurs
propriétés que dans ce cas là !
Exemple : S’il nous fallait un seul nombre aléatoire et que l’on calculait ξn1
tout seul, celui-ci s’incrémenterait automatiquement, mais pas ξn2 . La prochaine
1
utilisation de ξn renverrait (ξn+1 , ξn2 ) et la suite ne serait plus bien distribuée.
Il faut donc faire calculer ξn et ξn et "jeter" ξn2 si l’on n’a besoin que d’un seul
1 2

nombre aléatoire.
– Certains articles conseillent de prendre yi = p1i pour d < 3. On peut éviter
les déconvenues en écrivant yi en "dur" dans l’addition où il intervient plutôt
que de calculer sur l’ordinateur la suite des décimales en base pi à partir de sa
p
représentation "double". On remplacera ξn+1 = ξn ⊕p y par ξn+1 = ξn ⊕p 0.1

11
3 STRUCTURE DU CODE

3 Structure du code
Notre principal soucis fut sans doute de condenser le code, pour ne pas réécrire la
méthode "différences finies" 10 fois avec le schéma d’Euler BS, de Millstein BS, puis
encore pour le modèle CEV, ... Mais il fallait aussi que le code reste clair et lisible.

Et nous avons pu le faire sans créer de classes (délibérément), ce qui peut sur-
prendre. Mais sans les nombreuses contraintes qui en découlent, nous avons ainsi pu
nous concentrer sur l’écriture des fonctions et la compréhension immédiate de celles-ci.

Un projet comme celui-ci comprend environ 1000 lignes de code. C’est peu com-
paré à du code "industriel" (millions de lignes), mais à l’échelle d’un écran, où l’on
ne fait tenir qu’une trentaine de lignes, il reste primordial de coder proprement et de
bien agencer le code. Aussi nous avons pris soin de diviser le code en de nombreux
fichiers pour gagner en lisibilité, par le biais des include.

3.1 Principaux fichiers


Nous listons ici les principaux fichiers du programme.
Main.h C’est à partir de ce fichier que l’on teste les fonctions, commentant en bloc
ou pas les fonctions qui nous intéressent.
Generation_St.h Les méthodes de génération : formule fermée, schéma d’Euler, de
Milstein, génération de St parallèlement à son processus tangent, ...
Prix, Delta, Vega, Gamma.h Algorithmes de différences finies, Maliavin, proces-
sus tangent... implémentés pour le calcul du prix, du delta, du gamma, ...
Aleatoire.h Différentes méthodes de génération de nombres implémentées, en par-
ticulier les suites à discrépance faible de Halton et de Kakutani.
Couple.h et Triplet.h 2 classes réduites à leur strict minimum pour faciliter l’usage
de données telles que (x, y) et (x, y, z).
Global.h Contient les constantes, les types énumératifs, les variables globales et
les include des principales librairies C++.
Declarations.h Liste exhaustive des prototypes de fonctions, afin de soulager les
autres fichiers.

3.2 Points clés


Afin de "généraliser" au maximum notre code tout en restant concis, il y a plu-
sieurs manières de régler le pay-off, la génération de nombres aléatoires (pour utiliser
quasi Monte Carlo) et la génération de ST , de manière indépendante. On choisit en
fait un "mode", et toutes les fonctions sont exécutées avec ce mode jusqu’à ce qu’un
nouveau mode soit fixé.

Exemple : Payoff_Initialiser(call) ; ou Generation_Initialiser(schema_euler_BS) ;


Les modes sont définis dans Global.h, grâce aux types énumératifs.

12
3.3 Pointeurs de fonctions 3 STRUCTURE DU CODE

Payoff call et put, associés à Payoff_initialiser(payoff )


Aleatoire ordi_defaut, mersenne, QMC_Halton et QMC_Kakutani, associés à Alea-
toire_initialiser(mode) (avec en plus 2 nombres premiers en paramètre pour
QMC).
Generation formule_fermee_BS, schema_euler_BS, schema_millstein_BS, schema_euler_CEV
et schema_millstein_CEV, associés à Generation_Initialiser(mode)

3.3 Pointeurs de fonctions


Beaucoup de fonctions et d’algorithmes se ressemblant (différences finies à pas
constant ou décroissant, génération par schéma d’Euler pour BS ou CEV, ...), nous
avons unifié tant que possible les procédures grâce notamment aux pointeurs de
fonctions. Un pointeur de fonction est une sorte de variable, qui ne contient pas de
nombre (entier, double, ...) mais une référence à une fonction.

Par exemple on a 2 fonctions : call : x → (x − K)+ et put : x → (K − x)+ . Afin


d’être "flexible" dans le code sans perdre de temps à vérifier à chaque itération Monte
Carlo si l’on calcule un call ou un put, on peut créer la fonction "payoff" qui pointe
sur la fonction call ou put.

Code : double (*payoff ) (double, double) ; pour déclarer payoff comme pointeur de
fonction prenant 2 paramètres. Et payoff = &call_payoff ; pour faire pointer payoff
vers la fonction call(x, K).

13
4 PRÉSENTATION DES RÉSULTATS

4 Présentation des résultats


Le "M" dans les tableaux signifie "million".
Sauf mention contraire, toutes les simulations correspondent à un Call de para-
mètres K = 100, S0 = 100.

4.1 Convergence de Monte-Carlo


La méthode de Monte Carlo repose sur la Loi des Grands Nombres. On estime
IEX par la moyenne de M v.a (Xi )i∈[1,M ] iid de même loi que X, i.e.
1
PM
IEX ≈ X M (ω) := M i=1 Xi (ω).
La convergence de X M est régie par le TCL, et on peut écrire, pourqM suffisam-
VM
ment grand, que P(IE[X] ∈ IM ) ' P(|N (0, 1)| ≤ aα ) où IM = [X M − aα M , XM +
q
PM
aα VMM ] et V M = M1−1 i=1 (Xi − X M )2 . La convergence est donc en √1 .
M

Dans
qla plupart des simulations que nous présenterons, nous indiquerons à la fois
X M et VMM de manière à avoir une idée de l’intervalle de confiance pour IE[X] à 95%.

4.1.1 Tests des divers schémas


Les graphes 1 et 2 permettent de montrer que le mode de génération de ST (Euler
ou Millstein) n’importe finalement que peu (en faisant fi du processus tangent), mis à
part la formule fermée BS qui fait gagner beaucoup en temps mais pas en précision.
On pourra alors, à un mode (BS ou CEV) donné, simuler indifférement avec Euler
ou Millstein.
Nous utiliserons BS pour montrer qu’une méthode ne converge pas vers la
bonne valeur, puisque nous avons des formules fermées pour le call BS.

4.1.2 Exemple de convergence du TCL


Une estimation du delta par la méthode de Maliavin dans un cadre BS a été effec-
tuée. Les résultats des simulations pour différents nombres d’itérations sont présentés
dans le tableau 1 ci-dessous ainsi que dans le graphe 3.

14
4.1 Convergence de Monte-Carlo 4 PRÉSENTATION DES RÉSULTATS

Fig. 1 – Estimation de la densité de ST BS. Comparaison de la "densité" estimée


à partir de la formule fermée (bleu), du schéma d’Euler (rouge) et du schéma de
Milshtein (vert). Les 3 densités semblent extrêmement proches, permettant d’utiliser
n’importe laquelle des techniques pour générer ST .

Fig. 2 – Estimation de la densité de ST CEV. Comparaison de la "densité"


estimée à partir du schéma d’Euler (bleu) et du schéma de Milshtein (rouge). Les 2
densités semblent extrêmement proches, permettant d’utiliser indifféremment Euler
et Milshtein pour générer ST .

4.1.3 Autres exemples


Quelques autres simulations réalisées en C++ sont étudiées dans cette partie. Les
graphes 4, 5 et 6 présentent respectivement les résultats pour :
– le prix d’un Call, dynamique BS.

15
4.1 Convergence de Monte-Carlo 4 PRÉSENTATION DES RÉSULTATS

q
VM

Nombre de simulations Valeur (X M (∼ ∆)) Ecart type (σ = M ) M ∗σ
100 0,64136 0,131 1.31
1000 0,67436 0,0458 1.44
10000 0,62781 0,0135 1.35
0.1 M 0,64102 0,00443 1.4
1M 0,63793 0,00138 1.38
10 M 0,63652 0,00044 1.39
valeur réelle 0,63683

Tab. 1 – Convergence de MC en fonction du nb de simulations. Delta simulé


par Maliavin. On observe la précision qui augmente / l’écart type qui diminue en √1N

Fig. 3 – Delta estimé par Maliavin - la convergence de MC (bleu foncé) et de son


intervalle de confiance (bleu clair) en fonction du nb de simulations est claire.

– le delta d’un Call, dynamique CEV, avec la formule de Bismut ; ST étant généré
par un schéma d’Euler.
– le gamma d’un Call, dynamique BS, avec la méthode des différences finies et la
méthode de Maliavin.
La convergence par Monte Carlo s’effectue correctement pour le prix et le delta
mais la méthode des différences finies ne donne pas une bonne approximation du Γ
d’un Call.
Ceci s’explique par le fait que le pay-off du Call n’est pas suffisamment régulier
(sa dérivée seconde est un dirac). La méthode de Maliavin est alors beaucoup plus
adaptée pour estimer le gamma.

16
4.1 Convergence de Monte-Carlo 4 PRÉSENTATION DES RÉSULTATS

Fig. 4 – Prix estimé par Monte Carlo. modèle de BS. Prix MC en bleu foncé,
intervalle de confiance en bleu clair. La convergence est rapide et stable.

Fig. 5 – Delta estimé par Maliavin. Sous-jacent CEV. Delta MC et intervalle de


confiance en bleu clair. Il n’y a pas de formule fermée pour comparer mais on observe
la convergence de MC.

4.1.4 Comparaison des différentes méthodes utilisées


On compare dans les tableaux 2 et 3 les différents schémas (Euler, Millstein, for-
mule fermée ST ) pour approcher le prix et le delta d’un Call.
Dans le cas du delta BS, on utilise la méthode des différences finies, à pas constants
et décroissants, la méthode du processus tangent et la méthode de Maliavin avec la
simplification du cas BS, puis en utilisant directement la formule de Bismuth.

17
4.1 Convergence de Monte-Carlo 4 PRÉSENTATION DES RÉSULTATS

Fig. 6 – Gamma estimé par différence finies et Maliavin. Sous-jacent BS.


Gamma MC par les différences finies en bleu (converge vers mauvaise valeur) et
gamma par Maliavin en ligne rouge (converge très vite et bien)

Prix Call - S0=K=100 Valeur Ecart Type Temps (s)


formule de Black Scholes 5.5819
Black Scholes - formule fermée ST 5.6016 0.0225 0.1
Black Scholes - schéma Euler 5.6026 0.0227 6.0
Black Scholes - schéma Milshtein 5.5775 0.0226 8.7
CEV - schéma Euler 2.9481 0.0031 8.4
CEV - schéma Milshtein 2.9510 0.0031 13.9

Tab. 2 – Benchmark pour le calcul du prix d’un Call. Le schéma de génération


de ST affecte le temps mais pas la précision.

Delta Call BS - S0=K=100 Valeur Ecart Type Temps (s)


Formule fermée 0.6368
Différences finies 0.6363 0.0017 0.13
Différences finies à pas décroissant 0.6376 0.0017 0.14
Processus Tangent 0.6395 0.0017 0.13
Maliavin 0.6357 0.0017 0.57
Bismuth 0.6344 0.0043 41.4

Tab. 3 – Benchmark pour le calcul du delta d’un Call BS. Le schéma de


génération de ST affecte le temps mais pas la précision.

Comme attendu, on observe que la largeur de l’intervalle de confiance ne dépend


pas beaucoup de la manière dont a été générée le sous-jacent dans le cas de la simu-

18
4.2 Méthodes de réduction de variance 4 PRÉSENTATION DES RÉSULTATS

lation du prix d’un Call.


Par contre, les différentes méthodes de calcul du delta ne sont pas équivalentes. Si
la méthode des différences finies et la méthode du processus tangent semblent équiva-
lentes, la méthode de Maliavin, à même nombre d’itérations Monte-Carlo, donne un
intervalle de confiance sensiblement plus élevé.

4.2 Méthodes de réduction de variance


On utilise les différentes techniques de réduction de la variance proposées dans la
première partie, et on analyse les résultats.

4.2.1 Application à la simulation du prix d’un Call


Le tableau 4 présente les résultats des différentes techniques de réduction de va-
riance lors du calcul du prix d’un Call. On se fixe une certaine largeur de fenêtre
pour l’intervalle de confiance, et on observe le nombre de simulations requises, ce qui
permet de comparer les différentes méthodes entre elles.
Le cas de la réduction de variance par la méthode du gradient stochastique est
présentée dans le graphe 7.

Méthode Valeur Ecart Type Temps (s) Nombre d’itérations


Formule fermée 5.5819
MC simple 5.5840 0.0023 9.0 9.3 M
Parité Call/Put 5.5830 0.0023 2.6 1.9 M
Parité Call/Put récursif 5.5833 0.0023 2.2 1.5 M
Variables antithétiques 5.5820 0.0023 2.6 1.9 M
Gradient Stochastique 5.5815 0.0023 2.3 1.2 M

Tab. 4 – Benchmark des méthodes de réduction de variance. Sur le prix d’un


Call BS à la monnaie, les méthodes apportent un gain notable et divisent le temps
par 4.

La méthode de l’Importance Sampling, elle, n’a de l’intérêt que lorsque l’op-


tion est en dehors de la monnaie. Pour tester cette technique, une simulation
a été effectuée sur un Call de strike 100, sur un sous-jacent ayant une valeur de 80
à l’instant initial. On peut observer l’effet radical de l’Importance sampling avec le
tableau 5 et le graphe 8.

19
4.2 Méthodes de réduction de variance 4 PRÉSENTATION DES RÉSULTATS

Fig. 7 – Réduction de la variance par le gradient stochastique. Prix BS estimé


par Monte Carlo. En rouge : Monte Carlo simple, en bleu : méthode du gradient
stochastique qui améliore très nettement la précision.

Méthode Formule fermée MC simple Importance


Processus Tangent Sampling
Valeur 0.0897 0.0896 0.0893
Ecart Type 0.000254 0.000237
Temps (s) 9.3 0.23
Nombre d’itérations 9.6 M 0.2 M

Tab. 5 – Reduction de variance par Importance Sampling. Prix d’un Call BS,
S0 = 80, K = 100. Augmentation drastique de la précision avec Importance Sampling
sur les calls hors de la monnaie.

4.2.2 Application à la simulation du delta d’un Call


Le tableau 6 présente les résultats des différentes techniques de réduction de va-
riance appliquées au calcul du delta d’un Call par la méthode de Maliavin. Là aussi,
on se fixe a priori une certaine largeur de fenêtre pour l’intervalle de confiance, et on
compare le nombre de simulations requises pour chacune des méthodes.
Le cas de la réduction de variance par la parité Call-Put (variable de contrôle
adaptative) est présentée dans le graphe 9.

4.2.3 Méthodes QMC


Les graphes qui suivent présentent des exemples de simulations du prix d’un Call
effectuées avec QMC.
Le graphe 10 compare une simulation Monte Carlo habituelle par rapport à une
simulation avec QMC, en utilisant la suite de Halton. Il est à noter que la simulation

20
4.2 Méthodes de réduction de variance 4 PRÉSENTATION DES RÉSULTATS

Fig. 8 – Réduction de la variance par l’Importance Sampling. Prix d’un Call


BS, S0 = 80, K = 100. en rouge : Monte Carlo simple, en bleu : par I.S. Augmentation
drastique de la précision avec I.S sur les calls hors de la monnaie.

Méthode Valeur Ecart Temps (s) Nombre


Type d’itérations
Formule fermée 0.63683
"MC simple Maliavin" 0.63625 0.00044 9.394 9.6 M
Reduction Variance (Ch2. du cours) 0.63625 0.00044 7.126 7.1 M
Parité Call/Put (statique) 0.63636 0.00044 5.273 4M
Parité call/put (adaptatif) 0.63715 0.00044 4.425 3.2 M
Variables antithétiques 0.63700 0.00044 4.973 3.8 M
Gradient stochastique 0.63771 0.00044 6.386 3.2 M

Tab. 6 – Benchmark des méthodes de réduction de variance. Sur le delta d’un


Call BS à la monnaie, certaines méthodes apportent un gain appréciable et peuvent
diviser le temps de calcul par 2.

QMC converge extrêmement vite vers la valeur limite, et n’a pas de biais notable.
Cependant, d’autres simulations effectuées avec la suite de Kakutani montrent une
convergence très rapide, mais avec un léger biais.
Le graphe 11 présente les résultats de la simulation de prix du Call avec QMC
Randomisé.

21
5 CONCLUSION : BENCHMARKS

Fig. 9 – Réduction de la variance par parité Call/Put (variable de contrôle


adaptative). Delta BS estimé par Maliavin. En rouge : Monte Carlo simple, en bleu :
parité Call/Put qui accélère notablement la convergence.

Fig. 10 – Prix estimé avec QMC. Prix BS estimé par Monte Carlo simple en rouge,
par QMC avec la suite de Halton en bleu. QMC a une convergence extrêmement rapide
par rapport à un Monte Carlo traditionnel.

5 Conclusion : Benchmarks
5.1 Génération du sous-jacent
La génération de ST par Euler ou Milshtein donnent des résultats très similaires
si bien qu’il est possible d’utiliser indifféremment l’une ou l’autre méthode dans les
diverses applications. Il est cependant à noter que le schéma d’Euler est légèrement
plus rapide que celui de Milshtein en raison d’un développement à un ordre moins
élevé de la formule de diffusion.

22
5.2 Calcul des sensibilités 5 CONCLUSION : BENCHMARKS

Fig. 11 – Prix d’un Call estimé avec QMC Randomisé. Prix BS estimé par
QMC randommisé avec la suite de Kakutani. La convergence est relativement rapide.

5.2 Calcul des sensibilités


Différences finies à pas constants/décroissants (cas du Call ou du Put)
→ cas d’une sensibilité du premier ordre (delta, vega)
+ Les deux méthodes donnent des résultats semblables au niveau de la précision
et du temps de calcul.
La largeur des pas de la différence n’influencent que peu la précision du ré-
sultat, l’approximation due à Monte Carlo étant prépondérante jusqu’à un
nombre élevé d’itérations.
→ cas d’une sensibilité du second ordre (gamma)
- Mauvais résultats dans le cas de la méthode à pas constants.
+ La méthode à pas décroissants est meilleure, mais reste bien inférieure à la
méthode de Maliavin.
Processus tangent :
+ Très bonne précision et très bonne vitesse de calcul
- Plus difficile à implémenter que la méthode des différences finies dans un contexte
différent de BS
Maliavin :
+ Très rapide Bonne précision pour le calcul de sensibilités d’ordre 2 (gamma).
- Précision bien inférieure par rapport au processus tangent et aux différences
finies pour le calcul de sensibilités d’ordre 2 (delta, vega).
Plus difficile à implémenter que la méthode des différences finies dans un contexte
différent de BS.

5.3 Réductions de variance


Méthodes du chapitre 2 du cours :
+ Extrêmement simple à implémenter, généralisable à de nombreuses situations.

23
5.3 Réductions de variance 5 CONCLUSION : BENCHMARKS

- Réduction de la variance assez faible.


Parité Call Put (variable de contrôle statique) :
+ Très simple à implémenter
Très bonne réduction de la variance (divise le temps de calcul par 3 dans la
simulation du prix d’un Call)
- Applicable tel quel uniquement dans le cas d’options Call ou Put.
Parité Call Put (variable de contrôle adaptative)
+ Réduction meilleure que qu’avec la technique de variable de contrôle statique
(les coefficients utilisés ont été optimisés)
- Applicable uniquement dans le cas des Call ou Put.
Variables antithétiques
+ Très facile à implémenter.
Bonne réduction de la variance.
Utilisable pour de nombreux payoff, et généralisable pour d’autres modèles.
Importance sampling
- Aucun intérêt si l’on ne se trouve pas en dehors de la monnaie.
+ Excellente réduction du temps de calcul si on se trouve en dehors de la monnaie
(divise le temps de calcul par un facteur supérieur à 10).
Gradient stochastique
- Assez complexe à implémenter, mais généralisable à de nombreux cas.
Très sensible aux paramètres utilisés.
+ Très bonne réduction de la variance

24

Vous aimerez peut-être aussi