Introduction au pricing d option en finance



Documents pareils
MATHS FINANCIERES. Projet OMEGA

Le modèle de Black et Scholes

TP1 Méthodes de Monte Carlo et techniques de réduction de variance, application au pricing d options

1.6- Génération de nombres aléatoires

Probabilités III Introduction à l évaluation d options


PROJET MODELE DE TAUX

Processus aléatoires avec application en finance

I. Introduction. 1. Objectifs. 2. Les options. a. Présentation du problème.

Théorie Financière 8 P. rod i u t its dé dérivés

Précision d un résultat et calculs d incertitudes

Manuel d Utilisateur - Logiciel ModAFi. Jonathan ANJOU - Maud EYZAT - Kévin NAVARRO

de calibration Master 2: Calibration de modèles: présentation et simulation d

Les équations différentielles

Propriétés des options sur actions

Estimation du coût de l incessibilité des BSA

Prix et couverture d une option d achat

QUESTIONS D ENTRETIENS EN FINANCE DE MARCHE

Calculating Greeks by Monte Carlo simulation

Valorisation d es des options Novembre 2007

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Master Modélisation Aléatoire Paris VII, Cours Méthodes de Monte Carlo en nance et C++, TP n 2.

Cours 7 : Utilisation de modules sous python

Cours d Analyse. Fonctions de plusieurs variables

Quantification Scalaire et Prédictive

Calibration de Modèles et Couverture de Produits Dérivés

Master IMEA 1 Calcul Stochastique et Finance Feuille de T.D. n o 1

La fonction exponentielle

Loi binomiale Lois normales

Correction du Baccalauréat S Amérique du Nord mai 2007

Hedging delta et gamma neutre d un option digitale

Claude Delannoy. 3 e édition C++

Exercice du cours Gestion Financière à Court Terme : «Analyse d un reverse convertible»

Examen d informatique première session 2004

Programmation C++ (débutant)/instructions for, while et do...while

Finance, Navier-Stokes, et la calibration

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

TP : Gestion d une image au format PGM

Filtrage stochastique non linéaire par la théorie de représentation des martingales

Résumé

Liste des notes techniques... xxi Liste des encadrés... xxiii Préface à l édition internationale... xxv Préface à l édition francophone...

Licence Sciences et Technologies Examen janvier 2010

Options exotiques. April 18, 2000

EXERCICE 4 (7 points ) (Commun à tous les candidats)

Surface de volatilité

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Premiers pas avec Mathematica

Séminaire RGE REIMS 17 février 2011

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

Correction de l examen de la première session

Nombre dérivé et tangente

Introduction à MATLAB R

M2 IAD UE MODE Notes de cours (3)

TRAVAIL D ETUDE ET DE RECHERCHE. Utilisation des arbres binomiaux pour le pricing des options américaines

Cours d Algorithmique et de Langage C v 3.0

Petite introduction aux mathématiques des dérivés financiers (notes de cours, version provisoire)

EXERCICES - ANALYSE GÉNÉRALE

Chapitre 0 Introduction à la cinématique

Modélisation et simulation

Simulation de variables aléatoires

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Exercice autour de densité, fonction de répatition, espérance et variance de variables quelconques.

Sur certaines séries entières particulières

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

Modèle GARCH Application à la prévision de la volatilité

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Dérivés Financiers Options

3 Approximation de solutions d équations

La Licence Mathématiques et Economie-MASS Université de Sciences Sociales de Toulouse 1

Options et Volatilité (introduction)

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Résumé des communications des Intervenants

Méthodes de Simulation

C f tracée ci- contre est la représentation graphique d une

Rappels sur les suites - Algorithme

Couverture des risques dans les marchés financiers

Polynômes à plusieurs variables. Résultant

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

MÉTHODE DE MONTE CARLO.

Chapitre 2 Le problème de l unicité des solutions

Exercice 1 Trouver l équation du plan tangent pour chaque surface ci-dessous, au point (x 0,y 0,z 0 ) donné :

