Documente Academic
Documente Profesional
Documente Cultură
1
SYNTHESIS
Murex SAS has been founded in 1986 and is today a leading provider of financial software.
Murex is a “Front to back Office” platform that is used by various actors of financial markets.
When integrating new pay-offs in the Front office module, consultants must perform validation tests.
The purpose of those tests is to analyze the models used , produce test-codes that can compute
premium, greeks and then compare them to the results given by the Murex pricers.
The objective of my study was to help financial consultants in this process.
I focused on two types of products:
-The classical variance swap with extension to the Corridor Variance Swap which are volatility
derivative products.
-The Napoleon Option which pays a flow based on the worst performance of it’s underlying.
2
The Corridor Variance swap is an exotic version of the product where the variance is accumulated
only when the spot value is bettewn two barriers noted B1 and B2 .
T
1
GCorridor = No min al *[ * ∫ σ 2 (t ) *1B1 ≤ St ≤ B2 dt − K var
2
].
T 0
Following the idea that has been used for the classical variance swap, we apply Ito Lemna to
ln( St ) where St = max( B1 , min( B2 , St )) . This process represents the spot that is restrained bettwen the
two barriers.The function x → max( B1 , min( B2 , x)) is not regular (not C 2 ) which leads to some
technical issues. We have to use some results of the distribution theory, and Tanaka’s formula .
After some developpments, we obtain an analytic expression of the premium.
The pricers corresponding to the above theoretical description have been implemented using JAVA
language. In this step, we have studied and used various numerical algorithms existing in the
litterature (Repartition function of the normal law and it’s inverse , numerical integration methods,
simulation of random numbers, factorization of Choleski..)
For the classical variance swap, our results are very closed to the Murex values. The only issue that
has been raised is some oscillations observed in the Delta and Gamma of the Murex application.
We have tried to analyze and understand where this problem comes from.
As for the corridor variance swap, we observe a good behaviour of the test-code.
When the barrier width is large enough, the results obtained converge to a classical variance swap
premium and inversely when B1 it is closed to B2 , the premium of the corridor variance swap gets
closed to zero. The last point is related to the Napoleon Option. We have performed various tests
3
taking into account diverse pricing situations: Ex a pricing with and without dividends, pricing of an
option introduced at a past date, mono and multiasset...)
We observe that when the underlying is a single stock, the results of the test-code replicate very well
the Murex application. But for the multidimensional case, there is still an analysis to be done about
how Murex deals with the correlation bettwen the basket components.
4
CHAPITRE 1 : TESTS DE VALIDATION DU VARIANCE SWAP
5
2-1 : Méthode d’évaluation pratique du Payoff à maturité :
L’équation (1) représente la formule théorique exprimant l’écart entre la variance annualisée et le carré
du strike. En pratique, ce flux devra être payé à la date T et il faudra donc trouver une approximation
T
de la variable aléatoire FT mesurable suivante : 1/ T * σ 2 (t ) * dt . Pour cela , on remarque que
∫0
l’application de la formule d’Ito permet d’écrire que
1
d (ln St ) = ( µ (t , St ) − *σ 2 (t ))* dt + σ (t , St )* dWt P . On a donc : d < ln( S ) >t = σ (t )* dt
2
2
T
ce qui s’écrit sous forme intégrée : < ln( S ) >[0T ] = ∫ σ 2 (t ) * dt .
0
vers zéro lorsque n tend vers l’infini. En pratique, cette limite qui doit être calculée pour le processus
ln( St ) sera approximée par une somme finie. A partir de la date de signature du contrat notée to = 0 ,
on considérera comme suite de date ( t1 ,...tn ), les jours ouvrables consécutifs partant de la date to
jusqu’à la date de maturité tn = T .
.Selon la convention du marché on considère qu’il ya un nombre noté f de jours ouvrables par années
(La convention la plus répandue est de considérer f=252 jours ouvrables/an )
D’autre part, entre to et tn , il ya( n+1) jours ouvrables, on en déduit que le nombre d’années entre la
date to =0 et T est donnée par n/f.
L’approximation qui sera utilisée pour déterminer le payoff et le flux à la date de maturité est donc :
f i =n−1 f i =n−1 St
T
1/ T * ∫ σ 2 (t )* dt = * ∑ (ln(Sti+1 ) − ln(Sti ))2 = ∑ ln( i+1 )2 .
0
n i =0 n i =0 Sti
Pour cela les (n+1) valeurs de Spot St0 .....Stn seront fixées depuis la date initiale t0 jusqu’à la date
de maturité tn = T .
6
En utilisant le théorème de Girsanov, on montre l’existence d’une mesure de probabilité Q sous
t
laquelle Wt P + ∫ λ ( s) * ds est un mouvement brownien.
0
t t
dQ
( ) F t = exp[− ∫ λ ( s ) * dWsP − 0.5* ∫ λ 2 ( s ) * ds ] . Sous cette mesure risque neutre Q, la dynamique de
dP 0 0
Remarque : Nous avons également supposé que les taux sont déterministes pour pouvoir sortir le
T
discount factor exp(− ∫ r ( s ) * ds ) du terme d’espérance.
0
Cette hypothèse nous semble réaliste dans la mesure ou la plupart des contrats de Variance swap sont
souvent de maturité courte.
7
1
T
2 ST −2 Q
E Q [ * ∫ σ 2 (t ) * dt ] = E Q [− *(ln( )] = E [ln( ST ) − ln( F (0, T )] .
T 0 T F (0, T ) T
Le terme de droite peut être calculé analytiquement. Pour cela on va utiliser le résultat si dessous qui,
traduit le fait que n’importe quel payoff de type f ( ST ) avec f suffisamment régulière, peut être
recouvert par une combinaison de call et Put ( ST − K )+ et ( K − ST ) + .
Il s’agit du théorème de Breeden Litzenberger (1973) [2].
Enoncé :
Pour toute fonction deux fois différentiable et un point a de son domaine de définition , on peut écrire
pour tout x,
+∞ a
+ +
f ( x) − f (a) = f ' (a)*( x − a) + ∫ ( x − K ) * f ( K )* dK + ∫ ( K − x) * f ( K )* dK .
'' ''
a 0
Preuve :
x
Cela vient du fait que f(x)-f(a)= f ( x ) − f (a ) = ∫ f ' ( K ) * dK . On peut ensuite intégrer par partie en
a
posant v = f '
et u = 1 .
'
x
f ( x) − f (a) = [ f ' ( K ) *( K − x)]ax − ∫ ( K − x) * f ''( K ) * dK .
a
+ +
On peut écrire que K − x = [( K − x) − ( x − K ) ]
x x
On en déduit que : f ( x) − f ( a ) = f ' ( a ) * ( x − a ) + [ ∫ ( x − K ) + * f ''( K ) * dK − ∫ ( K − x ) + * f ''( K ) * dK ]
a a
+ +
En remarquant que ( x − K ) =0 pour K ≥ x et ( K − x) =0 pour K ≤ x , on obtient la relation
+∞ a
+ +
cherchée : f ( x) − f (a ) = f ' (a ) *( x − a ) + ∫ ( x − K ) * f ( K ) * dK + ∫ ( K − x) * f ( K ) * dK .
'' ''
a 0
En appliquant ce résultat qui vient d’être établi à la fonction f : x → ln( x) on peut poursuivre le
calcul d’espérance en développant le membre de droite.
−2 Q
T
1 2 ST
E Q [ * ∫ σ 2 (t ) * dt ] = E Q [− *(ln( )] = E [ln( ST ) − ln( F (0, T )] =
T 0 T F (0, T ) T
+∞
S − F (0, T )
a
2 + 1 1
= * E Q [( T + ∫ (ST − K ) * 2
* dK + ∫ ( K − ST ) + * 2 * dK )] .
T F (0, T ) a
K 0
K
En remarquant que le premier terme sous l’espérance représente le payoff d’un contrat forward au prix
« juste », on obtient après interversion de l’espérance et de l’intégrale.
T +∞ F (0,T )
1 2 1 1
E Q ( * ∫ σ 2 ( s) * ds) = *[ ∫ E Q ( ST − K ) + * 2 * dK + ∫ E Q ( K − ST ) + * * dK )] .
T 0 T F (0,T ) K 0
K2
On peut maintenant donner une expression de la prime du variance swap de strike K var
T T
0
∫
P= E Q [ N *(1/ T * ∫ σ 2 (t ) * dt − K var 2 )] * exp(− r ( s ) * ds ) =
0
+∞ F (0,T )
2 1 1
* N *[ ∫ Disc (0, T ) * E Q ( ST − K ) + * 2 * dK + ∫ Disc (0, T ) * E Q ( K − ST ) + * * dK ) − K 2 var * Disc (0, T )]
T F (0,T )
K 0
K2
T
∫
avec Disc(0,T)= exp(− r ( s ) * ds ) , N le nominal en EUR et K var le Strike du variance Swap.
0
8
On note CallBS (t , St , T , σ K r ) et PutBS (t , St , T , σ K r ) les fonctions de prix Black Scholes pour un put
et un call sur le sous-jacent de strike K.
Le paramètre r représente le taux zéro coupon entre la date initiale et la maturité T . Il est lié au taux
T
court introduit précédemment par ( r = 1 * r (t ) * dt ).
∫ T 0
On se place dans le cas général ou la volatilité dépend du strike pour prendre en compte le phénomène
de smile observé dans le marché.
En fin de compte, la relation ci après donne la prime à la date initiale t = 0 .
+∞ F (0,T )
2 1 1
P = * N *[ ∫ CallBS (t = 0, S0 , T , σ K r )* 2 * dK + ∫ PutBS (t = 0, S0 , T , σ K r )* 2 * dK ) − K 2 var * Disc(0, T )]
T F (0,T )
K 0
K
de Monte-Carlo. Différentes études sur la modélisation des processus de volatilité existent dans la
littérature comme celui de Heston par exemple.
L’avantage du modèle retenu par Murex est qu’il ramène le calcul d’espérance à priori compliqué à
une espérance du type E Q ( f ( ST )) et donne une formule de pricing analytique simple à mettre en
œuvre. Egalement il a l’avantage de ne pas spécifier pas un modèle stochastique de volatilité qui s’il
est inadapté ou mal calibré peut être source d’erreur.
Les développements réalisés dans le logiciel Murex pour le variance swap simple utilisent donc le
modèle analytique.
Concernant les choix d’implémentation du modèle dans Murex, on peut retenir les points suivants :
-Pour éviter des problèmes numériques dus à l’interpolation de la smile pour des options très en dehors
de la monnaie, la borne zéro dans l’intégrale du Put est remplacée par
Low = F (0, T ) *exp[− N std * vol ATM * T ] ou N std est paramétrable par l’utilisateur (valeur de 10 par
défaut), et Up= F (0, T ) *exp[ + N std * vol ATM * T ] . vol ATM est la volatilité interpolée sur la smile pour
un strike égal au forward F(0,T).
-L’intégrale sur les Strikes est réalisé dans Murex par la méthode de quadrature de Gauss Legendre.
∫
relation : F (t , T ) = St *exp( r (t ) * dt ) = St *exp(r *(T − t )) . Et enfin
0
1
ln( F / K ) + *(T − t )σ K2
d1 = 2 et d 2 = d1 − σ K * T − t .
σK * T −t
Les formules de Put sont obtenues à l’aide de la relation de Parité.
9
CallBS (t , St , T , σ K r ) − PutBS (t , St , T , σ K r ) = St − K *exp(−r (T − t )) .
Pour la fonction de répartition de la loi normale, on utilise l’algorithme classique suivant:
1
y=
1 + 0.2316419 x
z = 1.330274429 y 5 − 1.821255978 y 4 + 1.781477937 y 3 − 0.356563782 y 2 + 0.31938153 y
x2
z −
ν = 1− e 2
2π
ν pour x ≥ 0
N ( x) =
1 −ν pour x ≤ 0
-Ensuite, les calculs d’intégration sur strike sont faits en utilisant la méthode des rectangles.
Notons que les développements de Murex utilisent plutôt la quadrature de Gauss Legendre et cela
constitue la principale différence entre notre code test et l’implémentation de Murex.
-La surface de volatilité est interpolée linéairement, ce qui correspond au mode d’interpolation par
défaut effectué dans Murex.
Les valeurs de prime sont calculées pour une suite de 200 valeurs de Spot allant de S min = 20 , à
S max = 50 et sont ensuite comparées à celles données par l’application Murex. Le graphe ci après
résume les résultats de ce test-case.
10
Nous constatons une réplication quasi-exacte de la prime donnée par Murex . Sur l’ensemble des test-
case considérés, les résultats sont satisfaisants. L’écart relatif n’excède pas 0.04%.
En pratique, on calcule :
Up F (0,T )
2 1 1
P = * N *[ ∫ CallBS (t = 0, S0 , T , K , σ K r )* 2 * dK + ∫ PutBS (t = 0, S0 , T , K , σ K r )* 2
* dK ) − K 2 var * Disc(0, T )]
T F (0,T )
K Low
K
Low = F (0, T ) *exp[ − N std * vol ATM * T ] ou N std est paramétrable par l’utilisateur (valeur de 10 par
défaut), et Up= F (0, T ) *exp[ + N std * vol ATM * T ] . vol ATM est la volatilité interpolée sur la smile
pour un strike égal au forward F(0,T).
Dans l’application Murex, cette intégrale est discrétisée par une quadrature de Gauss Legendre en
utilisant 32 valeurs de strike pour les Call variant entre F(0,T) et la limite supérieure d’intégration
( K c1.....K c 32 ) et 32 valeurs de strike pour les Puts.( K p1.....K p 32 ) .
En regardant l’expression établie pour la prime, on peut écrire en toute généralité :
Pt = P (t , T , r , St , K ci , σ Kci , K Pi , σ K Pi ) .
On pourra remarquer que ce produit présente à priori une sensibilité à l’ensemble de la courbe de smile
de volatilité correspondant à la maturité.
Les principales sensibilités calculées dans Murex sont les suivantes :
∂P
-Sensibilité au Spot : ∆ = . Elle est calculée par différence finie.
∂St
11
P ( St + ε * St ) − P ( St )
Autrement dit, à partir du calcul de la prime, Murex évalue : .
ε * St
Le Gamma correspondant à la dérivée partielle d’ordre deux par rapport au spot est aussi évalué en
différence finie.
-Sensibilité à la volatilité :
Le produit a une sensibilité à l’ensemble de la courbe de smile de volatilité correspondant à la
maturité. Pour chaque valeur de volatilité intervenant dans la formule
Pt = P (t , T , r , St , K ci , σ K ci , K Pi , σ K Pi ) , on peut calculer une sensibilité partielle.
∂Pt ∂Pt
Murex permet de visualiser les différentes valeurs , (Véga par strike) et affiche enfin
∂σ K ci ∂σ K pi
∂Pt ∂Pt
un Véga agrégé= ∑ ∂σ
i
+
∂σ Kci
.
K pi
+∞ F (0,T )
2 1 1
P= * N *[ ∫ CallBS (t = 0, S0 , T , K , σ K r )* 2 * dK + ∫ PutBS (t = 0, S0 , T , K , σ K r )* * dK ) − K 2 var * Disc(0, T )]
T F (0,T )
K 0
K2
Cas du Delta :
Nous avons implémenté deux méthodes :
-Le calcul par différence finie P( St + ε * St ) − P( St ) qui correspond au mode de calcul implémenté
ε * St
dans l’application Murex.
- Le calcul analytique :
Cela consiste à dériver directement l’expression de la prime rappelée ci dessus.
On obtient, après dérivation sous signe somme :
+∞
∂P 2
F (0,T )
1 1
= * N *[ ∫ ∆Call (t = 0, S0 , T , K , σ K , r ) 2 * dK + ∫ ∆Put (t = 0, S0 , T , K , σ K , r ) * 2 * dK ]
∂S0 T F (0,T )
K 0
K
PutBS (t = 0, K = F (0, T ), T , σ K = F (0,T ) , r ] CallBS (t = 0, K = F (0, T ), T , σ K = F (0,T ) , r )
+ −
F (0, T ) 2 F (0, T ) 2
Les deux termes supplémentaires sont dus au fait que les bornes des intégrales dépendent du paramètre
spot par rapport auquel on dérive.
Mais on remarque aussi qu’ils vont se compenser par la formule de Parité Call-Put dans la mesure ou
il s’agit d’une différence de Call et Put pris à la monnaie Forward.
Finalement, on tombe sur l’expression suivante :
+∞
∂P 2
F (0,T )
1 1
= * N *[ ∫ ∆Call (t = 0, S0 , T , K , σ K , r ) 2 * dK + ∫ ∆Put (t = 0, S0 , T , K , σ K , r ) * * dK ]
∂S0 T F (0,T )
K 0
K2
Cas du Véga :
On utilise la méthode de calcul analytique, comme cela est fait dans Murex.
En discrétisant l’expression de la prime initiale avec les valeurs de strike notées K c1.....K cn pour
l’intégrale des Calls et K p1 ....K pn pour l’intégrale des Puts, on a en utilisant les rectangles,
12
2 Kcn
CallBS ( S0 , T , Kci , σ Kci , r )
P= * N *[∑ ( K ci +1 − K ci )
T Kc1 K ci2
K pn
PutBS ( S0 , T , K pi , σ Kpi , r )
+∑ *( K pi +1 − K pi ) − K 2 var * Disc(0, T )]
K p1 K pi2
vu que K c1 et K pn approximent les bornes zéro et l’infini dans l’évaluation discrète des intégrales de
Call et Put, cette expression n’est rien d’autre que la forme discrétisée de l’expression
+∞
2 1
Vega = * N *[ ∫ Vega (t = 0, S0 , T , K , σ K r ) * 2 * dK ] ,
T 0
K
Pour résumer, nous avons donc implémenté numériquement dans le cas général d’une smile
quelconque :
-Le Delta analytique et le Delta par différence finies.
-Le Véga analytique.
Prenons comme test case, un variance swap de maturité deux mois avec une surface de smile
interpolée linéairement comme dans la section 2-3.
Les sensibilités obtenues sont comparées à celle de Murex pour une rangée de 200 valeurs de Spot.
Les graphes ci dessous synthétisent les résultats du test.
13
On constate que le Delta de notre code test (que ce soit en analytique ou en différence finies) et celui
de Murex restent très proches.
Les courbes présentent clairement les mêmes tendances.
Les seules différences proviennent du fait que les valeurs de Delta-Murex présentent de légères
oscillations. Ce comportement oscillatoire est très amplifié lorsqu’on observe le Gamma . On peut
essayer d’en comprendre l’origine en reprenant la démarche de calcul utilisée dans Murex.
Le Delta étant évalué par différences finies :
-On commence donc par évaluer La prime pour un spot donné P(t, St ..) , en intégrant des primes de
Call et Put par la méthode de Gauss Legendre.
Notons que la fonction K → σ ( K ) n’est que C 1 par morceaux vu que la volatilité est interpolée
linéairement. Ainsi les fonctions de Prix de Call et Put : K → CallBS (t , St , T , K , σ K , r ) et
K → PutBS (t , St , T , K , σ K , r ) ne sont pas C .
1
Le principe de la quadrature de Gauss Legendre est d’approximer la fonction à intégrer par une
fonction polynomiale ayant les mêmes valeurs que la fonction initiale aux points de quadrature K i .
Ainsi, on peut retenir que dans le calcul de la prime P(t, St ..), la fonction linéaire par morceaux
K → σ ( K ) sera d’abord approximée par une première fonction polynomiale. Il s’agit d’une fonction
polynomiale choisie de façon à matcher exactement la fonction initiale aux points de la quadrature (en
l’occurrence ici, les strikes de quadrature…)
-Ensuite on calcule P(t, St + ε * St ..), qui correspond à la prime lorsque le spot est shifté.
Les bornes d’intégrations changent, et du même coup, ces strikes de la quadrature vont changer. La
conséquence est que une autre fonction polynomiale différente de la première sera utilisée pour
approximer la smile K → σ ( K ) . Il y a donc un changement de courbe de smile qui se fait
implicitement lorsqu’on allie le calcul de la prime par Gauss Legendre et la méthode des différences
finies pour le Delta.
Cela est à l’origine des fluctuations qu’on observe sur le Delta et c’est naturellement encore plus
amplifié sur le Gamma comme on peut le voir sur le graphe suivant.
14
Résultats relatifs au Véga :
15
Une amélioration possible pourrait être d’implémenter dans Murex, un calcul analytique du Delta et
du Gamma, comme cela est fait pour le Véga.
De ce fait, on pourra obtenir des indicateurs de risque stables sans oscillations, tout en conservant
l’avantage de la méthode de Gauss Legendre qui est de faire une quadrature rapide et très précise avec
seulement 32 strikes.
∫σ
2
On peut remarquer que, dans cette équation, (t ) * dt est déterministe. On appelle généralement
0
t
1
Variance passée la quantité : * ∫ σ 2 (t ) * dt et est en pratique calculée sur le marché en utilisant les
t 0
valeurs de spot fixées depuis la date d’origine du contrat jusqu’à la date courante. Ensuite, on peut de
la même façon que pour un pricing à la date initiale, calculer de manière analytique
T
1
* σ 2 ( s ) * ds ] en utilisant les prix à la date t d’une combinaison de Call et Put ayant pour
T − t ∫t
EQ[
maturité T.
16
T Disc(0, T ) t
PFwdstart (t1 , T ) = * P (0, T ) − * 1 * P (0, t1 ) − K var
2
* Disc(0, T ) .
T − t1 Disc(0, t1 ) T − t1
En résumé, le pricer de variance swap classique dont on dispose dans Murex peut être utilisé pour
trouver les prix de contrats incluant des clauses de type « Forward Start ».
T
1
GCorridor = N *[ * ∫ σ 2 (t ) *1St ∈[ B1 . B2 ] dt − K var
2
].
T 0
Une version très légèrement différente appelée Conditional Variance Swap, consiste à dire que le
Strike qu’on a fixé dans le contrat K var , sera aussi adapté de façon à tenir compte uniquement des
jours ou le spot est resté entre les deux barrières.
Ainsi, si on désigne par NTotal ,le nombre total de jours sur la période [0 T], on pourra calculer à
maturité le nombre de jours effectifs ou le spot est resté entre les deux barrières par la formule :
i = NTotal
N effectif = ∑i =1
1St ∈[ B1 . B2 ] . La valeur ajustée de K var
2
sera ensuite calculée de façon
N effectif 2
proportionnelle et la variance seuil ajustée sera * K var .
NTotal
Ainsi, le Conditional Variance Swap aura un pay-off qui s’écrira.
T
1 N
GConditionnal = N *[ * ∫ σ 2 (t ) *1St ∈[ B1 . B2 ] dt − effectif K var
2
].
T 0 NTotal
Dans ce qui suit, nous allons considérer le cas du Corridor Variance Swap de pay-off à maturité T égal
T
1
à : GCorridor = N *[ * ∫ σ (t ) *1St ∈[ B1 . B2 ] dt − K var ] .
2 2
T 0
17
Mais à la différence du variance swap classique, l’intégrale concerne cette fois ci un processus de
variance corrigé de façon à être nul lorsque le spot sort des barrières.
Ainsi, l’idée est d’essayer d’adapter la méthode utilisée pour le variance swap, en faisant du calcul
d’Ito non plus sur ln( St ) mais plutôt sur ln( St ) avec St = max( B1 , min( B2 , St )) .
On remarquera que St représente le processus St « restreint » entre les barrières B1 et B2 .
C’est à dire que si St ∈ [ B1.B2 ] alors St = St , et St = B2 pour St ≥ B2 et enfin St = B1 pour
St ≤ B1 . Dans le cadre du corridor variance swap, ce processus va jouer le même rôle que celui de St
pour le variance swap classique.
En considérant la fonction :f x → max( B1 , min( B2 , x)) , on a : St = f ( St ) .
Par application du lemme d’Ito au processus St avec la fonction x → ln( x) ,
Vu que la fonction n’est pas suffisamment régulière (de classe C 2 ) , on est plus dans le cadre de la
formule d’Ito classique. On utilisera la formule de Tanaka qui donne une formule de même type que
celle d’Ito en utilisant des distributions à la place des dérivées classiques.
Applications :
Pour tout réel a, on appelle distribution de Dirac en a, la forme linéaire telle que
< δ a , Ψ >= Ψ (a ) . On peut définir par δ a ( x) , la fonction qui s’identifie à cette distribution.
C'est-à-dire que dans l’espace des fonction test, ∀Ψ , ∫ δ a ( x) *Ψ ( x) * dx = Ψ (a ) .
R
18
Considérons maintenant la fonction qui a x associe H a ( x) = 1x > a . Cette fonction n’est à priori pas
dérivable dans le cadre usuel mais peut être associée à la distribution u ( H a ) , telle que
< u ( H a ), Ψ >= ∫ H a ( x) * Ψ ( x) * dx = ∫ Ψ ( x) * dx
R R
Ainsi on voit que la dérivée de cette distribution est celle de Dirac définie plus haut.
En conclusion, la fonction H a ( x) = 1x > a a pour dérivée (au sens des distributions) , la fonction
x → δ a ( x) qui est celle associée à la distribution de Dirac.
Si on revient à notre problème initial, qui était de chercher la dynamique du processus St = f ( St ) avec
f : x → max( B1 , min( B2 , x)) , on remarque d’abord que :
f ' ( x ) = 1]B1.B 2[ ( x) = H B 2 ( x ) − H B1 ( x ) . D’après ce qui a été vu plus haut, on peut définir la dérivée
seconde au sens des distributions par
f 2 ( x) = δ B 2 ( x) − δ B1 ( x) .
La formule ci-dessous étend le lemme d’Ito :
Formule de Tanaka :
Pour toute fonction f(t, x) telle que l’on puisse définir au sens des distributions les quantités
∂f ∂f ∂ 2 f
, , , on a pour toute semi-martingale continue X t
∂t ∂x ∂x 2
∂f ∂f 1 ∂2 f
df (t , X t ) =
* dt + * dX t + * 2 * d < X >t .
∂t ∂x 2 ∂x
En appliquant ce résultat à St = max( B1 , min( B2 , St )) , on a :
1
d St = 1St ∈]B1.B 2[ * dSt + *(δ B2 ( St ) − δ B1 ( St )) * σ 2 * St2 * dt
2
Notons que on nous étions parti de la relation : d ln( S ) = d St − d < S >t . Vu que l’on vient de calculer
t 2
St ( St )
d St , il reste maintenant à évaluer d < S >t . Pour cela, on va voir que le terme
1
*(δ B2 (St ) − δ B1 ( St ))*σ 2 * St2 * dt est de variation totale bornée. Ainsi , il n’interviendra pas dans la
2
variation quadratique, et on pourra conclure que :
d < S > t = 1S ∈]B1. B 2[ * d < S > t = 1S ∈]B1. B 2[ * σ 2 (t ) * S 2 (t ) * dt .
t t
L’argument que nous allons utiliser consiste à identifier la quantité (δ B1 ( St ) * d < S >t avec le temps
local du processus St en B1 et d’utiliser le fait que le temps local est un processus croissant donc de
variation totale finie.
(i)-Pour toute fonction convexe de classe C 2 , si X t est une semi-martingale continue, on peut écrire :
1
df ( X t ) = f ' ( X t )dX t + * dAt f ou le processus At f = f 2 ( X t ) * d < X >t est croissant et positif par
2
convexité de la fonction f.
19
(ii)-La fonction convexe : f x → ( x − K ) + n’est pas C 2 mais est limite croissante d’une suite f n de
fonctions régulières pour laquelle les processus croissants At f convergent aussi vers un processus n
+ 1 B
En vertu du résultat précédent, on a donc d ( X t − B1 ) = 1X t > B1 * dX t + * Lt 1
2
+
Par ailleurs, en appliquant la formule de Tanaka à x → ( x − B1 ) on a
1
d ( X t − B1 ) + = 1X t > B1 * dX t + * δ B1 ( X t ) * d < X >t .
2
On en déduit, par identification que δ B1 ( X t ) * d < X >t = Lt 1 . Le temps local étant croissant, il est
B
de variation totale finie, donc de variation quadratique nulle. On peut donc écrire :
d < S > t = 1St ∈]B1. B 2[ * d < S > t = 1St ∈]B1. B 2[ * σ 2 (t ) * S 2 (t ) * dt et par la suite
d < St >
= 1St ∈]B1.B 2[ * σ 2 (t ) * dt .
2
S t
20
d ( St − B2 ) + d ( St − B2 ) d ( St − B2 ) +
= *1St ≥ B2 = .
St B2 B2
dSt dSt dSt dSt
1St ≥ B * = *1St≥ B et enfin 1St ≤B1 * = *1St ≤B .
2
St B2 2
St B1 1
On remarque d’autre part que par différence des formules de Tanaka appliquées avec les fonctions
f ( x) = ( x − B2 ) + et g ( x) = ( B2 − x) + , on a d ( St − B2 ) + − d ( B2 − St ) + = (1S + 1S ) * dSt . t ≥ B2 t ≤ B2
d St
Par remplacement dans l’expression de , il vient :
St
d St dSt dS dS d ( B1 − St ) + d ( B2 − St ) +
= (1St ≤ B − 1St ≤ B ) * − 1St ≤ B * t + 1St ≤ B * t + −
St 2 1
St 2
B2 1
B1 B1 B2
d St 1 1 dS d ( B1 − St ) + d ( B2 − St ) +
Par factorisation : =( ( B2 − St ) *1St ≤B − ( B1 − St ) *1St ≤ B ) t + −
St B2 2
B1 1
St B1 B2
d St ( B2 − St ) + ( B1 − St ) + dSt d ( B1 − St ) + d ( B2 − St ) +
On en déduit finalement : =[ − ]* + −
St B2 B1 St B1 B2
T
d St T
( B2 − St ) + ( B1 − St ) + dSt ( B − ST ) + ( B2 − ST ) + ( B1 − S0 ) + ( B2 − S 0 ) +
Par intégration : ∫
0 St
=∫
0
B2
−
B1
]*
St
+[ 1
B1
−
B2
−
B1
+
B2
]
On prend l’espérance en remarquant que pour une action (sans dividendes), ni tax-credit, on a
dSt dSt
EQ ( ) = r (t ) * dt ou r(t) est le taux sans risque instantané. D’autre part, on sait aussi que est
St St
indépendant de la tribu Ft , donc de toutes les variables aléatoires Ft mesurables.
En notant Put (t0 = 0, t , K ) le prix initial non discounté, d’un put de maturité t et de strike K, on a
T
d St Put (t0 = 0, T , B1 ) Put (t0 = 0, T , B2 ) ( B1 − S0 ) + ( B2 − S0 ) + T Put (t0 = 0, t , B2 ) Put (t0 = 0, t , B1 )
E Q (∫ ) =[ − − + ]+ ∫ − ]* r (t )dt
0 St B1 B2 B1 B2 0 B2 B1
Q ST
b) Calcul de la seconde espérance : E [ln ]
St
On pose ST1 = max( ST , B1 ) et ST2 = max( ST , B2 ) .
ST1 max( ST , B1 ) B1 S
2
= = *1ST ≤B + T *1B1 ≤ ST ≤ B2 + 1ST ≥B On a
ST max( ST , B2 ) B2 1
B2 2
ST1 max( ST , B1 ) B1 S
2
= = *1ST ≤ B + T *1B1 ≤ ST ≤ B2 + 1ST ≥ B .
ST max( ST , B2 ) B2 1
B2 2
ST1 ST
On a donc prouvé que = , ce qui implique la relation ln( ST ) = ln( ST1 ) − ln( ST2 ) + ln( B2 ) .
ST2 B2
ST ST1 S2 B
On en déduit que : ln( ) = ln( ) − ln( T ) + ln( 1 ) .
St B1 B2 St
La dernière étape est d’utiliser le théorème de Litzenberger qu’on a déjà utilisé pour le variance swap
classique.
21
S i − Bi +∞ ( STi − K ) + ( K − STi ) +
B
STi i
En notant Disc(0,T) , le discount factor entre les dates t=0 et T, lu sur la courbe des taux initiale,
la prime à la date initiale d’un Corridor Variance swap de Payoff est donc obtenue par la formule
analytique suivante.
T
N * Disc(0, T )
PCorridor = * E Q ( ∫ σ 2 (t ) *1St ∈[ B1 . B2 ] dt ) − N * K var
2
* Disc(0, T ) .
T 0
T T
d St ln( ST
Avec E Q [ ∫ 1S ∈]B1.B 2[ * σ 2 (t ) * dt ] = 2* E Q [ ∫
t
] − EQ ( )] , les deux espérances étant données par les
0 0 St St
relations ci-dessous que nous avons établi dans les sections précédentes :
T
dS Put (t0 = 0, T , B1 ) Put (t0 = 0, T , B2 ) ( B1 − S0 ) + ( B2 − S0 )+ T Put (t0 = 0, t , B2 ) Put (t0 = 0, t , B1 )
E Q (∫ t ) = [ − − + ]+ ∫ − ]* r (t )dt
0 St
B1 B2 B1 B2 0
B2 B1
22
Test Case :
Le Corridor Variance Swap considéré est de maturité T= 2m (deux mois), de strike K var =0.
Pour le sous-jacent, on conserve la même surface de volatilité σ = f (T , K ) que celle a été présentée
dans le test-case du variance swap classique. On dispose aussi de la courbe de taux initiale sur
laquelle on fait des interpolations linéaires pour déterminer le taux correspondant à une maturité
donnée. (Ex dans notre cas, le taux 2 mois est de 3.013%).
La valeur initiale du spot est S0 = 34 .
On sait qu’en pratique, si on réalise des simulations de trajectoires de l’actif, il y a un « couloir de
diffusion ». Cela est lié au fait que le mouvement brownien est tel que Wt suit une loi N(0,t).
Donc, il sera avec une probabilité de 95% entre les deux demi paraboles y = ±1.96 * t .
Connaissant la courbe de volatilité du sous-jacent, nous pouvons ainsi déterminer le couloir de
diffusion de notre spot, puis choisir deux valeurs de barrière qui sont telles que l’évènement
St ∈[ B1B2 ] soit de probabilité supérieure ou égale à 95%.
Dans notre cas-ci, on obtient après calculs B1 = 29.5 et B2 = 43 .
Le principe du test est le suivant : Vu que l’évènement St ∈ [ B1 B2 ] est de probabilité élevée, il y aura
une probabilité forte pour qu’on accumule « toute la variance » , et donc la prime du corridor variance
swap doit être très proche de celle du variance swap classique sur le même sous-jacent.
Dans un second temps, si on laisse B2 fixe égal à 43 et qu’on augmente progressivement B1 ,
l’évènement St ∈ [ B1B2 ] aura une probabilité de plus en plus faible qui va tendre vers zéro lorsque
B2 sera très proche de B1 . Donc, on s’attend à ce que la prime du corridor variance swap baisse
jusqu’à s’annuler. La courbe ci-dessous permet de résumer les résultats du code-test, et qui sont
cohérents avec les aspects évoqués ci-dessus.
La prime du corridor Variance swap décroît bien lorsque la barrière inférieure est augmentée.
Notons que cette baisse est très prononcée lorsque B1 dépasse le spot. En effet dans ce cas de figure,
la condition St ≥ B1 revient à ne considérer que les parties de la trajectoire ou le spot ne descend pas
de sa valeur initiale. Globalement, le modèle analytique développé pour le Corridor Variance Swap est
satisfaisant, dans le sens ou il permet de retrouver sur des cas limite, les résultats du variance swap
classique.
23
CHAPITRE 3 : TESTS DE VALIDATION SUR LE PAYOFF NAPOLEON
Ce dernier chapitre est consacré aux tests réalisés sur le Pay-Off Napoléon.
Il s’agit d’un produit très différent des dérivés de volatilité que nous avons vus précédemment.
Le flux payé par une telle option est lié à des performances du cours du sous-jacent calculée sur la
durée de vie de l’option. Comme on le verra, les techniques de valorisation ne seront plus analytiques,
mais basées sur des simulations.
L’objectif est, comme précédemment, d’arriver à valider les résultats fournis par l’application Murex
et ensuite d’apporter éventuellement une ouverture sur la problématique étudiée.
dSt
= r (t ) * dt + σ (t ) * dWt Q .
St
24
1-1 : Implémentation d’un Simulateur Monte-Carlo
Le prix de l’option s’exprime par l’égalité :
T
S
P0 = E Q [exp(− ∫ r ( s ) * ds ) * max(0, C + min1≤i ≤ N ( ti − 1))] . Le calcul d’espérance de la variable
t0
St 0
aléatoire GT = max(0; C + min1<=i <= N ( Sti / St 0 ) − 1) va être fait par la méthode de Monte-Carlo.
Pour cela, nous allons suivre la démarche suivante :
-On commence par générer N trajectoires indépendantes du sous-jacent. Chacune d’entre elles permet
de faire un tirage indépendant de GT que l’on notera GTk .
1 k = N k ps
-La loi forte des grand nombres assure que * ∑ GT →E Q (GT ) .
N k =1
-On désigne par Erreur(N), l’erreur commise en calculant l’espérance de cette façon avec N
trajectoires. Il s’agit de la différence en valeur absolue entre la vraie valeur de l’espérance et
l’estimation qu’on en fait. Le théorème central limite permet de donner une évaluation de l’erreur.
k=N
1 1 k =N
On commence par calculer un estimateur de var(G) : Var (GT ) = * ∑ [GTk − ( * ∑ GTk )]2
N − 1 k =1 N k =1
N
On sait que * Erreur ( N )
loi
→ N (0,1) . D’autre part, on sait que une variable aléatoire de loi
Var (GT )
normale est avec une probabilité de 95% dans l’intervalle [-1.96 1.96].
On en déduit que l’erreur à 95% dépendra en fait du nombre de trajectoire N et de la variance de
Var (GT )
Var (GT ) . On l’approxime par : Erreur95% = 1.96* avec
N
k =N
1 1 k =N
Var (GT ) = * ∑ [GTk − ( * ∑ GTk )]2 .
N − 1 k =1 N k =1
Cela montre que, on peut réduire l’erreur en augmentant le nombre de trajectoires, mais aussi en
réduisant la variance de la variable aléatoire dont on veut calculer l’espérance.
t0
2 0 t t 0
ti
Il s’agit de la variable aléatoire obtenue à partir de Sti en remplaçant ∫ σ ( s)* dWsQ par son opposé.
t0
Remarquons que par symétrie du brownien, E ( Sti ) = E ( Sti ) et en plus cov( Sti , Sti ) ≤ 0 . Ensuite,
* *
2
variable aléatoire : GT + GT plutôt qu’à GT .
*
2
GT + GT*
L’intérêt de faire cela provient du fait que, cov(GT , G ) ≤ 0 donc Var (
*
T ) ≤ Var (GT ) . Cela
2
va donc améliorer la précision des résultats.
25
t t
1
St = F (t0 , t ) *exp[− * ∫ σ 2 (t ) * dt + ∫ σ ( s ) * dWsQ ] .
2 t0 t0
On dispose d’une courbe de taux zéro coupon, et d’une courbe de volatilité sur laquelle nous réalisons
des interpolations linéaires permettant de calculer les quantités :
F (t0 , t ) = St 0 *exp(r (t0 , t ) *(t − t0 )) ou r (t0 , t ) est le taux Zéro -Coupon interpolé pour la date t à
partir de la courbe de taux de la date t0 .
t
Après avoir simulé des nombres aléatoires dans la loi uniforme U(0,1), nous en déduisons une
simulation de nombres dans la loi normale N(0,1) par la méthode d’inversion de la fonction de
répartition. On désigne par F, la fonction de répartition de la loi normale centrée N(0,1).
−1
Si X suit une loi U(0,1) , alors F ( X ) suit la loi normale centrée réduite.
En effet ∀M , P[ F −1 ( X ) ≤ M ] = P[ X ≤ F (M )] = F (M ) .
Il n’y a pas de formule analytique pour inverser la fonction de répartition de la loi normale, mais il
existe dans la littérature, de nombreux algorithmes d’approximation comme celui de Moro. [4]
26
En supposant connu N(x), on retrouve la valeur de x de la manière suivante.
On pose y=N(x)-0.5.
3
∑a * y i
2i
ti ti
Sti = F (t0 , ti ) * ∫ σ 2 (t ) * dt − ∫ σ ( s ) * dWsQ ] ou F (t0 , ti ) désigne le forward vu de t0 à la date ti .
t0 t0
27
1-3 : Présentation des Résultats Numériques
On peut résumer par les deux courbes ci-dessous, les résultats du pricer. Sur un test-case bien précis,
on observe le comportement de la prime lorsqu’on fait varier le nombre de trajectoires.
On constate que les résultats de prix que nous avons convergent vers 0.0045 (qui est exactement la
valeur donnée par l’application Murex sur ce test-case).
Mais, on remarque surtout que la prime obtenue avec la méthode antithétique converge clairement plus
vite. Il ya moins de variance que dans le cas de la prime calculée par la méthode classique.
On constate également sur la courbe de droite, le fait que l’erreur à 95% obtenue avec N trajectoires
antithétiques est plus faible que celle obtenue avec 2.N trajectoires classiques.
L’implémentation de la réduction de variance par variables antithétiques permet donc d’améliorer les
performances de notre pricer.
Notons qu’avec 200.000 trajectoires, un ordre de grandeur acceptable de l’erreur ( 3.10e-5) .
Par la suite, on fera les comparaisons avec Murex en s’arrêtant à 4 décimales après la virgule.
28
Cas N1 : Pricing Date initiale sans dividendes avec Cap et Floor
Lorsqu’on est à la date initiale ou aucun fixing n’est encore réalisé, on simule chaque valeur de spot en
prenant le spot courant. (L’expression utilisée dans le cas sans dividendes est :
ti
1 ti ti
Sti = St 0 * exp[ ∫ r ( s ) * ds − * ∫ σ 2 (t ) * dt − ∫ σ ( s ) * dWsQ ]
t0
2 t0 t0
Sti
Ainsi, dans la simulation du ratio de performance
St0 , il n’ya plus aucune dépendance en la valeur du
spot initial St . On retrouve donc mathématiquement le fait que les primes à la date initiale soient
o
insensibles au spot. Cela ne sera plus vérifié lorsque l’on fera le pricing à une date ultérieure après
fixing de la première valeur du spot.
D’autre part les résultats du code test répliquent bien ceux de Murex avec une erreur relative de 0.4%.
On peut aussi introduire le cas ou l’action verse un dividende à tdiv = to + 57 jours (La date est
exprimée en fonction de la date initiale de signature to = 0 ) et pour une valeur de 1.5 EUR.
Comme, on peut le voir, les résultats sont assez concluants.
Enfin, on peut rajouter au même case une clause de type Cap et Floor.
Le rajout du cap et floor ramène la prime minimale à la valeur du floor discounté.
On note également que la comparaison des deux code-test donne des résultats très proches comme le
montre les courbes suivantes.
29
Les résultats des tests de comparaisons sont globalement assez satisfaisants en ce qui concerne les
primes. Egalement, les sensibilités qui sont calculées à partir des primes par la méthode des
différences finies sont correctement répliquées.
Nous présentons maintenant la suite de l’étude qui consiste considérer comme sous-jacent, non plus
une action simple, mais un Basket (Panier d’actions).
Comme précédemment, on se donne sur la période [0, T] une suite de dates de fixings :
to = 0......tM = T . Chaque action (k) peut être associée à une performance minimale Pk calculée de la
Stkj
manière suivante : Pk = max[0, min1≤ j ≤ M ( − 1)] . Le Pay-Off Napoléon sur ce basket est alors donné
Stk0
par la relation suivante :
1 k =N 1 k=N Stkj
G = max[C , * ∑ wk * Pk ] = max[C , * ∑ wk * max(0, min1≤ j ≤ M ( k − 1))] ou C est un
N k =1 N k =1 S t0
coupon fixe pré-défini à l’avance. Ainsi, le flux reçu est lié à la moyenne des performances minimales
de tous les composants du basket.
On se place dans le cadre du modèle de Black Scholes multidimensionnel, et on suppose que chaque
actif a une structure par terme de volatilité. On notera σ i (t ) , la volatilité instantanée de l’actif i.
Sous la mesure de probabilité risque neutre, et en supposant qu’il n’y a pas de dividendes versés par
les sous-jacents, on écrira la dynamique de chacun de nos actifs (i) sous la forme :
dSti
= r (t )* Sti * dt + σ i (t )* Sti * dWt i .
Sti
30
uur uur
Wt = (Wt1.......Wt N ) est un mouvement brownien multidimensionnel. A chaque date Wt est une
vecteur Gaussien de moyenne nulle et de matrice de variance covariance Σ . On posera Σij = ρij * t
en notant ρij , le coefficient de corrélation entre Wt i et Wt j .
Ce coefficient permet de modéliser la corrélation entre les composants (i) et (j) du basket.
En intégrant les équations écrites précédemment, il vient pour les différents actifs
t t
1
Pour i=1, à i=N : Sti = F i (t0 , t ) *exp[ − * σ i2 ( s ) * ds + σ i ( s ) * dWsi ] ou F i (t0 , t ) désigne le
∫ ∫
2 t0 t0
uur t.......ρ * t
On suppose que la matrice de variance covariance de Wt s’écrit :
ρ * t.......t
t .........................0
La matrice A obtenue par factorisation s’écrit :
ρ * t ....... (1 − ρ 2 ) * t ..
On peut maintenant simuler un processus brownien corrélé de dimension deux par la relation
uur
Wt = (Wt1..Wt 2 ) = A *( Z t1..Z t2 ) ou Z t1 et Z t2 sont deux mouvements browniens indépendants.
31
uur
La simulation de processus corrélés St = ( St1..St2 ) , s’en suit à l’aide de la relation ci-dessous valable
t t
pour toute action Sti = F i (t0 , t ) *exp[− 1 * σ i2 ( s ) * ds + σ i ( s ) * dWsi ] , F i (t0 , t ) désignant le forward de
2∫ t0
∫
t0
uur
l’actif (i), vu de t0 à la date t. Chaque trajectoire vectorielle de St = ( St1..St2 ) permet d’effectuer un
tirage de la variable aléatoire représentant le pay-off du Napoléon sur le basket.
On en déduit ainsi, de la même façon que dans le cas mono- dimensionnel, l’estimateur du prix et de
l’erreur Monte-Carlo pour notre option.
Test-Case
En plus de l’action que l’on a déjà considérée dans les tests du Napoléon sur Equity, on, configure
une seconde action dont le spot vaut 30 et ayant une structure volatilité constante=11%.
On définit aussi un basket sur ces deux actions de poids w1 = w2 = 1 .
L’option Napoléon considérée sur ce basket est de maturité 11 mois avec des fixings mensuels.
32
Comparaisons de Primes :
Le tableau ci-dessous donne la prime obtenue lorsque on fait varier la corrélation entre les deux actifs.
La comparaison avec l’application n’est pas terminée dans la mesure ou nous avons constaté sur
quelques tests manuels que la prime Murex ne variait pas lorsqu’on faisait varier la corrélation.
Un travail d’analyse des fichiers de pricing interne Murex est donc à faire pour terminer cet aspect.
On note toutefois que la prime affichée par Murex (0.21%) , est proche de la prime que l’on obtient
avec une corrélation nulle entre nos deux actifs.
CONCLUSION GENERALE
En conclusion , nous avons pu mener les tests de validation qui sont une phase importante de
l’introduction des nouveaux pay-off.
Ce travail a été enrichissant et très formateur , dans la mesure ou il nous a permis d’entreprendre
l’étude de divers modèles de pricing ainsi que les méthodes numériques associées.
Nous avons notamment pu voir une approche analytique sur le Variance swap et le Corridor Variance
swap, avant d’aborder les méthodes de simulation de Monte-Carlo lors des tests relatifs à l’Option
Napoléon. D’un autre point de vue, nous avons aussi été confronté au problème de la mise en place
d’algorithmes numériques et de leur implémentation informatique en Java, dans le but de pouvoir
comparer nos résultats à ceux de Murex.
Même si certains tests de validation doivent être complétés , les résultats que nous avons obtenus ont
permis de bien répliquer ceux de l’application sur beaucoup d’aspects
Enfin, un autre point positif de cette expérience chez Murex, a été le contact avec le client notamment
sur les questions d’assistance technique.
33
Bibliographie
1] Demeterfi, Derman, Kamal, Kou (1999) : More than You ever wanted to Know About
Volatility Swaps- Goldman Sachs Quantitative Strategies Research Notes.
[2] Breeden Litzenberger (1978). Prices of State Contingent Claims Implicit in Option Prices.
Journal of Buisness, 51, 621, 651.
[3] ElKaraoui (2003) : Couverture des risques dans les marchés financiers.
[4] Moro (1995) The Full Monte Risk Vol8 N2 Page 57-58.
[5] Bruno Bouchard (2006) Cours ENSAE Introduction à l’Evaluation d’Actifs financiers.
34
Annexes
On considère une séquences de N entiers en sortie d’un générateurs de nombre aléatoire dans une loi
uniforme U(0,1).
1 k =N
* ∑ 1U k ≤t
ps +∞
→ E (1U ≤t ) = t .
N k =1
On compare pour une même valeur de N, la fonction de répartition obtenue par l’algorithme de
Mersenne Twister à celle obtenue par un autre générateur par défaut comme celui d’Excel.
Comme, on peut le voir, le générateur de Mersenne Twister nous donne de meilleurs résultats.
35
36