Professional Documents
Culture Documents
1
TABLE DES MATIRES TABLE DES MATIRES
I Cadre du stage 4
1 Prsentation du stage 5
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Sujet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Contraintes imposes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Dmarche et pistes explores . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.1 Optimisation du spread . . . . . . . . . . . . . . . . . . . . . . 7
1.4.2 Optimisation de la Market Law . . . . . . . . . . . . . . . . . . 8
1.4.3 Recherche mathmatique . . . . . . . . . . . . . . . . . . . . . 8
1.4.4 Recherche sur linterpolation . . . . . . . . . . . . . . . . . . . 9
1.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Le march du crdit 11
2.1 Les CDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Prix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.3 Modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.4 Autres modles . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Les CDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 Prix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3 Modle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Implmentation des pricers . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.1 Pricer de CDS . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.2 Pricer de CDO . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Base correlation - Compound correlation . . . . . . . . . . . . . . . . . 25
4 Linterpolation 40
4.1 Problmes gnraux dinterpolation . . . . . . . . . . . . . . . . . . . . 40
4.2 Stabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 Explication des diffrentes interpolations . . . . . . . . . . . . . . . . . 44
4.3.1 Linaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2
TABLE DES MATIRES TABLE DES MATIRES
5 Loptimisation 63
5.1 Algorithme doptimisation . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1.1 Modification locale de fonction . . . . . . . . . . . . . . . . . . 63
5.1.2 Critre dvaluation . . . . . . . . . . . . . . . . . . . . . . . . 64
5.2 Rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3
Premire partie
Cadre du stage
4
1 PRSENTATION DU STAGE
1 Prsentation du stage
Cette courte partie a pour vocation dcrire le droulement scientifique de ce
stage : description du sujet, dmarche, voies explores, mthodes employes.
1.1 Introduction
Le stage de recherche de 3me anne lEcole Polytechnique, en majeur math-
matiques appliques la finance, sest droul la Socit Gnrale, Londres, au
sein de lquipe "Recherche Quantitative sur les Drivs de Crdit". Cette quipe est
constitue dune dizaine de personnes, la plupart bases Paris puisque nous ntions
que 2 (mon manager et moi) Londres.
1.2 Sujet
La seconde partie du stage a consist entrer dans le sujet du stage proprement
dit intitul "interpolation et lextrapolation du smile de corrlation".
Seule linterpolation fut considre pour linstant, tant donn que le stage nen
est encore qu mi-parcours.
Pour tenter dtre clair sans entrer dans les dtails que lon donnera plus loin, di-
sons que le pricing doptions simples (Call, Put, ...) tient compte du smile de volatilit
implicit du march. Limplicitation se fait grce la formule de Black-Scholes.
Il existe aujourdhui un modle utilis "universellement" quivalent au modle de
Black-Scholes sur le march des actions, mais sur le march des drivs de crdit. Ce
modle permet aussi dimpliciter un smile de quelque chose (la corrlation) et cest
cette donne qui est importante.
Le problme est que le march du crdit est moins liquide que le march des
actions : les produits traits sont plus "lourds", et valent des centaines de millions
5
1.3 Contraintes imposes 1 PRSENTATION DU STAGE
deuros. Ce qui fait quil ny a que certaines valeurs qui se traitent et pas toutes.
Pour faire un parallle, cela revient ce que le march cte les puts une date T
un strike de 5, 10, 15, 20, ... On connait alors le smile de volatilit sur ces valeurs,
mais on ne sait pas ce quil vaut en 6,34 ou en 12. Il faut alors interpoler le smile
entre les valeurs donnes. Concernant les valeurs en dessous de 5, ce nest plus de
linterpolation, mais de lextrapolation.
Mais ceci ne peut pas se faire les yeux ferms en interpolant linairement par
exemple. En effet il y a des contraintes de non-arbitrage respecter. Ainsi un put de
strike 5 a un prix plus lev quun put de strike 6 par exemple. Et il faut donc faire
attention la manire dinterpoler puisque cest elle qui dtermine, in fine, le prix des
produits.
Aprs avoir implment notre pricer, nous nous sommes rendus compte que lon
aurait justement besoin de calculer souvent des rsultats. Nous avons choisi de crer
un fichier norme contenant des millions de rsultats dj calculs, que lon charge
dans la mmoire vive chaque excution. Nous avons ensuite cr un optimiseur qui
part dune fonction dinterpolation linaire, et qui cherche modifier localement les
ordonnes afin dobtenir une fonction qui minimise le plus possible, un sens que lon
prcisera, larbitrage. Si la cration de ce fichier est trop longue, nous avons cr une
seconde fonction doptimisation, beaucoup moins coteuse en temps de calcul.
Mis part la dernire approche, on ne peut pas vraiment affirmer que les 3 pre-
mires approches se sont produites dans un ordre chronologique. La dmarche ft en
fait plus "brouillone" avec le recul, mais il ny avait pas vraiment le choix non plus.
On ne peut pas dcider davoir de la chronologie dans les ides ! On a donc explor
6
1.4 Dmarche et pistes explores 1 PRSENTATION DU STAGE
les 3 premires pistes plus ou moins en mme temps, avanant sur 3 fronts diffrents,
lchant lun quand on ne trouve plus grand chose pour mieux revenir sur un autre.
Il y a aussi eu des moments un peu "difficiles", lorsque lon se rend compte quil
y a une erreur dans notre algorithme de calcul et que les rsultats et les courbes que
lon trace depuis 2 semaines sont donc tous refaire. Le stage ne ft donc pas aussi
structur que le rapport rsultant ! Mais cest le propre dun stage de recherche. Ce
qui a compt pour nous y retrouver tait davoir une "grande ligne directrice" : on
a eu quelques ides de piste au dpart, puis en les explorant on a pens dautres
pistes. Mais on a toujours eu lobjectif final en vue.
Remarque : Par rapport au parallle dress plus avant, le spread est ce qui joue le
rle du prix dans le domaine du crdit.
Cela na malheureusement donn que peu de rsultats, ce qui ft quelque peu dce-
vant. Plusieurs raisons cela : lalgorithme de minimisation partait dune fonction, la
modifiait localement, et dcidait de la "qualit" de cette nouvelle fonction au travers
dune fonction dvaluation.
La premire raison est quil nest pas si simple que cela de choisir une fonction
dvaluation : il faut jouer sur "est ce que la fonction est lisse", tout autant que "ny a
til pas trop darbitrage ?" sachant que ces questions ont toutes des rponses diffrentes
suivant les "normes" que lon choisit (somme des carrs des erreurs de lissages, ou des
valeurs absolues ...) la calibration nest pas simple.
7
1.4 Dmarche et pistes explores 1 PRSENTATION DU STAGE
pas : la cration dun "pic" local stait amplifie avec les itrations en un seul endroit.,
d la fonction dvaluation qui prfrait augmenter un pic afin de crer une "marche"
sur larbitrage plutt que de lisser la fonction.
Enfin, lide initiale tait dutiliser la mthode du recuit simul, qui fonctionne
trs bien pour le problme du voyageur de commerce par exemple. Le principe de
cet algorithme est plus ou moins le mme que celui que lon a fait, une diffrence
prs : on part dune fonction, on la modifie lgrement, et si elle a une "qualit"
meilleure que la fonction prcdente, on conserve le changement. Ou bien on accepte
avec une certaine probabilit une nouvelle fonction qui nest pas forcment meilleure
que la prcdente (probabilit dpendant du nombre ditrations dj ralises et de
la diffrence numrique entre les 2 "qualits" values).
Cet algorithme est trs allchant : en thorie il peut permettre dviter de converger
vers un extremum local mais pas global en "sautant" avec une certaine probabilit
pour "schapper" de ces mauvais puits attractifs. Mais en pratique, il est trs dlicat
mettre en oeuvre : les versions que lon a testes voyaient leur "qualit" se dgrader
progressivement plutt que de grimper, suite des probabilits de saut trop leves.
Les changements en ce sens ne rsolvaient rien, part revenir lalgorithme simple
doptimisation (basique, sans probabilits).
8
1.5 Conclusion 1 PRSENTATION DU STAGE
Il nous a donc fallu nous documenter une seconde fois sur un sujet compltement
diffrent de la finance, beaucoup plus "maths appliques". Mais si la documentation
sur linterpolation est plutt bien fournie concernant linterpolation dune fonction
par des polynmes par exemple, elle est assez faible concernant linterpolation entre
un nombre fini de points et il nous a fallu inventer nos propres mthodes.
Il y a en fait un intrt certain ce quil ny ait pas beaucoup de documentation
sur un sujet : dune part cest un gain de temps de ne pas avoir beaucoup darticles
lire, et dautre part on peut rflchir quelque chose de neuf puisque nos penses ne
sont pas biaises par des lectures sur le sujet.
1.5 Conclusion
Ce stage fut loccasion de dcouvrir dune part une entreprise en fonctionnement
et dautre part de se lancer dans un projet de recherche de relativement longue dure
(vis--vis des expriences que lon a eu), seul, plein temps.
En effet dans une salle de trading cohabitent beaucoup de personnes, des quants
aux structureurs en passant par traders, sales, commandos, ... Il nest pas facile de
sexpliquer la manire dont les quipes simbriquent les unes dans les autres pour
former un tout, et lire des explications sur le sujet sans lavoir vcu napporte pas
toujours beaucoup dinformations. Cest important davoir t au contact des quipes
pour comprendre leur rle.
Concernant le mtier de quant, cela donne une ide de la manire dont fonctionnent
les chercheurs, et de la vie quils mnent. A laube de sengager dans la vie active et de
se dcider pour un mtier, choix non dfinitif notre ge mais qui reprsente toutefois
une tape importante de notre vie, il est essentiel davoir une petite ide sur les divers
mtiers quoffre une grande banque.
Le travail de chercheur est assez particulier : on peut tre sur une voie pendant
1 semaine, puis se rendre compte que la voie est bloque et quil faut en choisir une
autre. On a alors un sentiment au pire de "dfaite" et au mieux de temps perdu. A
9
1.5 Conclusion 1 PRSENTATION DU STAGE
ce titre, la recherche a des cts dcourageants. Il faut aussi lire beaucoup darticles
pour se faire une ide des connaissances accumules sur un sujet, et la lecture est
souvent un travail fastidieux auquel il faut pourtant shabituer. Il faut bien oser dire
que certains articles ne fourmillent en gnral pas dexplications mais se perdent dans
les gnralits ce qui rend la tche difficile.
Il y a bien entendu les "bons moments" aussi : apprendre puis comprendre de
nouveaux modles, sintresser de nouvelles mthodes, discuter les rsultats avec ses
collgues, voir son programme marcher avec satisfaction, ...
10
2 LE MARCH DU CRDIT
2 Le march du crdit
Aprs une dfinition des diffrents produits (CDS, CDO), nous lverons le voile
sur leur prix et la manire de les pricer.
Ainsi :
Si B ne fait pas dfaut avant T, il rembourse compltement A.
A verse de largent (le spread) C tous les 3 mois tant que B na pas fait dfaut.
Dans la pratique encore, un CDS est un contrat, et les termes de celui-ci sont
stipuls de manire trs prcise : dfinition de ce quest un "dfaut" (faillite de B,
incapacit rembourser, ngociation dans la manire de rembourser la dette (= "re-
structuring"), ...), dates des paiements des spreads. Celles-ci sont en fait normalises,
de manire pouvoir rendre le march des CDS plus liquide : les maturits des CDS,
ainsi que les dates de paiement de spreads sont les 20 mars, 20 juin, 20 septembre et
20 dcembre.
2.1.2 Prix
C devra verser A :
F loatLeg = E Q (B N (1 R) 1{ T ) )
La float Leg est aussi appele jambe de prime ; elle correspond lesprance sous
la probabilit risque-neutre de la prime dassurance que payera C A. Si le taux
dintrt tait nul, on aurait F loatLeg = N (1 R).Q( T ). Cest dire probabilit
risque neutre de dfaut multipli par ce quil faudrait payer sil y avait dfaut.
Notations
11
2.1 Les CDS 2 LE MARCH DU CRDIT
Quant lui, A devra verser C (en notant s le spread par unit de nominal) :
Xn Xn
F ixedLeg = E Q ( Bti N s i 1 >ti + E Q ( B N s 1ti1 < <ti )
i=1 i=1
(le spread se paye tous les ti et est proportionnel la priode passe (deltai =
ti1 < < ti = 3 mois environ). Sil y a dfaut avec ti1 < < ti , il faut donc payer
le spread sur [ti1 , ] car on est protg sur cette priode.
Le spread de march (ou fair-spread) est celui qui galise la Floatleg et la FixedLeg.
2.1.3 Modle
En se rfrant aux formules ci-dessus, on note que le problme revient enti-
rement modliser linstant de dfaut de B.
En pratique, est vu comme une variable alatoire qui suit une loi dextinction
de Poisson : sur [t, t + dt], la probabilit de dfaut sachant quil ny a pas eu dfaut
avant est t dt.
Zt
Ainsi, P ( > t) = exp( s ds)
0
Pour calibrer , comme le march des CDS est assez liquide, on dispose des fair-
spread dun certain CDS sur plusieurs maturits. En supposant constant par mor-
ceaux, on en dduit par bootstrapping.
Exemple : on connait le prix dun CDS (son spread) pour T = 5 ans, 7 ans et 10
ans.
On cherche [05] tel que spread([05] ) = spread_march 5 ans. Ensuite,
on cherche [57] tel que notre spread galisera celui du march 7 ans, puisque
maintenant [05] est connu. Et ainsi de suite.
Connaissant enfin compltement, on peut en dduire le prix dun CDS toute
date comprise entre 0 et 10 ans.
Voici le principe : plutt que de sen tenir un modle abstrait comme celui o
la probabilit de dfaut suit une loi exponentielle, on prfre ici une reprsentation
12
2.1 Les CDS 2 LE MARCH DU CRDIT
Formalisation :
At = Et + Dt o At reprsente la valeur dune entreprise, Et ses actifs, et Dt sa
dette.
Calibration de :
13
2.1 Les CDS 2 LE MARCH DU CRDIT
Quand cette valeur descend en dessous dune certaine valeur barrire (fixe ou
alatoire) il y a dfaut.
Implmentation :
dVt
Vt = dWt o Vt est la "valeur" dune entreprise qui doit rembourser L en T.
Il y aura dfaut si Vt L.
2
On peut prendre L log-normale : L = L exp(Z 2 ) o Z suit une loi normale
centre rduite.
= inf{t > 0, Vt < L}
Calibration de :
14
2.1 Les CDS 2 LE MARCH DU CRDIT
S
On peut donc choisir "arbitrairement" = S . S+L . Et afin davoir une volatilit
non stochastique, on peut utiliser une valeur de rfrence S constante au lieu de S,
et de mme pour S .
Rsultats :
Cherchons la loi de dfaut donne par ce modle, et commenons par un rsultat
utile :
Proposition I.1 Si Wt est un mouvement brownien, alors P (inf st (Ws .s) >
b) = N ( ba.t
t
) e2a.b N ( ba.t
)
t
2
Il sensuit que la loi de dfaut scrit P ( > t) = P (inf st Vs > L exp(Z 2 )) =
2 2 2
P (inf st exp(Ws 2 s) > VL0 exp(Z 2 )) = P (inf st (Ws 2 s) > ln( VL0 ) +
2
2
2 F (z) 2 t
Z 2 ) = P (inf st (Ws 2 s) > 1 ln( VL0 ) + Z 2
R
) = R (z)dz.(N (
t
)
2
F (z) 2 t 2
eF (z) N (
t
)) o F (z) = ln( VL0 ) + z 2 )
L
Voyons lallure, en prenant V0 = 12 , = 0.3 et = 0.3.
Conclusion Les lois de probabilits des temps de dfaut gnres par ces 2 derniers
modles _qui se basent sur des raisonnements conomiques_ sont assez complexes,
et impliquent une utilisation de Monte-Carlo puisquil ny a pas de formule ferme
(ou alors simuler la loi, stocker beaucoup de ses valeurs et rechercher un rsultat dans
ces donnes ; et encore on peut avoir besoin de la drive, ou dintgrer...).
En outre, le modle de Merton ne donne au final quune probabilit de dfaut
maturit fixe (au lieu de donner en plus le temps de dfaut associ) et il suffit donc de
connatre un seul rel (la probabilit) plutt que de simuler beaucoup de trajectoires.
Son utilit ft en fait de pricer les premiers CDS, quand le march nen tait encore
qu ses dbuts.
Le second modle semble plus "prcis", ayant un sens encore conomique mais
donnant en plus de la probabilit de dfaut linstant de dfaut. Mais la loi de celui-ci
est trs complexe. Et comme on a pu sen rendre compte dans le pricing dun CDS, ce
qui importe au final est la densit de la loi de linstant de dfaut , pas la manire dont
on arrive cette loi. Si la loi exponentielle na certes aucun fondement conomique
(quoique dans la "nature" elle a un sens concret), quand elle est bien paramtre
(par une fonction en escalier) elle approche remarquablement la loi donne par un
modle plus terre--terre.
15
2.1 Les CDS 2 LE MARCH DU CRDIT
16
2.2 Les CDO 2 LE MARCH DU CRDIT
Pour simplifier, considrons 100 CDS avec des nominaux de 1 et une recovery de
0, payant tous le mme spread s.
Tant quil ny a aucun dfaut, il y a 100 * s de spread qui est pay. Ds quil y a
un dfaut, 99 * s, puis ainsi de suite.
On cre abstraitement les "tranches" [0-1%[, [1%-2%[, ... Acheter une "tranche"
revient vendre de la protection mais uniquement sur cette tranche.
En pratique, les "tranches" ne sont pas aussi troites : [0%-3%[, [3%-6%[, [6%-9%[,
[9%-12%[, [12%-22%[, [22%-100%] (il sagit des tranches junior, mezzanine, senior et
super-senior), et par ailleurs il ny a pas exactement 100 CDS et ceux-ci nont pas
tous la mme recovery, et ils ne payent pas tous le mme spread. Il se peut donc que
la tranche sur laquelle on vend de la protection ne soit "croque" que sur une partie.
Les recovery sont par contre connues lavance.
Dire que lon vend de la protection sur la tranche [a%, b%[ signifie que lon couvre
X XN
la partie du montant des dfauts (= Ni (1Ri )) comprise entre a% Ni
i fait dfaut i=1
17
2.2 Les CDO 2 LE MARCH DU CRDIT
N
X
et b% Ni .
i=1
Il est assez clair que plus la tranche que lon assure est "basse", plus lon prend
de risques. Il faut donc que lon soit mieux rmunr sur ces tranches.
Il y a donc une sorte de "redistribution" de la somme des spreads reus : on paye les
tranches senior (au prix convenu au dpart), puis les mezzanine (sil reste de largent),
puis enfin les junior (sil reste de largent). Mais ces derniers sont pays au prorata
du risque quils encourent.
2.2.2 Prix
Encore une fois, le spread reu sur une tranche se calcule en galisant en esprance
risque-neutre ce que lon va recevoir en spread, et ce que lon risque de payer.
Notations
Cette image rend bien lintuition que lon a sur les prix des CDO :
une tranche quity va tre beaucoup plus risque si la corrlation est faible, et
donc son prix est beaucoup plus fort. Il suffit en effet quil ny ait quun ou deux
dfauts pour faire "tomber" la tranche et cela est plus probable dans le cas dune
trs faible corrlation (indpendance des dfauts). Cest linverse qui se produit sur
les tranches senior : elles seront atteintes sil y a beaucoup de dfauts, et cela arrivera
plus facilement si les noms sont trs corrls. (dans le cas le plus extrme, la corrlation
vaut 1, et la probabilit que tous les noms fassent dfaut est la probabilit dun seul
dfaut ; dans le cas o la corrlation vaut 0, la probabilit vaut le produit de toutes
les probabilits... qui est quasi nul)
Entre ces tranches, les tranches mezzanines sont un peu sujettes plusieurs ten-
dances et il est plus difficile dexpliquer simplement leur prix en fonction de la corr-
lation.
18
2.2 Les CDO 2 LE MARCH DU CRDIT
2.2.3 Modle
Modliser Lt revient modliser les instants des temps de dfaut 1 , 2 , ... Ce
qui compte, cette fois, cest la dpendance entre ces variables alatoires. En effet, les
temps de dfaut ne sont pas des objets purement abstraits, ils correspondent des
situations bien relles (faillite, ...) et quand "lconomie mondiale" ne va pas trs bien,
cest que beaucoup dentreprises risquent de faire dfaut : il y a bien une corrlation
entre les temps de dfaut.
19
2.3 Implmentation des pricers 2 LE MARCH DU CRDIT
La notion de Copule est surtout thorique puisquil nexiste pas (encore !) de for-
mule exprimant par exemple la fonction C pour n gaussiennes corrles.
La loi tant connue, on peut soit calculer les esprances correspondantes par Mon-
Xn
teCarlo (Esperance = limn ( n1 Xi ) ) soit par intgrale sur la loi (Esperance =
R i=1
xd(x)).
cette fonction)
20
2.3 Implmentation des pricers 2 LE MARCH DU CRDIT
Fig. 6 y = xln(1 x)
Cette approximation permet bien dobtenir le mme type de courbe que la courbe
de fair-spread simule.
Par Monte-Carlo La programmation par Monte Carlo est "sans surprises" bien
que quelque peu longue : il faut en effet tirer 1 , 2 , ... puis trier ces temps par ordre
croissant, et retracer toute la "vie" du produit CDO, cest dire tous les primes
payer, quels coupons lon reoit, ...
Cela marche trs bien mais le temps de calcul est assez long (1 minute). On peut
rduire ce temps 10 secondes en faisant 6 fois moins de simulations, sans rduire
significativement la prcision. En effet, rappelons que la convergence en prcision de
21
2.3 Implmentation des pricers 2 LE MARCH DU CRDIT
Par rcurrence La programmation par rcurrence rejoint le calcul "exact" par in-
tgrale du pricer de CDS. Le principe est de calculer exactement toutes les probabilits
P(Lt = a) pour tout a, par rcurrence.
Lide est que lon a "a priori" quelque chose comme PN +1 emetteurs (Lt = a) =
PN emetteurs (Lt = a) P (n+1 > T ) + PN emetteurs (Lt = a ln+1 ) P (n+1 T )
En fait, ceci est faux car il ny a pas indpendance entre les i ! Mais lgalit
reste vraie quand on conditionne suivant la variable Z "de march". Il faut donc tout
calculer pour chaque z et calculer lintgrale ensuite et lon a en ralit :
PN +1emetteurs (Lt = a|Z) = PN emetteurs (Lt = a|Z) P (n+1 > T |Z)
+PN emetteurs (Lt = a ln+1 |Z) P (n+1 T |Z)
Implmentation :
Pour commencer il faut trouver une "loss default unit", i.e le plus grand nombre
u tel que toutes les pertes des CDS (les Ni .(1 Ri )) soient multiples de ce nombre
u. Cest en quelque sorte le PGCD de ces pertes unitaires, mais un PGCD rel et
non plus entier. On peut encore le calculer par lalgorithme dEuclide qui fonctionne
toujours. La seule difficult est quun ordinateur a une prcision parfaite sur les entiers
(compris jusqu 4.3 milliards environ, ce qui laisse souvent une marge confortable)
mais pas sur les nombres virgule flottante.
Ainsi de temps en temps on peut obtenir que 5,0 - 4,0= 0.999999999 par exemple,
ce qui fausse ensuite les calculs de PGCD. Il ne faut donc pas comparer en galit un
nombre flottant 0, mais plutt crire If (abs(x) 0.00000001) then .... Cest une
manire de faire fonctionner lalgorithme dEuclide pour calculer le nombre u.
EtantPnmaintenant assurs que tous les dfauts sont un multiple de u, on sait que
N N/ i=1 Ni .(1 Ri ) = N.u
Il faut construire une suite de "matrices" Mi indexes sur Z, t, et {1, ..., N } tel
que Mi (z, j, t) = Pi emetteurs (Lt = j.u|Z = z).
Il ne sert rien de stocker tous les tableaux tri-dimensionnels Mi , juste le dernier
suffit, puisque pour calculer Mi+1 on a juste besoin de Mi .
On comprend que cet algorithme consomme immanquablement du temps, quoique
lon fasse pour loptimiser : il faut "discrtiser R" (pour la variable alatoire Z qui
suit une loi gaussienne), discrtiser [0, T] pour connaitre les probabilits de dfaut
chaque instant t afin de calculer Fixed Leg et Float Leg. Il faut enfin faire ceci autant
de fois quil y a de noms dans le CDO. On peut faire varier Z entre -5 et 5 disons,
tant donn la densit de probabilit de la loi gaussienne.
22
2.3 Implmentation des pricers 2 LE MARCH DU CRDIT
Fig. 7 loi Beta pour diffrentes valeurs de a et b. Successivement (a, b) = (3, 10),
(2, 3), (3, 2), (10, 3)
Une fois ces matrices calcules, on connait P (Lt = j.u|Z = z) pour tout j, z et t,
probabilit sur le portefeuille total. En intgrant sur z, on obtient P (Lt = j.u) pour
tout t et j.
Une fois les probabilits calcules, on peut calculer la FloatLeg et la FixedLeg
[K ,K ]
avec les "formules" que lon a. (on a en fait besoin de calculer E Q (Lt 1 2 )). Le
temps de calcul est similaire MonteCarlo (pour une prcision quivalente) et il est
encourageant de voir apparatre les mmes rsultats (au pourcent prs) donns par
ces 2 mthodes.
Linconvnient de cette mthode par rcurrence est quelle est beaucoup moins
flexible que Monte Carlo : si un trader dsire un rsultat rapidement (10 secondes)
il peut appeler le pricing par MonteCarlo avec un nombre de simulations faible. Ce
nest pas vraiment le cas avec le pricing par rcurrence. (mme si lon peut jouer sur
le pas de lintgrale sur Z, et la prcision sur les instants t aussi, dans la grille que
lon btit)
Par loi Beta _ La programmation par "loi Beta" : on peut supposer que lorsque
lon a un nombre lev de CDS dans le panier, la loi de perte cumule suit une loi
Beta(at , bt ).
En effet, quand t est petit, il y a une grande probabilit pour quil ny ait eu encore
aucun dfaut, puis au fur et mesure que le temps augmente, il y a de plus en plus
de dfauts (aussi d la corrlation intrinsque des dfauts). On rgle les paramtres
at , bt de telle sorte que esprance et variance dune loi Beta(at , bt ) galisent esprance
et variance de Lt .
[K ,K ]
On en dduit alors E Q (Lt 1 2 ) (en les calquant sur la loi Beta).
Implmentation :
Soit lt = PnLt Li = Pn NLit(1Ri ) . On rappelle que Lt correspond la perte
i=1 i=1
courante linstant t. lt est simplement la normalise de la perte : lt [0, 1].
La loi beta de paramtres a et b est une loi continue sur [0, 1], de densit fa,b (x) =
xa1 (1x)b1 R1
B(a,b) .10x1 o B(a, b) = 0 ua1 (1 u)b1 du
23
2.3 Implmentation des pricers 2 LE MARCH DU CRDIT
a ab
= a+b et 2 = (a+b)2 (a+b+1) .
B(a+2,b)
De mme 2 = B(a,b) 2
(a+2).(b)
(a+b+2) a 2
= (a).(b) ( a+b )
(a+b)
(a+2).(a+b) a 2
= (a).(a+b+2) ( a+b )
a(a+1) a2
= (a+b)(a+b+1) (a+b)2
a a+1 a ab
= a+b ( a+b+1 a+b ) = (a+b)2 (a+b+1)
On connait les lois pi (t) puisque ce sont des lois de Poisson de paramtre t pris
en escalier et dduit par bootstrapping des prix des CDS. (cf la part sur les CDS)
Dautre part il y a lexistence de ci (t) telle que P (i t) = P (Xi <= ci (t)) et
donc P (i t, j t) = P (Xi <= ci (t), Xj <= cj (t))
Comme les Xi sont des variables gaussiennes centres rduites corrles, on a bien
P (i t, j t) = N2 (N 1 (pi (t)), N 1 (pj (t)), ij )
o N2 (a, b, ) = P (X1 < a, X2 < b) sachant que X1 et X2 sont gaussiennes
centres rduites de corrlation .
24
2.4 Base correlation - Compound correlation 2 LE MARCH DU CRDIT
t (1t ) at = t .t
En notant t = t2
1 on peut vrifier que convient.
bt = (1 t )t
Les rsultats sont similaires ceux donns par rcurrence et Monte Carlo pour de
faibles strikes, mais pas sur de plus grands strikes.
Le temps de calcul est similaire aussi (de lordre dune minute). Encore une fois
on peut gagner en temps en diminuant la prcision lors des calculs dintgrale par
exemple.
Ces implmentations de pricers ainsi que des lectures darticles ont permis de com-
prendre le fonctionnement du march des CDS et des CDO. Il fallait ensuite comparer
les pricers crs avec celui utilis par la Socit Gnrale (Marx). Les rsultats furent
concordants.
25
2.4 Base correlation - Compound correlation 2 LE MARCH DU CRDIT
26
Deuxime partie
Interpolation du smile de corrlation
27
3 CONTRAINTES
3 Contraintes
3.1 Condition de non arbitrage
Rappelons quil nous faut trouver une manire dinterpoler le smile de corrlation
de faon ce quil ny ait pas darbitrage possible.
Il nous faut donc comprendre dans un premier temps o peut se trouver larbitrage
sur le spread afin de chercher lliminer.
Une premire ide ft de penser que le spread sur la tranche [0, K] tait une
fonction dcroissante de K, puisque lon prend a priori plus de risque sur les tranches
les plus basses.
Mais il savre que ceci est faux : si la corrlation est trs leve, on peut prendre
plus de risque en assurant une tranche equity quune tranche senior.
Par contre, si on sintresse des tranches de largeur fixe, le rsultat devient vrai :
Proposition II.1 Pour des raisons darbitrage, la courbe de spread sur les tran-
ches [K, K+dK] doit tre dcroissante et strictement positive.
28
3.2 Arbitrage thorique : Market Law of Losses 3 CONTRAINTES
Fig. 8 Spread sur tranchette, calcul par Marx. Des arbitrages sont possibles aux
alentours de 16% et 33%.
Le spread sur des tranches trs fines de mme taille est donc dcroissant.
Exemple : Afin de travailler sur "quelque chose de solide" et davoir des rsultats
tangibles, Marx a t prfr : il y a certainement moins de bugs dans le pricer de la
Socit Gnrale, qui est utilis depuis des annes, que dans le notre !
Pour un march donn (iTrax4) avec environ 120 noms dans le panier, ainsi que
les corrlations donnes par le march, MarxExcel a calcul les spread, fixedleg et
floatleg sur toute une tendue de strikes, avec un faible pas.
P (Loss < K) doit tre croissante, mais rien ne semble indiquer mathmatiquement
parlant que sil y a des dcroissances locales de cette fonction, il y a de petits arbitrages
faire sur le spread. Mais pourtant cest ce qui se passe : sur ce graphique on a
29
3.2 Arbitrage thorique : Market Law of Losses 3 CONTRAINTES
compar (pour linterpolation linaire) les dcroissances des tranches de spread, et les
dcroissances locales de la Market Law of Losses.
On a en fait subdivis [0, 100%] en intervalles de taille 1%, et on a cherch des
dcroissances locales et des arbitrages locaux tous les 0.1%. On compte ensuite sur
chaque intervalle de taille 1% combien il y a de "problmes", soit un nombre entier
entre 0 et 10.
Ceci a t fait pour mieux rendre compte des concidences entre larbitrage local
et la dcroissance locale de la Market Law of Losses : sinon, sil y a quelque chose sur
larbitrage pur en 5.6% et rien en 5.7% et inversement sur la loi, cela ne serait pas
compt alors que a "mriterait" de ltre. En quelque sorte cela permet dintroduire
une "tolrance la concidence" entre les deux lois.
On se rend compte quil y a une corrlation plus quheureuse entre les arbitrages
locaux sur le spread et sur la loi de probabilit.
La courbe est trs lisse et croissante. Elle vrifie aussi limK0% P (k, k ) = 0 ainsi
que limK100% P (k, k ) = 0.
30
3.3 Contrainte Mathmatique 3 CONTRAINTES
n Z ti
[K1 ,K2 ]
X
F ixedLeg = E Q (s Bti (K2 K1 Lt )dt)
i=1 ti1
E Q ( 0T Bt .dLK
R
F loatLeg )
et donc f airspread[0,K] = F ixedLeg(s)/s = n
X Z ti t cest
E Q (s Bti (K LK
t )dt)
i=1 ti1
er.T E Q LK r.t Q
RT
T + 0 r.e E (LK
t )dt
dire n Z ti
X
EQ ( Bti (K LKt )dt)
i=1 ti1
(on a intgr par partie lintgrande de la FloatLeg dLt qui est en fait un "peigne
de Dirac" stochastique, et on a suppos que le zro coupon scrit Bt = er.t )
31
3.3 Contrainte Mathmatique 3 CONTRAINTES
dire de la forme [0-K%]. Ainsi comme les tranches basses ne sont pas sensibles de
la mme manire la corrlation que les tranches plus hautes, sur une tranche equity
une sorte de nivellement se cre sur la Fixed Leg.
Toujours est-il que daprs ces courbes, on peut naturellement poser F ixedLeg
.K du moins pour un strike au dela de 10%.
E Q LK
Finalement, spread[0K%] .KT .
La grandeur plus qui nous intresse plus est, nous lavons dit, le spread sur tran-
F loatLegK
chelette, soit spread[KK+dK] = F ixedLegK .
Nous nous rapprochons dune contrainte purement formelle sur le smile de corrla-
tion. Il nous faudrait pour cela connatre une formule ferme pour LK T . Ceci nest pas
une tche aise, et nous allons avoir recours plusieurs hypothses et approximations :
Faisons tout dabord lhypothse d"homognit" : nous considrons que les noms
du paniers sont "homognes", cest dire quils ont tous le mme taux de recouvre-
ment, la mme fonction de probabilit de dfaut et le mme nominal. Cette "hypo-
thse" a dj t utilise, afin de considrer dans nos optimisations numriques quun
panier "standard" tait suffisament reprsentatif, et quune bonne mthode dinter-
polation sur le smile pour ce panier serait aussi bonne sur nimporte quel autre panier
(iTraxx, ...)
Alors on peut cette fois-ci sommer sur le nombre de dfauts dans le panier.
X N
X
Cela donne E LK T = P (i1 , ...iN ) Lj ij
(i1 ,...,iN ){0,1}N j=1
N
X
= P (k def auts) L k
k=0
N
X
=L k.P (k def auts)
k=0
32
3.3 Contrainte Mathmatique 3 CONTRAINTES
N
X Z +
=L k
k.CN . pN kj (z)(1 p(z))k .(z).dz
k=0
Cest cette formule qui a t utilise pour calculer les probabilits de dfaut dans
notre pricer.
Mais rappelons que lon cherche obtenir une formule ferme. Etant donn lin-
trication des probabilits due la corrlation, nous sommes contraints de faire une
hypothse plus forte encore que celle d"homognit" : celle de "large-pool".
Nous faisons donc lhypothse de "large-pool", cest dire que lon considre quil
y a N noms dans le panier, tous "homognes", de probabilit de dfaut p(t) et que N
1. p
Nous rappelons que le dfaut est caractris par le fait que Xi = Z. + i . 1 2 ,
qui suit une loi normale centre rduite, passe en dessous de la "barre" N 1 (p(t)) de
telle sorte que la probabilit soit effectivement de p(t).
Quand N est trs grand, N1 j=1 1{Z.+ .12 N 1 (p(t)} tend "intuitivement"
PN
j
p
vers la P (Z. + j . 1 2 N 1 (p(t))).
Cela est vrai conditionnellement Z car on a alors une somme de variables ala-
toires indpendantes et identiquement distribues. Q(L < K) vaut alors 0 ou 1 selon
que les probabilits de dfaut conditionnes Z sont faibles ou fortes.
Ainsi Q(L < K | Z) = 1N ( N 1(p(t))Z. )< K
12 1R
=1 K )N 1 (p(t))
12 N 1 (
1R
Z<
et donc comme Zet -Z ont mme loi,
12 N 1 ( 1R
K
)N 1 (p(t))
Q(L < K) = N ( )
RK
Enfin, on peut prouver que E Q LKT = 0 Q(K > LT > x).dx.
RK RK Rx
En effet, E Q LK K
T = 0 x.Q(LT [x, x + dx] = 0 0
Q(LK
T [x, x + dx])dudx =
RK RK K K
( u Q(LT [x, x + dx]))du = 0 Q(LT [u, K])du = 0 Q(K > LK
K K
R R
0 T > u)du
E Q LK
Cette esprance dpend de manire cache de mais on a K
T
= K. dQ(LdK
T >K)
.
33
3.3 Contrainte Mathmatique 3 CONTRAINTES
E Q LK
T ,(K)
Q K
d E LT ,
F loatLeg
K K = K. dQ(LdKT >K)
+ dK .
Q K
d E LT ,
soit F loatLeg
K K. dQ(LdK T >K)
+ dK .
R K Q(LKT , >x)
K. dQ(LdKT >K)
+ dKd
. 0 dx
Lide est desprer que le premier terme soit numriquement plus fort que le
second, et ainsi dobtenir en premire approximation une contrainte purement formelle
d
sur dK , car dQ(LdK
T >K)
est connu.
Etant donn que lon na pas de formule pour le second terme (on connait lint-
grande, mais pas lintgrale), nous sommes obligs davoir recours au calcul numrique.
Rsultats :
Il arrive que la thorie est peu en concordance avec la pratique numrique, et cest
ce qui se passe ici. Les intgrales numriques de drives partielles dapproximations
ne donnent pas un rsultat concordant : la FloatLeg est bien croissante, et a une belle
allure concave. Sa drive devrait tre positive. Cependant la somme des deux termes
que nous tudions donne numriquement un rsultat ngatif, si bien que lon ne peut
pas conclure.
34
3.3 Contrainte Mathmatique 3 CONTRAINTES
d
R K Q(LK
T , >x)
Fig. 13 Second terme : dK . 0 dx
35
3.3 Contrainte Mathmatique 3 CONTRAINTES
36
3.3 Contrainte Mathmatique 3 CONTRAINTES
Lorsque lon trace la drive du premier terme, et celle de la floatleg puis leur
ratio, on obtient ces graphes(coups au dessous de 7% de strike)
Dans une certaine mesure, on peut estimer que lon a donc
T dQ(L >K)
F loatLeg d(K. dK )
boxed
K dK
d2 (K. dQ(LdK
T >K)
)
boxed <0
dK 2
et par ailleurs la jambe de prime (fixedLeg) est quasi linaire ce qui donne spread
sur tranchette = spread[KK+dK] .F loatLegK qui doit tre dcroissant, et donc
F loatLegK doit tre dcroissant.
R K Q(LKT , >x)
Ce dernier terme est la somme de K. dQ(LdK T >K) d
et de dK . 0 dx
Mais cette dernire intgrale est numriquement parlant trs instable Mais ses
variations sont faibles par rapport celles du premier terme, et finalement on a encore
dQ(LT >K)
2 F loatLegK d(K. )
une fois : 2K . dK
dK
do le rsultat final approch :
dQ(LT >K)
d(K. )
la condition de non-arbitrage se rduit dK
dK
< 0 (sachant que la loi de
Q est connue explicitement dans notre modle).
37
3.4 Mise en oeuvre 3 CONTRAINTES
Le pricer Marx tant assez lent, nous avons dcid denregistrer les rsultas obtenus
aprs une nuit de calculs dans un fichier texte, que lon charge dans la mmoire vive
afin de pouvoir se concentrer sur linterpolation une bonne fois pour toutes, et non
plus sur les calculs de prix.
3.5 Donnes
Pour le moment, le march "donne" les corrlations sur quelques tranches ([0%-
3%], [0%-6%], [0%-9%], [0%-12%], [0%-22%], ...) et linterpolation est faite linaire-
ment ou quadratiquement (de manire avoir une courbe C 1 au lieu de continue
seulement).
38
3.5 Donnes 3 CONTRAINTES
39
4 LINTERPOLATION
4 Linterpolation
Linterpolation sest faite chronologiquement en plusieurs tapes :
_ initialement linterpolation sest base sur les conditions de non-arbitrage sur la
courbe de spread : linterpolation se faisait purement numriquement par optimisation,
sans chercher lisser le smile de corrlation, en prenant pour point de dpart lo.
Loptimisation de fonction sous contraintes est cependant un problme difficile et
notre algorithme faisait converger rapidement la suite de fonctions dinterpolation
vers une fonction peu lisse et dont le spread final navait pas une allure agrable.
Cette premire approche a donc t mise de ct en faveur dune seconde, dont
lide, eue plus tt, semblait moins prometteuse mais qui a pourtant port ses fruits.
_ laccent sest port sur linterpolation pure, cest dire trouver partir dun
ensemble de points donns une courbe dont lallure et le lissage soient les plus convain-
cants possible.
Ce qui gnait dans cette dernire mthode, cest quil ny avait plus vraiment
de tenant conomique au problme. Mais cest pourtant cette mthode qui russit
le plus : comme on le faisait remarquer dans la partie concernant la "market law of
losses" (cest dire la loi de pertes sur le portefeuille implicite par le march), ce sont
les discontinuits sur la fonction de corrlation et sur ses drives qui se rpercutent
en des discontinuits et des irrgularits sur la fonction de spread sur tranchelette
(donnant lieu des opportunits darbitrage).
Appliquer notre optimiseur numrique sur une fonction interpole par les mthodes
que lon a employes narrangeait pas vraiment lallure du spred sur tranchette, bien
que lide ft tentante.
A titre dexemple :
Ces 3 courbes passent toutes par 3 points donns. Cependant les tendances quelles
donnent pour le "futur" sont trs diffrentes les unes des autres, et cela sen patt sur
les normes carts entre les 2 derniers points dinterpolation.
40
4.1 Problmes gnraux dinterpolation 4 LINTERPOLATION
41
4.2 Stabilit 4 LINTERPOLATION
Les boutons du haut correspondent au chargement des donnes (la premire partie
de ce rapport expliquait comment calculer le spread dun CDO, et comment nous
avions optimis les temps de calcul en crant un fichier assez lourd contenant des
calculs dj faits ce qui permet une utilisation particulirement souple de ce prsent
logiciel)
Les boutons sur la droite correspondent au type dinterpolation que lon choisit
entre les points (nous en avons implments 8 en tout), et les boutons du bas per-
mettent de faire varier dynamiquement linterpolation en modifiant les ordonnes de
points (dont les abscisses ont t dcides lavance afin de respecter les donnes que
lon obtient gnralement du march : par exemple le march iTraxx cte seulement
les tranches [0%, 3%], [3%, 6%], [6%, 9%], [9%, 12%], [12%, 22%] et [22%, 100%]).
4.2 Stabilit
Une notion naturelle bien que jamais dfinie dans les nombreuses documentations
sur linterpolation est la stabilit des interpolations.
En effet, beaucoup de documents traitent de linterpolation dune fonction, cest
dire quils cherchent une fonction (ou une suite de fonctions) approximant une autre
plus complique, et sinterrogent sur la convergence de cette mthode (exemple :
polynmes de Legendre, de Tchebychev, ...). La fonction interpoler est connue, et
les polynmes approchant la fonction essaient de passer par de plus en plus de points
sur le graphe de la fonction de rfrence.
Pour les problmes dinterpolation de donnes, on ne peut pas prendre "de plus
en plus de points" : le problme est dune toute autre nature, et il sagit de dfinir les
rgles au cas par cas suivant le problme que lon a.
Ici par exemple, les donnes du march sont par "dfaut" croissantes et convexes.
On peut donc imposer nos mthodes dinterpolations de garantir la convexit et la
monotonie de nos jeux de donnes.
Ceci garantira par la mme occasion la "stabilit" de notre systme, sens que
lon na encore pas dfini. En effet, si linterpolation dun graphe monotone est encore
monotone, alors cela signifie que linterpolation reste borne vis vis du jeu de donne
en entre.
42
4.2 Stabilit 4 LINTERPOLATION
polynmes de Lagrange dont les abscisses sont prises quirparties sur [5, 5] ne
converge pas vraiment vers la fonction f (x) et mme les polynmes divergent. Ceci
est du au fait que pour passer par n points le polynme Pn doit se courber de plus
en plus entre les points afin de corriger sa trajectoire. Les coefficients des monmes le
constituant sont donc de plus en plus grands pour se corriger les uns les autres.
Remarque : Afin dviter ces divergences, aussi connues sous le nom de "Phnomne
de Runge", une bonne manire dinterpoler les fonctions grce aux polynmes de
Lagrange est dutiliser des abscisses de Tchebychev au lieu dabscisses quirparties.
Il faut veiller ce quil ne se produise pas le mme type de drglement dans nos
interpolations. Une difficult est de formaliser ce raisonnement.
Dans notre cas, o les donnes forment un ensemble monotone et convexe, nous
demandons ce que les interpolations conservent la monotonie et la convexit, tout
en passant par les points dentre.
Mais on peut aussi demander aux fonctions dinterpolation dtre stable par rap-
port aux donnes, et de ne pas diverger lorsque les donnes nont plus de proprit
de convexit ni de monotonie.
Notation : Nous noterons I(x) une fonction dinterpolation associe des abscisses
(x1 , ..., xn ) fixes et des ordonnes (y1 , ..., yn ) mobiles.
43
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
_ continuit de la fonction qui un n_uplet (les abscisses fixes (x1 , ..., xn )) associe
la fonction dinterpolation correspondante :
Rn C([x1 , xn ] R)
(y1 , y2 , ..., yn ) I(x1 , ...xn , y1 , ..., yn )
La continuit est dfinie sur lespace darrive par la norme suprieure sur usuelle
des fonctions continues sur un intervalle.
_ "bornitude" : A / (y1 , ..., yn ), x[x1 , xn ], |I(x1 ,...xn ) (x)| < A. maxi, |yi |. Cette
proprit traduit le fait quil y a une sorte de stabilit. Ainsi des interpolations sen-
sibles au phnomne de Runge ne "passeraient" pas ce test, du moins on lespre.
Sinon la valeur minimale de A vrifiant cette proprit pourrait tre un bon indica-
teur.
Cette mthode est invariante par changement de repre puisque "purement go-
mtrique". En outre elle est naturellement continue aussi puisque : x, i/I(x) =
xxi
yi + xi+1 xi .(yi+1 yi ). Ainsi les points (x, I(x)) de linterpolation linaire dpendent
continuement des yi (qui sont en nombre fini) et ce sur un intervalle fixe ferm born
[x1 , xn ].
Enfin elle vrifie le critre de bornitude avec la constante A = 1.
La convexit et la monotonie sont aussi respectes par cette mthode.
Le principal problme de cette mthode est bien entendu d au fait que linter-
polation linaire ne donne pas une courbe naturelle, puisque affine par morceaux,
alors quon cherche quelque chose de lisse (cf contrainte sur la "implied market law
of losses")
Cette mthode est aussi appele mthode du spline cubique. Elle diffre de la
mthode du spline de lissage sur laquelle nous reviendrons plus loin.
Cette mthode est tire de [6]. Elle a t cre dans le but de conserver la monotonie
sur un jeu de donnes.
44
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
Ralisation : Etant donns i, (yi , yi0 ) o les drives en chaque point sont donns,
sur [xi , xi+1 ], on cherche ai , bi , ci et di tels que fi (x) = ai .(x xi )3 + bi .(x xi )2 +
ci .(x xi ) + di
Il reste dterminer les yi0 avec soin. Pour cela nous ne considrons que les points
intrieurs (cest dire 1 < i < n). Lide est quil existe une unique parabole passant
par (xi1 , yi1 ), (xi , yi ), (xi+1 , yi+1 ). Si cette parabole est monotone sur [xi1 , xi+1 ],
on va prendre pour yi0 la pente de cette parabole en xi .
Sinon, on choisit la plus petite pente p, en valeur absolue, telle que les para-
boles passant par (xi1 , yi1 ), (xi , yi ) et ayant pour pente p en xi et passant par
(xi , yi ), (xi+1 , yi+1 ) et ayant pour pente p en xi soient toutes les deux monotones sur
leurs intervalles respectifs. Gardons lesprit que ceci est un choix purement arbi-
traire.
La parabole passant par (xi1 , yi1 ), (xi , yi ), (xi+1 , yi+1 ) a pour quation y =
a.(x xi )2 + b.(x xi ) + yi
45
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
Il nous faut encore chercher une condition sur la pente en xi pour quelle soit
monotone sur lintervalle [xi1 , xi+1 ]. Cela arrive si et seulement si, en notant pi la
pente de la parabole en xi , les paraboles passant par (xi1 , yi1 ), (xi , yi ) et ayant
pour pente pi en xi et passant par (xi , yi ), (xi+1 , yi+1 ) et ayant pour pente pi en xi
soient toutes les deux monotones sur leurs intervalles respectifs.
pi
ces abscisses soient en dehors des intervalles, il faut que 0 si1 2 et 0 psii 2.
Finalement :
_ Si si1 et si sont de signes distincts, alors il ne peut pas y avoir de parabole
passant par (xi1 , yi1 ), (xi , yi ), (xi+1 , yi+1 ) qui soit monotone. On choisit alors yi0 =
0. (Daprs les petits calculs que lon a fait cest la seule condition permettant davoir
la branche gauche et la branche droite monotones sur leurs intervalles respectifs)
Cet algorithme est bien entendu purement "heuristique", mais il permet de prouver
quavec les choix de yi0 que lon a fait, la monotonie des donnes est conserve par
linterpolation.
46
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
47
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
_ Pour simplifier, considrons dans un repre R les points A(0, 0) et B(a, b) qui
ont pour quivalent dans R A(0, 0) et B(a0, b0). Les pentes dans R valent y00 et y10 .
0
b0 a 0
Dans R, il faut tester avec bbaa0 y00 et ba 0 y1 .
Lunique courbe cubique passant par A et B et ayant pour pentes y00 et y10 en A et
y 0 +y 0 2 b 3 b 2y 0 y 0
B a pour quation dans R : f (x) = 0 a12 a x3 + a a 0 1 x2 + y00 .x
0
b0 a 0
Lunique courbe cubique passant par A et B et ayant pour pentes bbaa0 y00 et ba0 y1 en
b0 a 0 b0 a b0 b0 0 0
y00. . ba 0 +y1 . ba0 2 a0 3a 2y00 . bbaa0 y10 . bbaa0
A et B a pour quation dans R : g(x) = a02 x03 + a
0
x02 +
0
y00 . bbaa0 .x0
La courbe est invariante par changement dchelle si (x0, y0 = g(x0)) point de R
est sur la courbe reprsente par le mme point (x, y) dans R.
0 0
Avec x0 = aa x et y 0 = bb y il faut vrifier si on a bien y = f (x) sachant que
y0 = g(x0).
0 0 0
Or bb y = g( aa x) soit y = bb0 g( aa x) = ... = f (x) (il suffit dcrire, il ny a aucune
astuce particulire)
La courbe est donc bien invariante par changement dchelle.
48
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
2
= yB + (yC yB ). (xx
h2i
b)
(3 2. xx b 2
hi ) = yB + (yC yB ).X (3 2X) et X varie
entre 0 et 1.
Or x x2 (3 2x) est croissante sur [0, 1] donc et varie de 0 1. Le rsultat est
donc prouv.
Afin de crer une suite de drives en chaque point, nous utilisons lalgorithme de
linterpolation de Stefen, qui nous fournit au moins la premire drive pour chaque
point (ceci pour "exponentielle 1") et mme, connaissant lquation de la fonction
cubique sur chaque segment, la drive seconde. Pour "exponentielle 2" nous prenons
comme valeurs des drives premires en chaque point la moyenne entre la pente
gauche et droite (vis vis des diffrences finies) : si A, B et C sont 3 points qui
se succdent ; AB ayant une pente et BC une pente , alors on prend b1 = + 2 .
Les drives dordre suprieur sont toujours prises nulles. Aux points extrmaux on
49
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
_ la premire cest que si linterpolation est effectivement C elle nen reste pas
moins trs linaire aux abords des points. Et pour cause. La fonction f que lon a choisit
dans le graphe prcdent (ralliant 0 1de manire C ) est beaucoup trop "plate"
aux alentours de 0 et de 1. Ce qui fait que sur [xA , xB ], la fonction g(x) = (a0 + a1 .x +
a2 2 a3 3 b2 2 ab 3
2 .x + 3! .x + ...)(1 f (x)) + (b0 + b1 .(1 x) + 2 .(1 x) + 3! .(1 x) + ...).f (x)
se rduit (on simplifie en prenant [0,1]) g(x) = (a0 + a1 .x).(1 f (x)) + (b0 +
b1 .(1 x)).f (x)
Vers 0 : f (x) = 0 pendant assez longtemps donc g(x) = a0 + a1 .x pendant assez
longtemps aussi.
Et idem en 1 : g(x) = b0 + b1 (1 x)
_ La seconde raison est que lon cre un point dinflexion preque "automatique-
ment" en interpolant sur chaque segment. Alors que si lon a un jeu de donnes convexe
interpoler, il ne devrait logiquement pas y avoir de point dinflexion.
Autre exemple :
50
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
Par contre : en choisissant des points initiaux qui demandent naturellement une
interpolation point dinflexion, les rsultats sont assez satisfaisants.
Une manire de bien interpoler serait peut tre de choisir 2 types de fonction
diffrents. Notre manire actuelle dinterpoler de manire exponentielle pour les points
ncessitant un point dinflexion, et une autre mthode pour les graphes ne ncessitant
51
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
pas naturellement de point dinflexion dans linterpolation (cf les 2 premiers "contre-
exemples" que lon a donn dans cette partie). Seulement il est difficile de gnraliser
une telle mthode : supposons que lon ait une fonction f, C , convexe, croissante,
partant de A(0,0) et arrivant en B(1,1), de premires drives respectives 2 et 0. On
na pas trouv de moyen simple, partir de f, de reconstituer une fonction g, C ,
convexe, croissante, partant de A(0,0) et arrivant en B(1,1), de premires drives
respectives 4 et 0.
52
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
on voit nettement sur le second graphe que la courbe passe au dessus du point B,
alors que cela ne se produit pas sur le second. (premier : "fentre" (0,0)-(0.5, 0.5) ;
second : "fentre" (0,0) - (1,1))
Par contre dans notre mthode on nutilise les drives que jusquau premier ordre.
Et en considrant les formules du contre exemple, on voit bien que le b disparaitrait
compltement.
Cela reste encore grossier puisque avec notre programme nous voyons bien quil
ny a pas dnormes disparits entre les donnes et cette interpolation. Cependant
la constante A doit tre strictement suprieure 1 tant donn les dessins o lon
montrait la non convexit de cette interpolation. (entre A(xA , yA ) et B(xB , yB ) on
peut avoir y nappartient pas [yA , yB ]).
53
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
En fait une courbe de Bzier passe toujours pas P1 et Pn . Elle ne passe gnrale-
ment pas par les autres points. Notre problme consiste donc trouver P2 , ..., Pn1 tels
que la courbe de Bzier associe soit une interpolation "exacte".
Commenons par prouver quelques rsultats de notre cru concernant les courbes
de Bzier :
_ Etant donns A1 , ..., An = {(x1 , y1 ), ..., (xn , yn )} il existe n points uniques aux
abscisses fixes x1 , ..., xn tels que la courbe de Bzier issue de ces points passe par
A1 , ..., An . On peut alors parler de "linterpolation de Bzier aux points A1 , ..., An ".
Etablissons en premier lieu un lemme intermdiaire avant dattaquer la preuve.
Lemme II.2 Montrons dabord que t x(t) est strictement croissante lorsque les xi
sont tris par ordre croissant comme cest le cas. On suppose dans un premier temps
que les xi sont tous positifs.
Pn n
Preuve On a x(t) = i=0 i xi .ti .(1 t)ni .
MaintenantPnsi les xi ne sont pas tous positifs : soit A tel que i, (xi + A) 0.
x(t) = A + i=0 ni (xi + A).ti .(1 t)ni et les (xi + A) sont encore tris par ordre
croissant et sont maintenant positifs. x(t) est donc encore strictement croissant en t.
54
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
0 0 0 1
t1 t1
( 1t1 )1 ... ... ( 1t1 )n
t2 1 t2
( 1t2 ) ... ... ( 1t2 )n
Qn n Qn1
= i=0 i . i=1 (1 ti )n . det( ... ... ... ... )
tn1 1 tn1
( 1tn1 ) ( 1tn1 )n
0 0 0 1
t1 t1
( 1t1 )1 ... ... ( 1t1 )n1
t t
Qn Qn1 ( 2 )1 ... ... ( 1t 2
)n1
= i=0 ni . i=1 (1 ti )n . det( 1t2 2
)
... ... ... ...
tn1 tn1
( 1t n1
)1 ( 1t n1
)n1
et ce dernier est un dterminant de Vandermonde (transpos mais cela revient au
mme) et comme les ti sont distincts, B est donc inversible, ce qui prouve le rsultat
final.
55
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
Etant donn que lon a une matrice inverser, de dimension souvent faible, cet
algorithme heuristique semble inutile. Il donne cependant de trs bonnes courbes de
tendance, comme vous pouvez le constater sur les figures.
56
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
57
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
Cette dernire est effectivement faite pour passer par tous les points (ce que lon
veut). Mme si quand on y rflchis bien la courbe de Bzier semble mieux afficher la
"tendance" de la courbe.
En fait linterpolation de Bzier est trs bonne quand les points par lesquels ont
doit passer suivent un "spline naturel". Sinon quand il y a une "imperfection" comme
cest le cas dans lexemple ci-dessous, il est normal que linterpolation soit mauvaise
puisque les polynmes ne sont pas faits pour modliser des imperfections (Diracs, ...)
et ils y ragissent trs mal.
Lide de cette mthode vient dun rsultat bien connu : Si f L1 et gC , alors
f gC . Et si lon choisit gn 0 alors f gn f . (Rsultat de la thorie des
distributions)
Bref la convolution peut lisser une fonction sans trop la modifier. On a donc
dcid dutiliser cette mthode en partant non pas de linterpolation linaire, mais de
linterpolation qui a donn les meilleurs rsultats jusquici : linterpolation de Steffen.
On convole ensuite cette fonction, et on regarde si le rsultat nest pas trop loign
des points que lon veut atteindre. Au besoin on modifie lgrement les ordonnes, on
rinterpole selon Steffen, on convole le tout, et on recommence jusqu atteindre avec
une prcision fixe lavance chacun des points que lon a en entre.
Implmentation : dans la pratique cette ide ne fonctionne pas aussi bien que cela.
On a en effet un nombre fini de points espacs rgulirement. La convolution revient
donc prendre pour chaque point une sorte de moyenne des points autour, avec une
pondration. Normalement la "vraie convolution" peut aller chercher des points trs
loigns et les pondrer trs peu par rapport aux points voisins de celui en question,
mais quitte mettre un coefficient quasi nul, autant ne pas en mettre dans la pratique.
n y n +0.7(ytn1 +ytn+1 )+0.3(ytn2 +ytn+2 )
Nous avons donc choisi de prendre yt+1 = t 1+0.7+0.7+0.3+0.3 (tout
en veillant aux effets de bords) et ditrer sur la suite (yt ) obtenue.
Donc aux points dabscisses fixes A0 , ..., An = {(x0 , y0 ), ..., (xn , yn )} par lesquels
on doit passer, on choisit dabord dinterpoler selon Steffen, de convoler, et de modifier
les yti jusqu se rapprocher des yi . Le mme algorithme "doptimisation" que celui
pour Bzier peut tre utilis (modification dune fonction, choix de la garder ou non
suivant la distance une autre fonction, ...).
Seulement il se trouve que le rsultat obtenu est trs trs trs proche de linterpola-
tion de Steffen (en tout cas sur les cas usuels du smile de corrlation) : la convolution
ne modifie presque pas la fonction initiale ce qui fait quelle passe presque par les
points initiaux et quil y a trs peu modifier pour que cela se produise.
On peut voir sur cette image (en vert : convolution, en violet Steffen) que cette
dernire est trs proche de Steffen sur les points sans trop de "pics" mais que ds quil
y en a (vers la gauche) la convolution explose.
58
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
59
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
a b c
b a b c
c b a b c
de notre matrice est quivalente celle de
c b a b c
c b a b
... ... ...
60
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
On peut noter que notre interpolation possde une certaine "inertie" contrairement
Steffen. Ainsi au maximum de ce dernier graphique, Steffen replonge directement,
puisque son interpolation ne donne que des courbes entre les points. Avec lintgrale,
la courbe continue de monter encore un peu aprs le point. Cest notre avis un
avantage : il ny a aucune raison pour quune interpolation qui passe par des points
doit modifier sa pente en ces points l exactement.
61
4.3 Explication des diffrentes interpolations 4 LINTERPOLATION
est peut tre d au fait que lon a que 100 points sur tout notre graphique. Si lon
sautorise un maillage toujours plus fin il y a fort parier que lon puisse parvenir
nos fins.
62
5 LOPTIMISATION
5 Loptimisation
Nous avons tent doptimiser la courbe de spread pour la rendre non arbitrable
grce un algorithme se basant sur 2 fonctions principales : une premire procdure
modifie une fonction faiblement, et une seconde teste la fonction obtenue afin de
dterminer si cette dernire est plus acceptable quoriginellement.
Ces deux procdures offrent cependant leur lot de surprises que nous dtaillons.
Le seul problme est que la dcroissance de T est trs difficile grer. Dans tous
nos cas nous navons obtenu que des processus faisant augmenter lnergie, ce qui
nest pas normal. Nous avons donc dcid darrter cette mthode et de naccepter
que les solutions faisant dcrotre lnergie.
Une premire manire est de choisir yi alatoirement entre yi1 et yi+1 . Cela
conserve la croissance de la courbe.
63
5.1 Algorithme doptimisation 5 LOPTIMISATION
Une seconde manire de faire est de multiplier yi par 0.995 + 0.01U o U est
uniforme sur [0-1]. Cela permet de modifier localement la fonction de 0.5% environ et
cest cette mthode qui fonctionne le mieux.
yi
Une troisime manire de faire est dagir de mme avec les pentes : di = xyi+1
i+1 xi
.
On choisit de modifier la pente dun certain coefficient : yi = yi1 +(0.995+0.01U )(xi
xi1 )di .
La modification nest pas ce qui pose le plus de problmes quoique dans notre cas,
on souhaite obtenir une courbe de corrlation croissante.
Par rapport la non-dcroissance, si le spread sur [a, a+dx] est infrieur celui sur
[b, b+dx] avec a < b, alors il y a arbitrage. Il faudrait donc ajouter tous les arbitrages
possibles sil y a une faible valeur de spread sur tranchelette un endroit.
Ainsi
P Pon peut ajouter aux valeurs+ absolues des spreads ngatifs la somme
i j>i (spread(j) spread(i)) ou bien le carr de ces nombres.
On peut aussi ne pas regarder sur tous les j suprieurs i, mais juste sur certains
immdiatement suprieurs, de manire ce que sil y a une petite erreur on ne soit
pas trop pnaliss sur toute une srie.
Concernant le
Pcritre de "lissitude" de la courbe, nous choisissons dajouter au
dfaut la valeur i ((2si si+1 si1 )+ )2 , puisque la courbe de spread trace semble
tre convexe. On pnalise donc la dcroissance.
64
5.1 Algorithme doptimisation 5 LOPTIMISATION
65
5.1 Algorithme doptimisation 5 LOPTIMISATION
66
5.2 Rsultats 5 LOPTIMISATION
On voit que lorsque lon prend 1 par exemple, loptimiseur prfre sacrifier un seul
endroit de la courbe en crant une grosse croissance, tandis quavec des plus grands
nombres ceci ne "passe plus" puisque un saut est compt 5 fois, 10 fois, 20 fois. (pour
chaque point avant le saut, soit 1+2+3+4+5 fois, 1+2+3+...+10 fois, 1+2+...+20
fois)
Par contre prendre en compte les 10 ou 20 voisins suivant sur un point donn na
pas beaucoup dinfluence.
5.2 Rsultats
67
5.2 Rsultats 5 LOPTIMISATION
68
5.2 Rsultats 5 LOPTIMISATION
69
5.2 Rsultats 5 LOPTIMISATION
70
5.2 Rsultats 5 LOPTIMISATION
71
5.2 Rsultats 5 LOPTIMISATION
72
5.3 Conclusion 5 LOPTIMISATION
5.3 Conclusion
Ces images sont loccasion de montrer que les courbes interpolarices les plus lisses
sont effectivement celles qui donnent lieu aux courbes de spread les plus harmonieuses.
A notre sens seules les interpolation de Bzier, par intgrale et de Steffen sont
retenir. Les deux premires donnent galement dexcellentes courbes de tendance dans
les cas o lon opte pour une interpolation "inexacte", qui ne passe pas exactement
par les points voulus.
Linterpolation de Steffen est sans surprises puisque sa consistance se prouve ma-
thmatiquement. Elle interpole trs bien les donnes monotones (ce que lon a ici)
cependant son comportement nest pas satisfaisant lorsque les donnes ne le sont
plus. Elle reste nanmoins non divergente mais toujours trop rigide dans ce cas.
Linterpolation par intgrale semble raliser une alternative prometteuse Bzier
et Steffen : elle interpole trs bien les donnes monotones et affiche de jolies courbures
sur les donnes non monotones compare Steffen. Elle diverge cependant un petit
peu comme pour Bzier lorsque les donnes interpoler sont trop disparates.
Linterpolation exponentielle reste quant elle creuser.
73
Troisime partie
Extrapolation du smile de corrlation
74
Cette partie est confidentielle.
75
A PREUVES MATHMATIQUES
A Preuves mathmatiques
A.1 Interpolation exponentielle
Afin de choisir une fonction (pour linterpolation exponentielle) qui vrifie f (0) =
0, f (1) = 1 et n 1, f (n) (0) = f (n) (1) = 0 on a choisit de se baser sur le rsultat
suivant :
RR
f : x 0 si x 0 est C . Il faut vrifier en 0 que toutes les drives de la
1
x
xe sinon
fonction cot "strictement positif" vaillent 0.
Pn (x) 1
Preuve Hypothse de rcurrence en n : Pn , Qn R[X] tels que f (n) (x) = Q n (x)
e x
(quand x > 0)
Hypothse vraie en 0 (P0 = 1 = Q0 )
Pn (x) 1 Pn (x) 0 Pn (x) 1
n n + 1 : f (n) (x) = Q n (x)
e x => f (n+1) (x) = (( Qn (x)
) + x12 Q n (x)
)e x donc
le rsultat est prouv et la rcurrence se propage. (prendre par exemple Pn+1 (x) =
Pn Qn + X 2 (Pn0 Qn Q0n Pn ) et Qn+1 = X 2 Q2n )
Pn (x) 1
Une fois ce rsultat prouv, il est facile de voir que limx0+ Q n (x)
e x = 0, par
exemple en prenant le logarithme et en voyant quil tend vers . (ln(x) est ngli-
geable devant x1 en 0)
f est donc une fonction C , o toutes les drives sont nulles en 0, et qui vaut 0
en 0 et 1 linfini. (Et toutes les drives tendant naturellement vers 0 linfini).
Il faut "rduire" f pour la faire "tenir" dans [0,1], tout en respectant les contraintes.
Pour cela on considre g(x) = f (x.ex ). Cette fonction a vocation a tendre vers
linfini trs rapidement afin davoir rapidement toutes les drives nulles vers linfini,
de sorte ce quune "compression" de R+ [0, 1] ne cre pas de drives non nulles
en 1.
sin( x)
Quand x 1 , tan( 2 x) = cos( 2 x) (1x)
1
donc h(x) = g(tan( 2 x)) a encore
2 2
toutes ses drives nulles en 0 (puisque les drives en 0 de tan ne posent pas de soucis
1
particulier et que dans g il y a encore du e x en facteur) et idem en linfini (d au
e(an 1)x en facteur dans g tandis que tan a des drives quivalentes des fractions
rationnelles)
76
A.2 Market Law of Losses A PREUVES MATHMATIQUES
Soi LK lesprance de la perte sur la tranche [0, K%] vue par le march, et L(K)
la probabilit vue par le march pour que la perte atteigne K.
RK
LK = 0 xdL(x) + K(1 L(K)), par dfinition
RK
Ceci se rcrit LK = K 0 L(x)dx et donc L K = 1 L(K)
K
tranche [0, K%] est faite pour que justement on ait que la perte calcule par la copule
gaussienne soit gale celle du march.
RK
Soit LK = K 0 L(x, K )dx
K K L
Ainsi L
R
K = 1 L(K, K ) K 0 (x, K )dx
K
R K L
ou encore LK = 1 L(K, K ) Skew(K, K ) 0 (x, K )dx
K
R K L
Rho(K, K ) = 0 (x, K )dx
En combinant les 2 expressions que lon a, on retrouve :
77
A.3 Simulation dune variable alatoire normale
A centre
PREUVES
rduite
MATHMATIQUES
t2
Preuve On rappelle que si X N (0, 1) alors E(eitX ) = e 2 .
Fixons et intressons nous au couple (X cos + Y sin , X sin Y cos ).
Sa fonction caractristique vautE(eit(X cos +Y sin )+iu(X sin Y cos ) )
= E(ei(t cos +u sin )X+i(t sin u cos ) )
(t cos +u sin )2 (t sin u cos )2
= e 2 e 2 , par indpendance de X et de Y.
t2 +u2
Cest dire aprs dveloppement e 2 qui est la fonction caractristique de (X,
Y). Ainsi par rotation dun angle la loi du couple ne change pas. Cest donc que
suit une loi uniforme sur [0, 2].
2 2 2
QuantZ Z R2 , E(eitR ) = E(eit(X +Y ) )
2 2 x2 y2
1
= 2 eit(x +y ) e 2 e 2 dxdy
R2
On effectue un changement de variable polaire. Il vient :
2
1
R 2 R + itr2 r2
E(eitR ) = 2 e e 2 rdrd
R + itr2 r02 0 1
= 0 e e 2 rdr = 12it (pas de difficults)
Passons maintenant au rsultat final. On prouve en fait que 2 ln U1 cos(2U2 )
et 2 ln U1 sin(2U2 ) sont normales centres rduites et indpendantes.
Preuve
Rappelons que si F dsigne la fonction de rpartition dune variable alatoire relle
X, et si U est uniforme sur [0, 1] alors F 1 (U ) X (en effet, P (X < a) = F (a) =
P (U <= F (a)) = P (F 1 (U ) < a))
78
A.4 Loi normale A PREUVES MATHMATIQUES
Si X est une variable alatoire qui suit une loi exponentielle de paramtre 12 ,
1 Rx 1
f (x) = 12 e 2 x et F (x) = 0 f (t)dt = 1 e 2 x ainsi si U est uniforme sur [0, 1],
2 ln(1 U ) exp 12 et donc comme U a mme loi que 1 U , 2 ln U exp 12 .
Ainsi ( 2 ln U1 cos(2U2 ), 2 ln U1 sin(2U2 )) a mme loi quun couple de 2
variables normales centres rduites indpendantes.
On aurait pu prouver directement par changement de variable le rsultat, mais il
semble plus comprhensible de dtailler de cette manire.
Une manire dapproximer cette intgrale est dcrite dans Hull, 1993, chapitre 10.
79
B IMPLMENTATION DES FONCTIONS
For j = 0 To 3
summ = summ + aa(i) * aa(j) * f(bb(i), bb(j), aprim, bprim, rho)
Next j
Next i
summ = summ * Math.Sqr(1# - rho * rho) / pi
N2 = summ
Exit Function
Else
denum = Math.Sqr(a * a - 2# * rho * a * b + b * b)
rho1 = (rho * a - b) * sign(a) / denum
rho2 = (rho * b - a) * sign(b) / denum
delta = (1# - sign(a) * sign(b)) / 4#
N2 = N2(a, 0#, rho1) + N2(b, 0#, rho2) - delta
Exit Function
End If
End Function
80
B.1 Pricer de CDS B IMPLMENTATION DES FONCTIONS
81
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
Next k
If (tfinal < 10) And (tfinal > n) Then
l = lambdas(n + 1)
s = s + (l / (l + r)) * (Math.Exp(-(r + l) * n)) * (1 - Math.Exp(-(r + l) * (tfinal
- n)))
End If
floatleg = s * (1 - recovery)
CALCUL DE LA FIXED LEG
integr_lambda = 1 = exp (integrale de lambda de 0 ti)
n = Int(4 * tfinal)
s = 0#
For k = 1 To n
l = lambdas(1 + Int((k - 1) / 4))
temp = integr_lambda * l * Math.Exp(-r * (k - 1) * 4)
aa = l + r
temp = temp * ((1 - Math.Exp(-0.25 * aa)) / (aa * aa) - 0.25 * Math.Exp(-0.25
* aa) / aa)
integr_lambda = integr_lambda * Math.Exp(-0.25 * l)
s = s + 0.25 * Math.Exp(-r * k / 4) * integr_lambda + temp
Next k
If (tfinal < 10) And (tfinal > (n / 4)) Then
l = lambdas(Int(tfinal) + 1)
temp = integr_lambda * l * Math.Exp(-r * n * 4)
aa = l + r
bb = tfinal - n / 4
temp = temp * ((1 - Math.Exp(-bb * aa) / (aa * aa)) - bb * Math.Exp(-bb * aa)
/ aa)
integr_lambda = integr_lambda * Math.Exp(-bb * l)
s = s + bb * Math.Exp(-r * tfinal) * integr_lambda + temp
End If
rbpv = s
calcule_spread = floatleg / rbpv
End Function
Nous utilisons quelques fonctions dExcel (fonction Beta et Gamma) grce au snip-
pet : Application.WorksheetFunction.GammaLn(x) (on peut remplacer GammaLn
par nimporte quelle fonction dExcel).
Dans lordre de ce code : calcul par rcurrence, par loi beta puis par monteCarlo.
Chacune de ces fonctions utilise beaucoup de petites fonctions.
82
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
Il faut faire attention quelque chose dautre : lorsque lon dit que lon achte la
tranche [K1 , K2 ], cela veut dire que lorsque les pertes (en prenant en compte le taux
de recouvrement) atteignent K1 % du nominal on commence payer.
Ainsi en considrant un taux de recouvrement de 40% par exemple, la tranche
[60%, 100%] est de fait "fictive" puisque les pertes natteindront au pire que 60%.
Par contre la loi Beta est "rgle" sur [0, 1]. Il faut donc effectuer un "change-
ment dchelle", cest dire rajuster la perte afin quelle concorde avec les autres
algorithmes.
Option Explicit
Public recovery(1 To 10) As Double, correl(1 To 10) As Double, leverage(1 To 10)
As Double
Public lambdas(1 To 10, 1 To 10) As Double
Public k1 As Double, k2 As Double
Public floatleg As Double, rbpv As Double
Dim pi(1 To 10, 0 To 10) As Double pour calculer la loi inverse de TAUi
For i = 1 To 10
grandL = grandL + leverage(i) * (1 - recovery(i))
Next i
k1 = k1 * grandL
k2 = k2 * grandL
grandN = Int((grandL / u) + 0.0001)
grandT = Int(tfin * nb_integr_t)
For i = 1 To 10
levera(i) = Int((leverage(i) * (1 - recovery(i))) / u)
Next i
cration de la table des probabilits
ReDim table(0 To grandT, 0 To grandN) As Double contient P(Lt = n*u)
ReDim temp(0 To 1, 0 To grandN) As Double contient P(Lt,i = n*u)
initialise_TAUiMoins1
For nt = 0 To grandT
t = tfin * (CDbl(nt) / CDbl(grandT))
For j = 0 To grandN
83
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
table(nt, j) = 0#
Next j
For nz = 1 To nb_integr_z
z = -6# + 12# * CDbl(nz) / CDbl(nb_integr_z)
effacer temp, grandN
temp(0, 0) = 1#
For i = 1 To 10
ligne = i Mod 2
For j = 0 To grandN
p = proba_condition(i, t, z)
If j >= levera(i) Then
temp(ligne, j) = temp(1 - ligne, j) * (1 - p) + temp(1 - ligne, j - levera(i)) * p
Else
temp(ligne, j) = temp(1 - ligne, j) * (1 - p)
End If
Next j
Next i
For j = 0 To grandN
table(nt, j) = table(nt, j) + temp(0, j) * Exp(-z * z * 0.5) * 12# / nb_integr_z
Next j
Next nz
For j = 0 To grandN
table(nt, j) = table(nt, j) / Math.Sqr(2 * Tout.pi)
Next j
Next nt
fin de cration de la table
floatleg
floatleg = Math.Exp(-Tout.r * tfin) * espe_recur(grandT, table, grandN, u) espe
= E(Lt[k1-k2])
integr = 0#
For nt = 1 To grandT
t = tfin * (CDbl(nt) / CDbl(grandT))
integr = integr + Math.Exp(-Tout.r * t) * espe_recur(nt, table, grandN, u) * tfin
/ CDbl(grandT)
Next nt
floatleg = floatleg + integr * Tout.r
fixedleg
rbpv = 0#
n = Int(tfin * 4)
NTFinal = Int(0.25 * CDbl(grandT) / tfin)
For k = 1 To n
integr = 0#
For nt = 0 To (NTFinal - 1)
t = k / 4# + 0.25 * CDbl(nt) / CDbl(NTFinal)
84
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
85
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
Next i
floatleg = floatleg * t
End Function
86
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
87
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
t = 0#
n = Int(tfin * 4)
For i = 1 To n i designe cette fois le ieme intervalle de temps
ii = CDbl(i)
t = t + Math.Exp(-Tout.r * ii / 4) * ((k2 - k1) / 4 - evaluer_loss(taui, (ii - 1#)
/ 4#, ii / 4#))
Next i
t = t + Math.Exp(-Tout.r * tfin) * ((k2 - k1) * (tfin - CDbl(n) / 4#) - eva-
luer_loss(taui, CDbl(n) / 4#, tfin))
If Not ok Then
dejarbpv = t
dejacalcule = True
End If
dejacalcul :
floatleg = floatleg + IIf(ok, s, dejafloat)
rbpv = rbpv + IIf(ok, t, dejarbpv)
Next k
floatleg = floatleg / nb_simulations
rbpv = rbpv / nb_simulations
calculer_spread_montecarlo = floatleg / rbpv
End Function
Private Function rembourser(i As Integer, taui() As Double) As Double
Dim k As Integer, l As Double
For k = 1 To i
l = l + leverage(taui(1, k)) * (1 - recovery(taui(1, k)))
Next k
rembourser = plus(l - k1) - plus(l - k2)
End Function
88
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
89
B.2 Pricer de CDO B IMPLMENTATION DES FONCTIONS
End Function
Private Sub effacer(ByRef temp() As Double, ByVal grandN As Integer)
Dim i As Integer
For i = 0 To grandN
temp(0, i) = 0#
temp(1, i) = 0#
Next i
End Sub
Private Function leppcm() As Double
Dim retour As Double, i As Integer
retour = leverage(1) * (1 - recovery(1))
For i = 2 To 10
retour = ppcm(retour, leverage(i) * (1 - recovery(i)))
Next i
leppcm = retour
End Function
90
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
B.3 Interpolations
Notre logiciel a t crit en C# et cest donc dans ce langage que lon crit toutes
nos interpolations. Encore une fois, le code est essentiellement fait de boucles et de
petites conditions. Il est donc aisment transposable dans nimporte quel langage.
Toutes nos fonction dinterpolation ont la mme signature : elles prennent en en-
tre deux tableaux de nombres rels, les abscisses et ordonnes des points interpoler.
Le rsultat est un tableau de 101 rels, dcrivant les ordonnes de la fonction din-
terpolation dont les abscisses sont distribues rgulirement entre la premire et la
dernire abscisse.
Ce choix de 101 nest pas anodin : nous donnons 0 et 1 en premire et dernire
abscisses et les abscisses dinterpolation sont donc tous les 0.01.
Enfin, la convolution, lintgrale et Bzier utilisent des fonctions communes : dis-
tance() qui mesure la distance (somme des carrs des diffrences) entre les points
dentre par lesquels on doit passer, et les points de linterpolation ; il y a aussi la
fonction de modification locale de points cls crant ces diffrentes interpolation.
B.3.1 Stefen
91
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
// en 0
double deltax = abs_depart[0] - abs_depart[1] ;
coeffs[0, 0] = (ord_depart[0] - ord_depart[1] - deltax * pentes[1]) / (deltax *
deltax) ;
coeffs[0, 1] = 2.0 * coeffs[0, 0] * deltax + pentes[1] ;
coeffs[0, 2] = ord_depart[0] ;
for (int i = 1 ; i < (n - 2) ; i++)
{
deltax = abs_depart[i + 1] - abs_depart[i] ;
double pent = (ord_depart[i + 1] - ord_depart[i]) / deltax ;
coeffs[i, 0] = (pentes[i] + pentes[i + 1] - 2.0 * pent) / (deltax * deltax) ;
coeffs[i, 1] = (3.0 * pent - 2.0 * pentes[i] - pentes[i + 1]) / deltax ;
coeffs[i, 2] = pentes[i] ;
coeffs[i, 3] = ord_depart[i] ;
}
// en n-2
deltax = abs_depart[n - 1] - abs_depart[n - 2] ;
coeffs[n - 2, 0] = (ord_depart[n - 1] - ord_depart[n - 2] - deltax * pentes[n - 2]) /
(deltax * deltax) ;
coeffs[n - 2, 1] = pentes[n - 2] ;
coeffs[n - 2, 2] = ord_depart[n - 2] ;
// calcul final : utilisation des coeffs calculs plus tt
int ind = 0 ;
for (int i = 0 ; i < 101 ; i++)
{
double x = .01 * (double)(i) ;
if (x > abs_depart[ind + 1])
ind++ ;
double xx = x - abs_depart[ind] ;
if (ind == 0 || ind == (n - 2))
fonction[i] = coeffs[ind, 0] * xx * xx + coeffs[ind, 1] * xx + coeffs[ind, 2] ;
else
fonction[i] = coeffs[ind, 0] * xx * xx * xx + coeffs[ind, 1] * xx * xx + coeffs[ind,
2] * xx + coeffs[ind, 3] ;
}
return fonction ;
}
B.3.2 Exponentielle
92
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
double[] pentes = new double[n] ; // pente en xi. 0 et n-1 sont remplis aprs
double[,] coeffs = new double[n - 1, 4] ; // ax^3+bx^2++cx+d pour 1 n-3, sinon
ax^2+bx+c pour 0 et n-2
// calcul des pentes en chaque point
for (int i = 1 ; i < (n - 1) ; i++)
{
double si = (ord_depart[i+1]-ord_depart[i])/(abs_depart[i+1]-abs_depart[i]) ;
double simoins1 = (ord_depart[i]-ord_depart[i-1])/(abs_depart[i]-abs_depart[i -
1]) ;
double hi = abs_depart[i + 1] - abs_depart[i] ;
double himoins1 = abs_depart[i] - abs_depart[i - 1] ;
double pi = (simoins1 * hi + si * himoins1) / (himoins1 + hi) ;
if (si * simoins1 <= 0) // signe oppos
pentes[i] = 0.0 ;
else if (Math.Abs(pi) > (2 * Math.Min(Math.Abs(simoins1), Math.Abs(si))))
pentes[i] = 2 * Math.Min(Math.Abs(simoins1), Math.Abs(si)) * ((si > 0) ? 1.0 :
-1.0) ;
else
pentes[i] = pi ;
}
double deltax ;
// calcul des coeffs
for (int i = 1 ; i < (n - 2) ; i++)
{
deltax = abs_depart[i + 1] - abs_depart[i] ;
double pent = (ord_depart[i + 1] - ord_depart[i]) / deltax ;
coeffs[i, 0] = (pentes[i] + pentes[i + 1] - 2.0 * pent) / (deltax * deltax) ;
coeffs[i, 1] = (3.0 * pent - 2.0 * pentes[i] - pentes[i + 1]) / deltax ;
coeffs[i, 2] = pentes[i] ;
coeffs[i, 3] = ord_depart[i] ;
}
// calcul des pentes en 0 et en n-1
// en 0
deltax = abs_depart[0] - abs_depart[1] ;
double a = (ord_depart[0] - ord_depart[1] - deltax * pentes[1]) / (deltax * deltax) ;
pentes[0] = 2.0 * a * deltax + pentes[1] ;
// en n-1
deltax = abs_depart[n - 1] - abs_depart[n - 2] ;
a = (ord_depart[n - 1] - ord_depart[n - 2] - deltax * pentes[n - 2]) / (deltax *
deltax) ;
pentes[n - 1] = pentes[n - 2] + 2 * a * deltax ;
93
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
94
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
B.3.3 Convolution
95
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
}
return interpol_steffen2(abs_depart, ord_bis) ;
}
private static double[] convoler(double[] fonction)
{
double[] bis = new double[101] ;
for (int i = 0 ; i < 101 ; i++)
{
double s = 0.0 ;
double s_poids = 0.0 ;
for (int j = -3 ; j <= 3 ; j++)
{
double poids = f_convol(Math.Abs(j)) ;
if ((i + j) >= 0 && (i + j) < 101)
{
s_poids += poids ;
s += poids * fonction[i + j] ;
}
}
bis[i] = s / s_poids ;
}
return bis ;
}
private static double f_convol(int x)
{
if (x == 0)
return 1.0 ;
else if (x == 1)
return .7 ;
else if (x == 2)
return .3 ;
else if (x == 3)
return .1 ;
else
return 0.0 ;
}
B.3.4 Bzier
Nous dveloppons ici lalgorithme des courbes de tendance, non pas celui par
inversion de matrice. Linterpolation de Bzier ncessite dans un premier temps de
96
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
{
int n = abs_depart.Length ;
double[] ord_bis = new double[n] ;
Array.Copy(ord_depart, ord_bis, n) ;
if (les_t == null)
les_t = calculer_t(abs_depart) ;
double[] fonction = bezier(abs_depart, ord_depart, les_t) ;
double erreur = distance(fonction, abs_depart, ord_depart) ;
Random r = new Random() ;
for (int i = 0 ; i < 2500 ; i++)
{
int indice = r.Next(n) ;
double last_val = ord_bis[indice] ;
modifier(ord_bis, indice, r) ;
fonction = bezier(abs_depart, ord_bis, les_t) ;
if (erreur < distance(fonction, abs_depart, ord_depart))
{
ord_bis[indice] = 2 * last_val - ord_bis[indice] ;
fonction = bezier(abs_depart, ord_bis, les_t) ;
if (erreur < distance(fonction, abs_depart, ord_depart))
ord_bis[indice] = last_val ;
else
erreur = distance(fonction, abs_depart, ord_depart) ;
}
else
erreur = distance(fonction, abs_depart, ord_depart) ;
}
return fonction ;
}
private static double[] bezier(double[] abs_depart, double[] ord_depart, double[]
les_t)
{
double[] result = new double[101] ;
int n = abs_depart.Length ;
result[0] = ord_depart[0] ;
result[100] = ord_depart[n - 1] ;
for (int i = 1 ; i < 100 ; i++)
{
double s = 0.0 ;
for (int k = 0 ; k < n ; k++)
s += MesMaths.ckn[n - 1][k] * ord_depart[k] * Math.Exp(k * Math.Log(les_t[i])
+ (n - 1 - k) * Math.Log(1 - les_t[i])) ;
result[i] = s ;
}
return result ;
}
97
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
B.3.5 Intgrale
public static double[] interpol_integrale(double[] abs_depart, double[] ord_depart)
{
int n = abs_depart.Length ;
double[] abs_derivees = new double[n + 1] ;
double[] derivees = new double[n + 1] ;
abs_derivees[0] = 0.0 ; abs_derivees[n] = 1.0 ;
for (int i = 0 ; i < n - 1 ; i++)
{
abs_derivees[i + 1] = 0.5 * (abs_depart[i] + abs_depart[i + 1]) ;
derivees[i + 1] = (ord_depart[i + 1] - ord_depart[i]) / (abs_depart[i + 1] -
abs_depart[i]) ;
}
derivees[0] = derivees[1] ;
98
B.3 Interpolations B IMPLMENTATION DES FONCTIONS
derivees[n] = derivees[n - 1] ;
double[] fonction = interpo_integr(ord_depart, abs_derivees, derivees) ;
double erreur = distance(fonction, abs_depart, ord_depart) ;
Random r = new Random() ;
for (int i = 0 ; i < 2000 ; i++)
{
int indice = r.Next(n+1) ;
double last_val = derivees[indice] ;
modifier(derivees, indice, r) ;
fonction = interpo_integr(ord_depart, abs_derivees, derivees) ;
if (erreur < distance(fonction, abs_depart, ord_depart))
{
derivees[indice] = 2 * last_val - derivees[indice] ;
fonction = interpo_integr(ord_depart, abs_derivees, derivees) ;
if (erreur < distance(fonction, abs_depart, ord_depart))
derivees[indice] = last_val ;
else
erreur = distance(fonction, abs_depart, ord_depart) ;
}
else
erreur = distance(fonction, abs_depart, ord_depart) ;
}
return fonction ;
}
private static double[] interpo_integr(double[] ord_depart, double[] abs_derivees,
double[] derivees)
{
double[] fonc = interpol_steffen2(abs_derivees, derivees) ;
double[] fonction = new double[101] ;
fonction[0] = ord_depart[0] ;
for (int i = 1 ; i < 101 ; i++)
fonction[i] = fonction[i - 1] + .01 * fonc[i] ;
return fonction ;
}
99
TABLE DES FIGURES TABLE DES FIGURES
100
TABLE DES FIGURES TABLE DES FIGURES
101
TABLE DES FIGURES TABLE DES FIGURES
Bibliographie
[1] SG Credit Research Team. Pricing CDOs with a smile. Fvrier 2005.
[2] SG Credit Research Team. Bespoke CDO : latest Developments. Juillet 2006.
[3] SG Credit Research Team. Pricing and hedging correlation products. Juillet
2004.
[4] James Wood and Ed Parcell (Derivative Fitch). Wiping the smile off your base.
Juin 2007.
[5] SG Credit Research Team. Modlisation et valuation des produits drivs de
crdit. Dcembre 2007.
[6] M.Steffen (Astronomy and Astrophysics). A simple method for monotonic in-
terpolation in one dimension. Aot 1990.
102