I - PUISSANCE D UN POINT PAR RAPPORT A UN CERCLE CERCLES ORTHOGONAUX POLES ET POLAIRES

INTRODUCTION INTRODUCTION

TSTI 2D CH X : Exemples de lois à densité 1

Correction du baccalauréat S Liban juin 2007

Introduction à l analyse numérique : exemple du cloud computing

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Commun à tous les candidats

4 Distributions particulières de probabilités

ACTUARIAT 1, ACT 2121, AUTOMNE 2013 #12

TD1 Signaux, énergie et puissance, signaux aléatoires

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Calcul différentiel sur R n Première partie

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

ERRATA ET AJOUTS. ( t) 2 s2 dt (4.7) Chapitre 2, p. 64, l équation se lit comme suit : Taux effectif = 1+

Evaluation des options parlatransformée de Fourier

Continuité et dérivabilité d une fonction

TP: Représentation des signaux binaires. 1 Simulation d un message binaire - Codage en ligne

Qu est-ce-qu un Warrant?

NOTICE MÉTHODOLOGIQUE SUR LES OPTIONS DE CHANGE

Transcription:

Introduction au pricing d option en finance Olivier Pironneau Cours d informatique Scientifique 1 Modélisation du prix d un actif financier Les actions, obligations et autres produits financiers cotés en bourse ont des prix fluctuants établis en fonction de l offre et de la demande. En finance, on confond le nom du produit et son prix. Ainsi S t désigne le prix d un actif financier, par exemple l action Renault, à l instant t. S il n y avait pas d aléas dans les marchés on aurait S t+δt = S t (1 + µδt) où µ est la tendance de l actif, à la hausse (µ > 0) ou à la baisse (µ < 0). Cette relation exprime simplement que si l action Renault par exemple qui vaut aujourd hui 90$ monte de 4% en un an alors elle vaudra 90(1 + 0.04 1 ) = 90.3$ 12 dans un mois. Lorsque le taux d intérêt bancaire vaut r il est raisonnable de penser que µ = r, car si µ > r il serait plus avantageux d acheter ce produit financier que de prêter au taux r, et inversement, personne ne garderait le produit si µ < r. Mais le marché n étant pas entièrement prévisible, on écrit S t+δt = S t (1 + rδt + σ(w t+δt W t )) où W t est un processus aléatoire brownien et σ est un coefficient numérique appelé la volatilité. Pour la suite, nous n utiliserons qu une seule propriété de W : W t+δt W t = δt N (0, 1) 1

où N (0, 1) est le processus gaussien centré en zéro et de variance unité 1 Là encore la modélisation est très simple et dit simplement que la partie aléatoire est d autant plus grande que le pas de temps δt est grand et que la volatilité est grande. Ainsi pour prédire la valeur de l actif S le lendemain, le modèle a un paramètre, σ, ajusté chaque jour sur les données de la veille. Pour prédire la valeur due S dans un an il faut répéter le processus 365 fois. 1.1 Programmation La génération d un nombre aléatoire gaussien va se faire par la procédure gauss() ci-dessous. Celle-ci repose sur l utilisation de la fonction système random() qui rend un entier aléatoire compris entre 0 et un grand nombre RAND MAX (nombre prédéfini dont la valeur dépend de la précision arithmétique de l ordinateur). Ainsi chaque fois l instruction x = random() retourne une valeur différente pour x. Notez que (1+random())/double(1+RAND MAX) est un nombre quelconque entre 0 et 1 avec une probabilité uniforme. On démontre que si x et y sont deux nombres aléatoires de probabilité uniforme entre 0 et 1 alors cos(2πx) 2 log(y) est un nombre aléatoire sur R := (, + ) avec une distribution de probabilité gaussienne centrée en 0 et de variance 1. On obtient donc le programme suivant: #include <iostream> // pour les entrees sorties #include <cmath> // pour les fonctions, cos, log... #include <vector> // pour les vecteurs de la STL #include <fstream> // pour la gestion des fichiers using namespace std; // pour donner un sens a cout... const double two_pi =2*M_PI; // constante de la lib cmath 1 On rappelle qu une variable aléatoire est gaussienne N (µ, σ) si la probabilité qu elle appartienne à (x, x + dx) est (2πσ 2 ) 1/2 exp( (x µ) 2 /(2σ 2 ))dx. Remarquez que si x est N (0, 1), ax est N (0, a). 2

