Méthode de Monte Carlo pour le calcul d'options
LADIAS Elie, WANG Shuai 7 juin 2013
Table des matières
1 Méthode de Monte-Carlo et Calcul d'intégrales 4
1.1 Description de la méthode . . . 4
1.2 Construction de l'intervalle de conance. . . 4
1.3 Exemple : Calcul du volume de la sphère unité dansR6 . . . 5
2 Méthodes de réduction de variance 8 2.1 Méthode de l'échantillonnage préférentiel . . . 8
2.2 Variables de contrôle . . . 9
2.3 Variables antithétiques . . . 9
2.4 Application . . . 9
3 Application : Calcul du prix d'une option en nance 13 3.1 Les options . . . 13
3.2 Pricing d'une option. . . 13
3.3 Option panier . . . 14
4 Annexe 16 4.1 Code R : volume de la sphère . . . 16
4.2 Code R : volume de la sphère avec échantillonnage préférentiel 17 4.3 Code R : calcul des diérents calls dans la premiere partie . . 18
4.4 Code R : Calcul du call européens dans la troisième partie . . 22
4.5 Code R : Calcul du call sur les options paniers . . . 23
La naissance de la méthode Monte-Carlo remonte à l'expérience de l'ai- guille de Buon en 1777. Le comte Georges-Louis Leclerc de Buon réussit à estimerπen lançant de nombreuses fois une aiguille sur son parquet. Un tra- vail long et fastidieux, c'est pourquoi les méthodes Monte-Carlo se sont réel- lement développées avec l'apparition des premiers ordinateurs qui donnaient la possibilité de simuler un grand nombre d'expériences aléatoires à moindre coût. Ainsi, c'est sous l'impulsion de John Von Neumann et Stanislas Ulam, lors de la seconde guerre mondiale, que les méthodes de Monte-Carlo ont été vulgarisées. Ces deux mathématiciens ont utilisé ces méthodes probabilistes pour résoudre des équations aux dérivées partielles dans des recherches sur la fabrication de la bombe atomique.
Nous nous intéressons à ces méthodes car en nance, elles permettent de cal- culer avec une certaine précision le prix de produit dérivée que l'on ne peut pas calculer analytiquement. Ces méthodes ont de plus l'avantage d'avoir une vitesse de convergence deK/√
n, insensible à la dimension.
Dans un premier temps, on expliquera le fonctionnement des méthodes Monte- Carlo(MC) pour le calcul d'intégrale, puis on verra comment optimiser nos calculs avec diérentes méthodes de réduction de variance et enn on verra les applications de ces méthodes en nance.
1 Méthode de Monte-Carlo et Calcul d'intégrales
1.1 Description de la méthode
La méthode Monte-Carlo repose sur un théorème fondamental de proba- bilités, la loi forte des grands nombres.
Théorème 1. Soit (Xi)i≥1 une suite de variables aléatoires indépendantes suivant toutes la même loi qu'une variable aléatoire X. On suppose que E(|X|)<+∞. Alors pour tout ω :
P
n→∞lim
X1(ω) +· · ·+Xn(ω)
n =E(X) = 1
L'idée de la méthode Monte-Carlo est de mettre la quantité recherchée sous la forme d'une espérance de variable aléatoire puis d'approximer cette quantité en utilisant la loi forte des grands nombres.
Nous pouvons résumer cette méthode en trois étapes, premièrement nous mettons notre intégrale sous la forme d'une espérance de variable aléatoire.
Ensuite, nous devons calculer une quantité de la forme E(X) où X est une variables aléatoires. Nous supposons que l'on sait simuler une suite de va- riable aléatoire (Xi)i≥1 indépendante et identiquement distribuée de loi X.
Nous simulons donc cette suite, puis nous approximonsE(X) par : 1
N(X1+...+XN)'E(X)
Par la loi forte des grands nombres nous pouvons dire que notre approxima- tion nira par être égale à notre espérance. Cependant pour un nombre de simulations N ni nous avons aucune idée de la qualité de notre approxi- mation. C'est pourquoi nous allons voir comment construire un intervalle de conance de niveauαque nous donnerons en plus de notre estimation. C'est- à-dire que nous donnerons en plus de notre valeur un intervalle où la valeur réel aα%de chance de se trouver. Nous allons voir comment construire cette intervalle.
1.2 Construction de l'intervalle de conance.
La construction de l'intervalle de conance repose sur un deuxième théo- rème fondamental de probabilités, le théorème central limite.
Théorème 2. Soit (Xi)i≥1 une suite de variables aléatoires indépendantes identiquement distribuées telles queE(X12)<+∞. Notonsσ2la variance de X1
Alors
(
√n
σ n) −→
n →∞N(0,1)
où n est l'erreur commise, c'est-à-dire n=E(X)− 1
n(X1+· · ·+Xn)
Nous avons √
n
σ (n) −→
n →∞N(0,1) Nous voulons
P[n< a] = 1−α
Nous déduisons quea=u1−α/2est le fractile d'ordre1−α/2de la loi normale centrée réduite. Ainsi, nous pouvons écrire que
−u1−α/2 ≤
√n
σ n≤u1−α/2
⇔ X¯n−u1−α/2≤E(X)≤X¯n+u1−α/2
Finalement nous obtenons un intervalle de conance de la forme X¯n−u1−α/2 σ
√n; ¯Xn+u1−α/2 σ
√n
σ étant dans la plupart des cas inconnu nous utiliserons l'éstimateur sans biais de la variance
V = 1 N −1
n
X
i=1
(Xi−X¯n)2
Avec V, on peut maintenant obtenir un intervalle de conance de bonne qualité qui sera de la forme
X¯n−u1−α/2 rV
n; ¯Xn+u1−α/2 rV
n
1.3 Exemple : Calcul du volume de la sphère unité dans R6 Nous cherchons à calculer le volume de la sphère de rayon 1 et de centre OR6 dans R6 par la méthode Mone-Carlo. Nous pouvons bien entendu cal- culer ce volume analytiquement, il est égal àV =π3/6. Nous allons noterS la sphère, alors :
S ={x∈R6; ||x||2<1}
La quantité que nous cherchons à calculer est donc V ol(S) =
Z
S
dx= Z
R6
1l{||x||2<1}dx
Figure 1 Volume de la sphère par Monte-Carlo
0 2000 4000 6000 8000 10000
4567
Nombre de simulations
Volume
Volume de la boule Estimation par Monte−Carlo
Mettons cette intégrale sous la forme d'une espérance, pour cela on remarque queS est inclus dans l'hypercube de dimension 6 que nous noteronsQ, on a donc :
V ol(S) = Z
Q
1l{||x||2<1}dx
Notons dPQ(x) la probabilité uniforme sur Q, on a dPQ(x) = dx/64. On peut donc maintenant écrire
V ol(S) = 64 Z
Q
1l{||x||2<1}dPQ(x) = 64EQ[1l{||X||2<1}]
Notre intégrale est maintenant sous la forme d'une espérance. Nous allons maintenant simuler une suite(Xi)i=1...N de N variables uniformes surQpuis notre volume sera donné en multipliant par64 la moyenne desXi. Pour cal- culer notre volume nous avons écrit l'algorithme suivant sur R.
(i) Simulation N variables aléatoire de loi uniforme sur Q:
N=1000;
X=rep(1,N);
Y=matrix(runif(6*N), ncol=N);
(ii) Simulation de l'indicatrice:
Z=colSums(Y));
X[Z>1]=0;
(iii) Le Volume de la sphère est donné par (64*somme)/N:
Xb=cumsum(X)/(1:N);
Ec=64*Xb;
On obtient la gure 1. Nous voyons que l'approximation n'est pas très pré- cise, on se rend compte de l'importance de rajouter l'intervalle de conance.
Nous allons le rajouter sur notre gure, on choisira 0.95 comme niveau de conance. Nous ajoutons quelques lignes de code à notre algorithme.
(iv) Calcul de la variance:
Nmoinsun=(1:N)-1;
Nmoisun=[1]=1;
V=rep(NA,N);
V=64^2*cumsum((X-Xb)^2)/Nmoinsun;
(v) Calcul de l'intervalle de confiance:
Iinf=(Ec-qnorm(0.975, mean=0, sd=1)*sqrt(V/(1:N)));
Isup=(Ec+qnorm(0.975, mean=0, sd=1)*sqrt(V/(1:N)));
Figure 2 Volume de la sphère par Monte-Carlo et intervalle de conance
0 2000 4000 6000 8000 10000
2345678
Nombre de simulations
Volume
Volume de la boule Estimation par Monte−Carlo Intervalle de confiance
En plus de nous apporter des informations précieuses sur la précision de nos calculs, l'intervalle de conance nous donne la vitesse de convergence de la méthode. Ici, elle est de l'ordre deσ/√
n. Dans la deuxième partie nous verrons comment diminuer cette vitesse de convergence à l'aide de diérentes méthodes de réduction de variance.
2 Méthodes de réduction de variance
Nous avons vu que la vitesse de convergence de notre méthode dépend directement deσ2, la variance de la quantité que nous voulons calculer. An d'améliorer cette vitesse de convergence, nous allons appliquer des méthodes dites de réduction de variance qui permettent de réduire la valeur deσ2. On cherche toujours à calculerE(X), l'idée générale est de trouver une autre représentation sous la forme d'espérance de la quantité à calculer telle que la variance de cette nouvelle quantité soit inférieure. C'est-à-dire chercher Y tel que :
(E[Y] =E[X]
V ar[Y] < V ar[X]
Nous allons voir trois méthodes de réduction de variance, la méthode de l'échantillonnage préférentiel, la méthode de la variable de contrôle et la méthode des variables antithétiques.
2.1 Méthode de l'échantillonnage préférentiel
Supposons que l'on cherche à calculer E[g(X)] et que la loi de X soit f(x)dx. La quantité que l'on cherche à évaluer vaut donc :
E[g(X)] = Z
R
g(x)f(x)dx
Soit maintenant,f˜la densité d'une autre loi telle quef >˜ 0etR
R
f˜(x)dx= 1, il est clair queE[g(X)] peut aussi s'écrire :
E[g(X)] = Z
R
g(x)f(x) f˜(x)
f˜(x)dx
Cela signie queE[g(X)] =E[g(Y)f(Y)
f˜(Y) ], siY suit la loi def˜(x)dxsousP.
On a donc une autre méthode de calcul deE[g(X)]en utilisantntirages de Y, Y1...Yn et en approchantE[g(X)] par :
1 n
g(Y1)f(Y1)
f˜(Y1) +· · ·+g(Yn)f(Yn) f˜(Yn)
A ce stade-là, nous ne sommes pas sûrs d'avoir amélioré l'algorithme. On l'aura amélioré siV ar(Z)< V ar(g(X)) oùZ = g(Y)f(Y)
f˜(Y) .
2.2 Variables de contrôle
Dans sa version la plus simple, il s'agit d'écrireE(f(X))sous la forme : E(f(X)) =E(f(X)−h(X)) +E(h(X))
avecE(h(X))qui peut se calculer explicitement etV ar((f(X)−h(X))sen- siblement plus petit queV ar(f(X)). On utilise alors une méthode de Monte- Carlo pour évaluerE(f(X)−h(X)) et le calcul direct pourE(h(X)). 2.3 Variables antithétiques
Supposons que l'on cherche à calculer : I =
Z 1
0
f(x)dx
commex7−→1−x laisse invariante la mesuredx, on a aussi : I = 1
2 Z 1
0
(f(x) +f(1−x))dx
On peut donc calculerI de la façon suivante. On tiren variables aléatoires U1, ...Unsuivant une loi uniforme sur[0,1]et indépendantes, et on approxime I par :
I2n= 1
2n(f(U1) +f(1−U1) +· · ·+f(Un) +f(1−Un)
Lorsqu'on compare cette méthode à une méthode de Monte-Carlo directe à l'issue de 2n tirages, on peut montrer que si la fonction f est continue monotone la qualité de l'approximation s'améliore.
2.4 Application
En nance nous sommes amenés à calculer des quantités du type : C =E[(eβG−K)+]
Où G est une variable aléatoire de loi normale centrée réduite. Nous ex- pliquerons dans la troisième partie à quoi correspond cette quantité. Nous allons calculer cette quantité C pour β = 1 et k = 1 avec la méthode de Monte-Carlo expliquée au paragraphe 1 puis avec les trois méthodes de ré- duction de variance.
Méthode Monte-Carlo sans réduction de variance :
De la même manière que dans la première partie on estime la quantitéC en
Figure 3 Estimation de C par Monte-Carlo
0e+00 2e+04 4e+04 6e+04 8e+04 1e+05
0.800.850.900.95
Simulations
Prix
−
−
−
Estimation MC Intervalle de confiance Valeur exacte
fonction du nombre de simulation, on calcule aussi l'intervalle de conance de niveau 0.95 ainsi que la vraie valeur deC qui se calcule facilement. Nous avons tracé les résultats obtenus sur la gure 3.
Méthode Monte-Carlo avec échantillonnage préférentiel :
Nous allons maintenant recalculer C mais cette fois avec la méthode de l'échantillonnage préférentiel.
Nous écrivons C sous la forme d'une intégrale et on multiplie et divise par β|x|:
C = Z
R
(eβx−K)+
β|x| β|x|e−x2/2 dx
√2π Nous faisons le changement de variablex=√
y surR+ etx=−√
y surR−, on peut alors écrireC sous la forme :
C= Z
R+
(eβ√y −K)++ (e−β√y−K)+
√2πy e−y/2dy 2
Nous remarquons alors que f(x) = e−y/2/2 est la densité d'une variable aléatoireY exponentielle de paramètre 1/2. Nous pouvons alors écrire :
C =E(eβ
√
Y −K)++ (e−β
√
Y −K)+
√ 2πY
La gure 4 nous donne les résultats obtenu, an de bien visualiser l'intérêt des méthodes de réduction de variance nous avons également tracé sur le graphique l'intervalle de conance obtenu avec une méthode de Monte-Carlo sans réduction de variance. Nous voyons tout l'intérêt de la méthode de réduction de variance, la convergence est beaucoup plus rapide et l'intervalle de conance obtenus est signicativement réduit.
Méthode Monte-Carlo avec variable de contrôle On peut noter
C−P =E[eβG−K] =eβ2/2−K
Figure 4 Estimation de C par MC avec échantillonnage préférentiel
0e+00 2e+04 4e+04 6e+04 8e+04 1e+05
0.800.850.900.95
Simulations
Prix
−
−
−
−
Estimation MC échantillonage pref IC MC classique
IC MC avec échantillonage pref Valeur exacte
Où
P =E[K−(eβG)+] Nous écrivons alors
C=eβ2/2−K+P
Puis nous calculonsCà l'aide de la méthode Monte-carlo ( gure 5 ) comparée Figure 5 Prix du call, Monte-Carlo avec variables de contrôle
0e+00 2e+04 4e+04 6e+04 8e+04 1e+05
0.800.850.900.95
Simulations
Prix
−
−
−
−
Estimation MC variable de controle IC MC variable de controle IC MC classique Valeur exacte
à la méthode classique, nous voyons bien que notre vitesse de convergence est nettement améliorée.
Méthode Monte-Carlo avec variables antithétiques
On se sert du fait que G suit la même loi que -G on peut donc écrire C = 1
2(E[ eβG−K)+] +E[(eβ(−G)−K
+] En simulant de cette manière, on obtient la gure 6
La vitesse de convergence est légèrement améliorée, mais ici cette méthode est moins ecace que les deux précédentes. An de comparer les trois mé- thodes de réduction de variance nous avons calculé1000foisC avec les trois
Figure 6 Prix du call, Monte-Carlo et variables antithétiques
0e+00 2e+04 4e+04 6e+04 8e+04 1e+05
0.800.850.900.95
Simulations
Prix
Estimation MC variables antithétiques IC MC classique
IC MC variables antithétiques Valeur exacte
méthodes de réduction de variance ainsi qu'avec la méthode de Monte-Carlo sans réduction de variance. Avec les résultats obtenu nous avons tracé la gure 7.
Nous voyons sur ce boxplot l'intérêt d'utiliser une méthode de réduction de Figure 7 Boxplot comparatif des diérentes méthodes
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
1 2 3 4
0.840.860.880.900.920.940.96 Sans réduction de variance Variable de contrôle Variables antithétiques Echantillonage préférentiel
variance, en eet en utilisant l'une de ces méthodes nos calculs de C sont beaucoup plus précis.
3 Application : Calcul du prix d'une option en - nance
3.1 Les options
Une option est un titre nancier donnant à son détenteur le droit, et non l'obligation d'acheter ou de vendre (selon qu'il s'agit d'une option de vente ou d'achat) une certaine quantité d'un actif nancier à une date convenue et à un prix xé d'avance. La description de l'option se fait à partir de cinq éléments qui sont :
• La nature de l'option : on parlera souvent de call pour les options d'achat et de put pour les options de vente.
• L'actif sous-jacent sur lequel porte l'option : il peut s'agir d'une action, d'une obligation, d'une devise...
• Le montant, c'est à dire la quantité d'actif sous-jacent à acheter ou vendre.
• L'échéance ou date d'expiration, qui limite la durée de vie de l'option : si l'option peut être exercée à n'importe quel instant on parle d'option américaine, si l'option ne peut être exercée qu'à l'échéance on parle d'option européenne.
• Le prix d'exercice qui est le prix, xé à l'avance auquel se fait la tran- sactions.
L'option à un prix, appelé prime. Notre problème est de déterminer le prix de cette option. C'est le problème du pricing.
Examinons, pour xer les idées, le cas d'un call européen, d'échéance T, sur une action dont le cours à la date t est donné par St. Soit K le prix d'exercice. Il est clair que si, à l'échéanceT, le prixK est supérieur au cours ST, le détenteur de l'option n'a pas intérêt à exercer. En revanche siST > K, l'exercice de l'option permet à son détenteur de faire un prot égal àST−K en achetant l'action au prixK et en la revendant sur le marché au coursST. Nous voyons qu'à l'échéance, la valeur du call est donnée par la quantité :
(ST −K)+
Ici nous nous intéressons à trouver le montant de la prime que l'acheteur du call doit payer, autrement dit il s'agit de déterminer à l'instant t = 0 une richesse(ST −K)+ disponible à l'instant T. C'est le problème du pricing.
3.2 Pricing d'une option.
On veut déterminer le prix d'un call dont le cours de l'actif sous-jacent est déterminé par
ST =S0e(r−
1 2σ
2)T+σ√ T∗G
où S0 = 100 est la valeur de l'actif à la date t = 0, σ est la volatilité de l'actif. la volatilité est une mesure de l'ampleur des variations du cours d'un actif nancier. r est le taux d'intérêt non risqué, T la date d'échéance de l'option etG une variable aléatoire de loi normale centrée réduite. On veut donc calculer :
C =e−rTE[(S0e(r−
1 2σ
2)T+σ√ T∗G
−K)+]
AvecS0,K,r,σ etT xé. Nous avons écrit une fonction qui prendS0,K,r, σetT en paramètres et retourne le prix du call. An d'améliorer la vitesse de convergence nous avons utiliser la méthode de l'échantillonnage préférentiel vue dans la première partie. Nous avons prisS0 = 100,K = 120, r= 0.02, σ= 0.2etT = 10. Nous avons tracé sur la gure 8 le prix du call en fonction du nombre de simulations. Ici nous pouvons comparer avec la valeur exacte
Figure 8 Prix Call avecS0 = 100,K = 120,r = 0.02,T = 10
0e+00 2e+04 4e+04 6e+04 8e+04 1e+05
24.525.025.526.026.5
Simulations
Prix
Estimation MC échantillonage pref IC MC avec échantillonage pref Valeur exacte
qui s'obtient facilement.
3.3 Option panier
Une option panier est une option ou l'actif sous-jacent est composé de plusieurs actifs risqué( action, option, devise) chacun uctuant en fonction d'une volatilité propre.
Le cours de notre actif sous-jacent s'écrit dans ce cas
St=
n
X
i=1
S0ierT− 1 2σ
2 iT+σi
√ T Gi
et le prix de l'option panier s'écrit
C =e−rTE[
n
X
i=1
S0ierT− 1 2σ
2 iT+σi
√ T Gi
−K]
En modiant légèrement la fonction PrixCallEchPref on obtient une fonction qui nous donnera le prix de notre option panier. Supposons qu'on à un panier de 5 actifs.
• Acitf 1 :S01 = 100,σ1 = 0.5.
• Acitf 1 :S02 = 200,σ2 = 0.2.
• Acitf 1 :S03 = 150,σ3 = 0.1.
• Acitf 1 :S04 = 300,σ4 = 1.
• Acitf 1 :S05 = 500,σ5 = 0.8.
Supposons que K = 1500, nous avons tracé le prix de l'option panier en fonction du nombre de simulation sur la gure 9. Dans le cas d'une option
Figure 9 Prix option panier
0 50000 100000 150000 200000 250000 300000
200210220230240
Simulations
Prix
Estimation MC IC
panier la méthode Monte-Carlo prend tout son sens, en eet il n'existe pas de formule numérique pour le calcul exact du prix de l'option et une méthode numérique sont impossible à mettre en ÷uvre. Dans cet exemple, la méthode de Monte-Carlo montre toute sa puissance et sa souplesse d'utilisation. Elle est quasiment aussi facile à programmer que la méthode dans le cas d'une seule action, et demande seulement un peu plus de temps de calcul et d'espace mémoire.
4 Annexe
4.1 Code R : volume de la sphère
#TER#15/04/2013
# 0.1.3 Exemple : Calcul du volume de la boule dans R6 N=10000;
X=rep(1,N);
Y=matrix(runif(6*N), ncol=N );
Y=Y*Y;
Z=sqrt(colSums(Y));
X[Z>1]=0;
Xb=cumsum(X)/(1:N);
Ec=64*Xb;
pdf("V1.pdf");
plot(Ec, ylim=c(5.16771-2,5.16771+2), col='red', xlab='Nombre de simulations',ylab='Volume', ,type='l') abline(h=5.16771);
legend('topright', c('Volume de la boule', 'Estimation par Monte-Carlo'), col=c('black','red'), pch=15);
dev.off();
#0.1.5: Calcul de l'intervalle de confiance.
Nmoinsun=(1:N)-1;
Nmoinsun[1]=1;
V=rep(NA,N)
V=64^2*cumsum((X-Xb)^2)/Nmoinsun;
Iinf=(Ec-qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N)));
Isup=(Ec+qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N)));
pdf("V2.pdf");
plot(Ec, ylim=c(5.16771-3,5.16771+3), col='red', xlab='Nombre de simulations',ylab='Volume', ,type='l') abline(h=5.16771);
points(Iinf, col='grey', pch='.');
points(Isup, col='grey', pch='.');
legend('topright', c('Volume de la boule', 'Estimation par Monte-Carlo', 'Intervalle de confiance'), col=c('black','red','grey'), pch=15);
dev.off();
4.2 Code R : volume de la sphère avec échantillonnage pré- férentiel
n_simul=10000;
sigma=0.5;
#Simulation d'un loi normale centré de variance sigma sur R6 : Y=matrix(rnorm(6*n_simul,0,sigma), ncol=n_simul);
#Simulation de g(X)=1{||Y||<1}
G=rep(1,n_simul);
Y2=Y*Y
temp=colSums(Y2)^2;
G[temp>1]=0;
#Simulation de f(y) : loi uniforme (-1,1) sur R6 X=matrix(1,nrow=6 , ncol=n_simul);
X[Y>1]=0;
X[Y<(-1)]=0;
F=rep(1,n_simul);
temp=colSums(X);
F[temp<6]=0;
#Calculer Ft de Y:
U2=colSums(Y2);
Ft=exp(-U/2*sigma^2)/((2*pi*sigma^2)^3)
#Caclul de la variable aléatoire cherché:
Z=(G*F)/Ft
#Monte-Carlo
MC=cumsum(Z)/(1:n_simul);
x11();
plot(MC, col='red', xlab='Nombre de simulations',ylab='Volume', ,type='l') abline(h=5.16771);
4.3 Code R : calcul des diérents calls dans la premiere par- tie
#EXEMPLE CALL REDUCTION DE VARIANCE:
#Simulation d'un call sans réduction de variance : N=100000;
G=rnorm(N,0,1);
#Simulation de N call:
X0=exp(G)-1;
C0=X0;
C0[X0<0]=0;
#Estimation du prix du call:
Pc0=cumsum(C0)/(1:N)
#Calcul de la variance:
V0=rep(0,N)
V0=cumsum((C0-Pc0)^2)/((1:N)-1);
#Intervalle de Confiance de niveau 0.95:
Iinf0=Pc0-qnorm(0.975, mean = 0, sd = 1)*sqrt(V0/(1:N));
Isup0=Pc0+qnorm(0.975, mean = 0, sd = 1)*sqrt(V0/(1:N));
#Résultat graphique:
pdf("CallBrut.pdf", height=8);
plot(Pc0, ylim=c(0.88-0.1,0.88+0.1), type='l', col='red', xlab='Simulations', ylab='Prix');
points(Iinf0, col='grey', type='l');
points(Isup0, col='grey', type='l');
legend('topright', c( 'Estimation MC', 'Intervalle de confiance', 'Valeur exacte'), col=c('red', 'grey','black'), pch='-');
abline(h=0.8870692, col='black');
dev.off()
# Simulation d'un call par Monte-Carlo avec méthode Variable de controle.
# On utilise: C=exp(beta/2)+P-K
# Simulation de N Put : X1=1-exp(G);
P1=X1;
P1[X1<0]=0;
#Simulation de N Call a l'aide de la formule : C1=exp(1/2)+P1-1;
#Estimation du prix du Call : Pc1=cumsum(C1)/(1:N);
#Calcul de la variance : V1=rep(0,N)
V1=cumsum((C1-Pc1)^2)/((1:N)-1);
#Intervalle de Confiance de niveau 0.95:
Iinf1=Pc1-qnorm(0.975, mean = 0, sd = 1)*sqrt(V1/(1:N));
Isup1=Pc1+qnorm(0.975, mean = 0, sd = 1)*sqrt(V1/(1:N));
pdf("CallVarCont.pdf", height=8);
plot(Pc1, ylim=c(0.88-0.1,0.88+0.1), type='l', col='red', xlab='Simulations', ylab='Prix');
points(Iinf0, col='grey', type='s');
points(Isup0, col='grey', type='s');
points(Iinf1, col='blue', type='s');
points(Isup1, col='blue', type='s');
legend('topright', c( 'Estimation MC variable de controle', 'IC MC variable de controle', 'IC MC classique', 'Valeur exacte'), col=c('red', 'blue', 'grey','black'), pch='-');
abline(h=0.8870692, col='black');
dev.off();
# Simulation d'un putt par Monte-Carlo avec méthode variables antithétiques.
#Simulation du call:
Xa=(exp(G)-1);
Xb=(exp(-G)-1);
Ca=Xa;
Ca[Xa<0]=0;
Cb=Xb;
Cb[Xb<0]=0;
C2=(Ca+Cb)/2
#Prix du call par Monte-Carlo:
Pc2=cumsum(C2)/(1:N);
#Calcul de la variance : V2=rep(0,N)
V2=cumsum((C2-Pc2)^2)/((1:N)-1);
#Intervalle de Confiance de niveau 0.95:
Iinf2=Pc2-qnorm(0.975, mean = 0, sd = 1)*sqrt(V2/(1:N));
Isup2=Pc2+qnorm(0.975, mean = 0, sd = 1)*sqrt(V2/(1:N));
pdf("CallVarAnti.pdf", height=8);
plot(Pc2, ylim=c(0.88-0.1,0.88+0.1), type='l', col='red', xlab='Simulations', ylab='Prix');
points(Iinf0, col='grey', type='s');
points(Isup0, col='grey', type='s');
points(Iinf2, col='blue', type='s');
points(Isup2, col='blue', type='s');
legend('topright', c( 'Estimation MC variables antithétiques', 'IC MC classique', 'IC MC variables antithétiques','Valeur exacte'), col=c('red', 'grey', 'blue','black'), pch=15);
abline(h=0.8870692, col='black');
dev.off();
#Simulation d'un call avec echantillonage pref:
Y=rexp(N,1/2);
Xc=exp(sqrt(Y))-1;
Xd=exp(-sqrt(Y))-1;
Cc=Xc;
Cc[Xc<0]=0;
Cd=Xd;
Cd[Xd<0]=0;
C3=(Cc+Cd)/(sqrt(2*pi*Y));
#Prix du call par Monte-Carlo:
Pc3=cumsum(C3)/(1:N);
#Calcul de la variance : V3=rep(0,N)
V3=cumsum((C3-Pc3)^2)/((1:N)-1);
#Intervalle de Confiance de niveau 0.95:
Iinf3=Pc3-qnorm(0.975, mean = 0, sd = 1)*sqrt(V3/(1:N));
Isup3=Pc3+qnorm(0.975, mean = 0, sd = 1)*sqrt(V3/(1:N));
pdf("CallEchPref.pdf", height=5);
plot(Pc3, ylim=c(0.88-0.1,0.88+0.1), type='l', col='red', xlab='Simulations', ylab='Prix');
points(Iinf0, col='grey', type='s');
points(Isup0, col='grey', type='s');
points(Iinf3, col='blue', type='s');
points(Isup3, col='blue', type='s');
legend('topright', c( 'Estimation MC échantillonage pref', 'IC MC classique', 'IC MC avec échantillonage pref', 'Valeur exacte'), col=c('red', 'grey', 'blue', 'black'), pch='-');
abline(h=0.8870692, col='black');
dev.off();
#---
#Construction des boxplot pour comparer les méthodes.
N=10000;
nb_simul=1000;
Pc0=rep(NA, nb_simul); #Sans réduction de variance for( i in 1:nb_simul){
G=rnorm(N,0,1);
#Simulation de N call:
X0=exp(G)-1;
C0=X0;
C0[X0<0]=0;
#Estimation du prix du call:
Pc0[i]=sum(C0)/N;
}
Pc1=rep(NA, nb_simul); #Avec variable de controle for(i in 1:nb_simul){
G=rnorm(N,0,1);
X1=1-exp(G);
P1=X1;
P1[X1<0]=0;
C1=exp(1/2)+P1-1;
Pc1[i]=sum(C1)/N;
}
Pc2=rep(NA, nb_simul); #Variables antithétiques for(i in 1:nb_simul){
G=rnorm(N,0,1);
Xa=(exp(G)-1);
Xb=(exp(-G)-1);
Ca=Xa;
Ca[Xa<0]=0;
Cb=Xb;
Cb[Xb<0]=0;
C2=(Ca+Cb)/2 Pc2[i]=sum(C2)/N;
}
Pc3=rep(NA, nb_simul); # échantillonage préferentiel for(i in 1:nb_simul){
G=rnorm(N,0,1);
Y=rexp(N,1/2);
Xc=exp(sqrt(Y))-1;
Xd=exp(-sqrt(Y))-1;
Cc=Xc;
Cc[Xc<0]=0;
Cd=Xd;
Cd[Xd<0]=0;
C3=(Cc+Cd)/(sqrt(2*pi*Y));
Pc3[i]=sum(C3)/N;
}
pdf("boxplot.pdf", height=8);
boxplot(Pc0, Pc2,Pc3, Pc1,col=c('red','blue','green','yellow'));
legend('topright', c('Sans réduction de variance', 'Variable de contrôle', 'Variables antithétiques', 'Echantillonage préférentiel'), col=c('red', 'blue', 'green', 'yellow'), pch=15);
abline(h=0.8870692, col='black');
dev.off()
4.4 Code R : Calcul du call européens dans la troisième par- tie
PrixCallEchPref=function(S0, r, sigma, T, K){
#Fonction qui calcule le prix d'un call européen
#Elle retourne le graphe du prix trouvé en fonction du nombre de simulation N_simul=10000;
Y=rexp(N_simul, 1/2);
X=rep(0, N_simul);
X1=rep(0, N_simul);
X=S0*exp(r*T-(1/2)*sigma^2*T+sigma*sqrt(Y)*sqrt(T))-K;
X1=X;
X1[X<0]=0;
Z=rep(0, N_simul);
Z1=rep(0, N_simul);
Z=S0*exp(r*T-(1/2)*sigma^2*T-sigma*sqrt(Y)*sqrt(T))-K;
Z1[Z<0]=0;
C=(X1+Z1)/(sqrt(2*pi*Y));
P=cumsum(C)/(1:N_simul);
PrixCallEchPref=exp(-r*T)*P;
V=rep(0,N_simul );
V=exp(-r*T)^2*cumsum((C-P)^2)/((1:N_simul)-1);
Iinf=PrixCallEchPref-qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N_simul));
Isup=PrixCallEchPref+qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N_simul));
x11();
plot(PrixCallEchPref, ylim=c(20,30), type='l', col='yellow', xlab='Simulations', ylab='Prix');
points(Iinf, col='grey', type='l');
points(Isup, col='grey', type='l');
}
4.5 Code R : Calcul du call sur les options paniers
#Pricing put sur portefeuille d'option.
PrixCalla=function(S0, r, sigma, T, K){
# Fonction qui retourne le prix d'une option lorsque l'actif sous jacent est un portefeuille
# S0 un vecteur de la valeurs initiale des sous jacents
# r le taux d'intérêt sans risque
# sigma un vecteur de volatilité des sous jacents
# K le strike N_simul=3*10^5;
X=rep(0,N_simul);
for(i in 1:N_simul){
G=rnorm(1, 0, 1);
X[i]=sum(S0*exp(r*T-(1/2)*sigma^2*T+sigma*sqrt(T)*G))-K;
}X1=X;
X1[X<0]=0;
P=cumsum(X1)/(1:N_simul);
PrixCalla=exp(-r*T)*P;
V=rep(0,N_simul );
V=exp(-r*T)^2*cumsum((X1-P)^2)/((1:N_simul)-1);
Iinf=PrixCalla-qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N_simul));
Isup=PrixCalla+qnorm(0.975, mean = 0, sd = 1)*sqrt(V/(1:N_simul));
pdf("portefeuille.pdf", height=8);
plot(PrixCalla, type='l',ylim=c(200,240), col='red', xlab='Simulations', ylab='Prix');
points(Iinf, col='grey', type='l');
points(Isup, col='grey', type='l');
legend('topright', c('Estimation MC', 'IC'), col=c('red', 'grey'), pch=15);
return(PrixCalla) }
S0=c(100,200,100,200,500);
r=0.02;
sigma=c(0.3,0.2,0.1,0.4,0.1);
T=10;
K=1500;
A=PrixCalla(S0,r,sigma,T,K);
Références
[1] Hasard nombres aléatoires et méthode Monte Carlo.
[2] Introduction au calcul stochastique appliqué à la nance.
[3] Méthodes de Monte-Carlo pour les équations de transport et de diusion.