double gauss() { double x= double(1.+random())/double(1.+rand_max); double y= double(1.+random())/double(1.+rand_max); return sqrt( -2 *log(x) )*cos(two_pi*y); void EDOstoch(vector<double> &S, double S0, int M, double sigma, double r ) { // historique de S, valeur initiale de S, nb de jours, vol et taux const double dt=1./m, sdt =sigma*sqrt(dt); S[0]= S0; for(int i=1;i<m;i++) S[i]= S[i-1]*( 1 + r*dt + gauss()*sdt ); int main() { const double sigma=0.2, r=0.1; // volatilite, taux const int M=365; double So; vector<double> S(M); // prix de l actif chaque jour cout<<"entrer la valeur de So "; cin >>So; EDOstoch(S,So,M,sigma,r); cout <<"Valeur de S apres un an "<<S[M-1]<<endl; // ecriture des valeurs intermediaires dans un fichier // pour visualiser le resultat utiliser gnuplot: plot "result.dat" w l ofstream ff("result.dat"); for(int i=0;i<m;i++) ff<<s[i]<<endl; return 0; Remarque 1 Pour obtenir un entier aléatoire, random() utilise l overflow. Par exemple sur une machine 64 bits, si s est un entier plus grand que 2 32 le résultat de s s étant supérieur à 2 64 1, il ne tient pas dans le registre du multiplicateur de la machine, il y a overflow et la machine produit n importe quoi quand on calcule s s. Le nombre s utilisé dans random() s appelle en anglais seed. Le résultat de random() est utilisé comme seed pour l appel suivant de random(). Par défaut au début, s est toujours le même; donc si on exécute plusieurs fois ce programme on 3

obtiendra toujours les même valeurs. Pour obtenir des valeurs différentes à chaque exécution, ce qui est légitime puisque random() est censé générer des nombres aléatoires, il faut changer seed en rajoutant au début dans le main(): srand(time(null)); La fonction srand ne rend rien mais initialise seed à un entier calculé à partir de l horloge. Deux exécutions à deux temps différents donneront donc deux résultats différents. 160 "result.dat" 155 150 145 140 135 130 125 120 115 0 50 100 150 200 250 300 350 400 Figure 1: Une réalisation de S t sur un an. 4

2 Pricing d option Une option sur un actif financier est un contrat d achat ou de vente de l actif à un prix donné à une date future. Ce contrat est anonyme, il peut donc être revendu et le problème à résoudre est celui de la détermination de son prix. Prenons un exemple concret: une banque possède un actif qui vaut aujourd hui S 0 = 100$; elle souhaite se couvrir contre les fluctuations du marché et pour cela elle fait savoir qu elle est prête à payer un tiers un prix P 0 (dollars, euros...) une obligation conditionnelle d achat de l action dans un an à 105$. L obligation est conditionnelle dans le sens où celui qui à reçu les P 0 est forcé d acheter l action si la banque le souhaite mais il ne peut forcer la banque à vendre. Le contrat est nominatif dans le sens que le tiers s est engagé et qu il doit donc être localisable sur la période (0,T). On dit alors que la banque a émis une option put P sur S de strike K=105$ et de maturité T=1 an. Le premier problème est de déterminer une valeur raisonnable pour P 0? La banque peut ensuite vouloir vendre l actif à une date ultérieure mais comment établir un prix raisonnable pour ce put? Notez que ce put n a de sens que si l on possède aussi l actif (on dit le sous-jacent) sur lequel il est basé; cependant on peut toujours l acheter plus tard sur le marché, c est pourquoi cette option peut avoir une vie autonome indépendamment du sous-jacent (mais toujours avec le même tiers contractant). Modélisation: Si le marché est fluide, il est raisonnable de supposer que le prix P t de P à une date t > 0 est l espérance du profit que le propriétaire de S t et P t fera à la date T, escompté en t, soit P t = e r(t t) E(K S T ) + où f + (s) = max(f(s), 0) et E désigne l espérance au sens de la théorie des probabilités, c est à dire l intégrale R (K s)+ ρ(s)ds, lorsqu une densité de 5

probabilité ρ() existe pour S T. En effet si dans un an l option est cotée en bourse à S T, le profit à la vente est K S T si K > S T et zéro sinon. Or n$ au temps t vaudront ne r(t t) à la date T (exprimée en portion d année) car ils peuvent être placés au taux r. Lorsque dt est petit, on introduit la notation: ds t le problème s écrit: = (S t+dt S t); alors ds t = S t (rdt + σdw t ), S t=0 = S 0 donné P t = e r(t t) E(K S T ) + (1) C est le modèle de Black et Scholes. Programmation: Il suffit de faire générer par le programme N réalisations S n de S T et de faire P t = t) N 1 e r(t N n=0 (K S n ) + D où le programme suivant: #include <iostream> #include <cmath> #include <fstream> #include <cassert> using namespace std; const double two_pi =2*M_PI; double gauss(); double EDOstoch(double S0, int M, double sigma, double r ) { const double dt=1./m, sdt =sigma*sqrt(dt); double S= S0; for(int i=1;i<m;i++) S *= (1.+gauss()*sdt+r*dt); return S; 6

int main() { const double r=0.1, sig=0.2, K=140, S0=120, t=12; double option = 0; int T=365, N=50000; for(int I=0;I<N;I++){ double aux = K-EDOstoch(S0,365,sig,r); if(aux<0) aux=0; option +=aux/n; cout <<"L option apres "<<t<<" jours vaut " << option*exp(-r*(t-t)/365) <<endl; return 0; L exécution de ce programme produit Valeur de l option apres 12 jours 13.6185 2.1 L équation aux dérivées partielles de Black & Scholes On démontre 2 grâce au calcul de Itô que (1) est équivalent à où u(x, t) est la solution de P t = u(t t, S t ) u t σ2 x 2 2 u 2 x rx u 2 x + ru = 0 dans R+ (0, T ), u(x, 0) = (K x) + Remarque 2 Notez que cette EDP contient implicitement des conditions aux limites en 0 et +. En x = 0, l EDP donne t u+ru = 0, u(0, 0) = K, donc u(0, t) = Ke rt. Si on suppose que u est dans L 2 (R + ) alors lim x + u(x, t) = 0. Exercice 1 Montrer que l EDP peut aussi s écrire sous forme divergentielle u t x 2 u x (σ2 2 x ) βx u x + ru = 0 dans R+ (0, T ), u(x, 0) = (K x) + avec β = r σ 2 xσ σ x. 2 Paul Wilmott, Sam Howison, and Jeff Dewynne. The mathematics of financial derivatives. Cambridge University Press, Cambridge, 1995. A student introduction. 7

3 Option panier sur 2 sous-jacents Prenons maintenant l exemple d une banque qui pour minimiser encore les risques combine une action Renault avec une action Peugeot avec l idée que si l une baisse, l autre montera et que la somme des deux est plus stable que chacune séparée. Soient St 1, St 2 les prix de ces deux actions. On prend le modèle suivant dst 1 = St 1 (rdt + dwt 1 + dwt 2 ) dst 2 = St 2 (rdt + dwt 2 + dwt 1 ) (2) Comme précédemment Wt 1, Wt 2 sont deux processus gaussiens mais tels que E(dW 1 ) 2 = dtσ 2 1, E(dW 2 ) 2 = dtσ 2 2, E(dW 1 t dw 2 t ) = dtqσ 1 σ 2 Notez que si q = 0 on obtient le modèle précédent pour chacun des actifs et donc q mesure la corrélation entre les deux actifs. Un option put construite sur la somme S 1 + S 2 pour un strike K et une maturité T aura donc comme prix l espérance du bénéfice escompté, soit P t = e r(t t) E(K S 1 T S 2 T ) + Equation aux dérivées partielles : Dès qu une quantité déterministe dépend de la solution d une équation différentielle stochastique, le calcul de Itô s applique. Ici, il donne P t = u(t t, S 1 t, S 2 t ) où u est la solution de u t σ2 1x 2 2 u 2 x σ2 2y 2 2 u 2 2 y qσ 1σ 2 2 xy 2 u x y rx u u ry x y + ru = 0 u(x, 0) = (K x y) + (3) 4 Calcul d une courbe d option par Monte-Carlo #include <iostream> 8

#include <cmath> #include <fstream> using namespace std; const double two_pi =2*M_PI; class PriceMC{ public: double r,sigma,k,t,s0; // taux, vol, strike, matur,actif double t, u; // valeur de l option au temps t double gauss(); double EDOstoch(int M); double getputprice(int N, int M); PriceMC(double r1, double sigma1, double K1, double T1, double S01) : r(r1),sigma(sigma1), K(K1), T(T1), S0(S01){ ; // /////////////////////// implementation ///////////////// double PriceMC::gauss(){ double x= double(1.+random())/double(1.+rand_max); double y= double(1.+random())/double(1.+rand_max); return sqrt( -2 *log(x) )*cos(two_pi*y); double PriceMC::EDOstoch(int M){ const double dt=t/m, sdt =sigma*sqrt(dt); double S= S0; for(int i=1;i<m;i++) S *= (1+r*dt+gauss()*sdt); return S; double PriceMC::getPutPrice(int N, int M){ double option = 0; for(int n=0;n<n;n++){ double aux=k-edostoch(m); if(aux<0) aux=0; option += aux/n; return option*exp(-r*(t-t)); // //////////// end class PriceMC ////////////////////// int main(){ srandom(time(null)); PriceMC p(0.01,0.2,140,1,100); // r, sigma, K,T,S0 9

p.t = 0.; p.u = p.getputprice(5000,100);// nb trials, nb time steps cout <<"Valeur de l option apres "<<p.t<<" jours "<< p.u <<endl; // gnuplot pour S0->p.u: plot "option.dat" using 1:2 w l ofstream ff("option.dat"); for(p.s0=0; p.s0<250; p.s0+=10){ p.u =p.getputprice(50000,100); cout<<p.s0<<"\t"<<p.u<<endl; ff<<p.s0<<"\t"<<p.u<<endl; return 0; 140 "option.dat" using 1:2 120 100 80 60 40 20 0 0 50 100 150 200 250 Figure 2: Résultat du programme ci-dessus pour le calcul d un put. 10

5 Annexe: deux arguments pour justifier l EDP 5.1 Le cas déterministe Lorsque σ = 0 le problème n est pas stochastique et se réduit à ds t = S t rdt, S(t 0 ) = S 0, P 0 = e r(t t 0) (K S T ) + Ici c est volontairement que nous ne prenons pas t 0 = 0. La solution de ce problème est On en déduit que S t = e r(t t 0) S 0, P 0 = e r(t t 0) (K e r(t t 0) S 0 ) + P 0 = re r(t t0) (K e r(t t0) S 0 ) + + e r(t t0) 1 t (K e r(t t 0 ) S 0 ) +S 0re r(t t 0) 0 P 0 = e r(t t0) 1 S (K e r(t t 0 ) S 0 ) +er(t t 0) (4) 0 et donc que P 0 P 0 = rp t rs 0 t 0 S 0 qui est l EDP de Black-Scholes dans le cas σ = 0. 5.2 Le calcul de Itô Soit X t un processus verifiant dx t = µdt + σdw t et f(x t, t) à valeurs réelles fonction des statisitiques de X t et non pas des valeurs (réalisations de) X t, alors df = f f dt + t X µdt + 2 f σ 2 X 2 2 dt Autrement dit, il faut pousser le développement de Taylor justqu a l ordre 2 pour avoir tous les termes d ordre 1 a cause du fait que dw t est d ordre O( t). 11