Académique Documents
Professionnel Documents
Culture Documents
Resolution Black Schole Par Difference Finie
Resolution Black Schole Par Difference Finie
net/publication/339181258
CITATIONS READS
0 3,589
1 author:
Ali Sidibe
Université de Paris 1 Panthéon-Sorbonne
3 PUBLICATIONS 0 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Ali Sidibe on 11 February 2020.
Implémentation de l’équation de
Black-Scholes en Python par la
méthode de différence finie
1
SIDIBE Ali Broma
bromasidibe@gmail.com
Juillet, 2019
1
Intervenant Extérieur, Université Panthéon Sorbonne, Paris
Contents
List of Figures 1
1 Introduction 2
3 Discrétisation 8
3.1 Equation différentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 Condition aux bords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4 Implémentation en Python 10
4.1 Schéma explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.1 Equation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1.2 Stabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
References 14
List of Figures
1 Différent types de schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Les propriétés d’un schéma numérique . . . . . . . . . . . . . . . . . . . . 5
3 Stabilité d’un schéma numérique . . . . . . . . . . . . . . . . . . . . . . . . 7
4 Discrétisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Surface de prix d’option call . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1
1 Introduction
D’une manière générale, la résolution analytique fournit traditionnellement une solution
exacte aux modèles mathématiques. Souvent certains modèles dûs à leur complexité
peuvent ne pas avoir des solutions analytiques. Aussi la précision peut ne pas être un
critère fondamentale dans certains cas. Il s’avère alors utile de procéder par une solu-
tion approchées du problème d’où l’intérêt des méthodes numériques. Les méthodes des
différences finies sont un moyen d’obtenir des solutions numériques. C’est une technique
courante de recherche de solutions approchées d’équations aux dérivées partielles qui con-
siste à résoudre un système de relations (schéma numérique) liant les valeurs des fonctions
inconnues en certains points suffisamment proches les uns des autres.
Dans ce présent travail, nous allons appliquer la méthode numérique pour l’équation dif-
férentielle vérifiée par le prix d’une option en finance, communément appelé l’équation
de Black-Scholes. La formule de Black-Scholes lie le prix d’une option à ses caractéris-
tique par une équation différentielle partielle non linéaire. Elle s’est imposée comme une
référence en termes de valorisation des options.
L’intérêt de ce présent travail est de résoudre cette équation différentielle par la méthode
des différences finies (bien que la solution analytique existe) et l’implémenter en python.
Pour cela, nous commencerons par présenter la méthode des différences finies dans un
premier temps. Ensuite dans la deuxième partie, nous discrétiserons l’équation de black-
scholes à l’aide des différentes schéma et pour finir l’implémentation en python en troisième
partie.
Nous allons appliquer la formule de Taylor pour donner une approximation des dérivés
d’une fonction en un point x0 . En mathématiques, plus précisément en analyse, le
théorème de Taylor (ou formule de Taylor), du nom du mathématicien anglais Brook
Taylor montre qu’une fonction suffisamment dérivable au voisinage d’un point peut être
approchée par une fonction polynomiale dont les coefficients dépendent uniquement des
dérivées de la fonction en ce point.
h2 00
f (x0 + h) = f (x0 ) + hf 0 (x0 ) + f .... + hn (h)
2!
n (2.1.1)
X hi
= f (i) (x0 ) + hn (h)
i=0
i!
f (x0 + h) − f (x0 )
f 0 (x0 ) = + (h) (2.1.2)
h
∂f ∂ 2 f
∂f
= F f, t, x, ,
∂t ∂x ∂x2
Nous souhaitons évaluer les valeurs au points (tn , xj ) avec le pas spatiale δx et δt le pas
en temps. On note fn,j = f (nδt, jδx)
Le schéma explicite est la plus facile et la plus rapide des types de méthodes de différences
finie. Elle calcule le prix des options pour chaque instant t à partir des pas instants
précédents. Dans la méthode d’Euler explicite, la valeur approchée à l’instant tn+1 est
obtenue à partir de la précédente c’est à dire l’instant tn déjà connu.
∂f ∂ 2 f
fn+1,j − fn,j n
= Fj f, t, x, ,
δt ∂x ∂x2
∂f ∂ 2 f
fn+1,j − fn,j n+1
= Fj f, t, x, ,
δt ∂x ∂x2
∂f ∂ 2 f ∂f ∂ 2 f
fn+1,j − fn,j 1 n+1 n
= F f, t, x, , + Fi f, t, x, ,
δt 2 i ∂x ∂x2 ∂x ∂x2
La méthode est considérée comme implicite, car elle nécessite la résolution d’équations
algébriques (correspondant au second membre de la méthode d’Euler régressive). Elle
est inconditionnellement stable, mais nécessite certaines conditions de régularité sur les
équations à résoudre pour que le résultat ait une précision satisfaisante.
2.3 Propriétés
Un certain nombre de notion est nécessaire lors de la résolution d’équations aux dérivées
partielles (EDP) au moyen des méthodes de différences finies. Les trois principales sont
la convergence, la stabilité et la consistance. Ces trois propriétés permettent de relier la
solution exacte des équations continues à la solution exacte des équations discrétisées et à
la solution numérique. Le respect de ces propriétés est nécessaire pour la crédibilité d’un
schéma numérique.
2.3.1 Consistance
C’est la propriété qui assure que la solution exacte des équations discrétisées tende vers
la solution exacte des équations continues lorsque les pas discrétisations tendent vers
zéro.
Autrement dit, si on remplace la discrétisation par la solution exacte, alors l’erreur temps
vers 0.
2.3.2 Convergence
La convergence d’un schéma aux différences finies est une propriété naturelle qui assure
que, pour des valeurs suffisamment petites des pas de discretisation, la solution numérique
calculée sera proche de la solution exacte du problème de départ. C’est la propriété qui
assure que la solution numérique tende vers la (ou une) solution exacte des équations
continues.
Definition 2. Soit A(t, x) = 0 une équation différentielle et F (unj ) = 0 un schéma dis-
crétisant l’équation A(t, x) = 0 est dit consistant si
lim F (u(tj , xn ) = 0
dx→0,dt→0
2.3.3 Stabilité
D’une façon plus général, un problème est dit stable, très sensible ou mal conditionné
si une petite variation des données ou des paramètres entraîne une grande variation des
résultats. Pour un schéma numérique, c’est la propriété qui assure que la différence
entre la solution numérique obtenue et la solution exacte des équations discrétisées est
bornée.
Definition 3. On considère la norme discrète suivante
N
! 21
X
kun k2 = ∆x|unj |2 (2.3.1)
j=1
Un schéma est dit stable par rapport à cette norme, s’il existe une constante K > 0
indépendante des pas discretisation tel que pour tout n entier positif.
kun k < K
u0
Le choix d’un schéma numérique pour la résolution d’une équation différentielle doit
idéalement tenir compte de notamment d’une part le respect des propriétés précédentes
d’autres part sur les contraintes techniques (puissances de la machine) et de la complexité
de son implémentation informatique. Le schéma centré bien qu’apparaît comme un juste
milieu entre le schéma explicite et implicite est totalement instable, par cette raison, nous
l’ignorons totalement.
Le schéma explicite est très facile à implémenter de manière informatique mais sa stabilité
impose des choix sur les pas de discretisation. Nous pouvons respecter ces choix et se
lancer tenter.
Le dernier schéma est le schéma implicite, bien que difficile à implémenter il est incondi-
tionnellement stable.
Notre choix sur le schéma implicite se justifie par le fait que nous aimerons avoir une plus
grande liberté sur le choix de nos pas de discretisation.
Soit une option de maturité T , de prix d’exercice K, du taux sans risque r, de volatilité σ
et du sous-jacent St , alors d’après l’équation de Black-Scholes, le prix f d’une telle option
vérifie l’équation différentielle suivantes
∂f (t, St ) 1 2 2 ∂ 2 f (t, St )
∂f (t, St )
+ rS + S σ = rf (t, St )
∂t ∂S 2 ∂S 2 (3.1.1)
f (T, ST ) = max(ST − K)
3.2 Methode
Figure 4: Discrétisation
La maturité T est connue, elle est la limite de notre discretisation, nous divisons l’intervalle
T
[0, T ] en N pas constant δt = N . L’intervalle discrétisé est alors de la forme suivante:
[t0 = 0, t0 + δt, t0 + 2δt. . . , t0 + nδt. . . N δt = T ]
[t0 = 0, t1 , t2 . . . , tn . . . tN = T ]
xj = jδx
tn = nδt
fn,j = f (tn , xj )
Une équation différentielle sans conditions de bord peut avoir une ou plusieurs solutions ou
sans solution d’où la nécessité de spécifier les conditions de bord pour notre équation. Les
payoffs des options call et put à la maturité sont données respectivement par max(ST −
K, 0) et max(K − ST , 0).
Lorsque t = T (autrement dit à la maturité), on à n = N ,
Lorsque S = 0, on a fn,j = 0
4.1.1 Equation
La plupart des équations différentielles possèdes des conditions initiales. Les étapes suiv-
antes sont alors déterminée par une approximations en discrétisant le temps par une
approche "forward." Dans le cadre des options, c’est la valeur terminale qui est connue
c’est pour cela nous utilisons le backward pour le time.
Pour le schéma explicite, nous ferons le schéma centré sur le sous-jacent du premier ordre
et symétrique sur le second ordre. Pour des raisons de stabilités,
Pour la dérivée première par rapport au temps au point tn on applique Taylor à tn − δt
on aura alors
Il faut noter ici que pour une option, nous connaissons la valeur terminale, notre objectif
est de déterminer la valeur à l’instant zéro.
Pour la dérivée première par rapport au sous-jacent au point xj , nous utilisons une ap-
proximation centrée. Ce qui se justifie par le fait que l’option peut augmenter à Sj+1 ou
descendre à Sj−1 on a
∂f f (tn , xj + δx) − f (tn , xj − δx) fn,j+1 − fn,j−1
(tn , xj ) = == (4.1.2)
∂x 2δx 2δx
Pour la dérivée seconde par rapport au sous-jacent au point xj on a
En remplaçant les termes (4.1.2), (4.1.3) et (4.1.1) par leur valeurs dans l’équation 3.1.1,
nous aurons
fn,j − fn−1,j fn,j+1 − fn,j−1 1 2 2 fn,j+1 − 2fn,j + fn,j−1
+ rxj + xj σ − rfn,j = 0
δt 2δx 2 (δx)2
Sachant que xj = jδx, on peut ramener cette équation numérique sous la forme suiv-
ante
1 1
aj = j 2 σ 2 δt + jδt
2 2
1 1
bj = j 2 σ 2 δt − jδt
2 2
2 2
cj = 1 − j σ δt − rδt
Les valeurs aj ,bj et cj sont des valeurs de probabilité de transitions.On remarque qu’ils
sont positives et leur somme est égale à 1. Par construction.
En posant
fn−1,1 b 1 a1 0 0 ··· 0
f
n−1,2
c b a
2 2 2 0 ··· 0
..
.
0 c
3 b3 a3 ··· 0
Fn = A =
.
.. 0 0 .. .. ..
f
n−1,j
. . .
.. . .
. . ... ...
. . . 0 aM −2
fn−1,M −1 0 0 ··· 0 cM −1 bM −1
on a
Fn−1 = AFn
Nous connaissons la valeur terminale par fN,j = max(K − jδx, 0), par cette suite, nous
pouvons nous ramener facilement la valeur à l’instant t = 0
4.1.2 Stabilité
On peut aussi démontrer que pour que le schéma explicite devient stable il faut que
δt 1
2
<
(δs) ρ
1 import math
2 import numpy as np
3 from matplotlib import cm
4 from matplotlib import pyplot as plt
5 import matplotlib
6 from mpl_toolkits.mplot3d import Axes3D
7 import numpy as np
8 from matplotlib import cm
9 from matplotlib import pyplot as plt
10 class FiniteEngine:
11
12 def __init__(self):
13 self.strike = 0.5
14 self.maturity = 1.0
15 self.risk_free_rate = 0.05
16 self.volatility = 0.2
17 self.stockMax = 1
18 self.Ms = 20
19 self.Nt = 20
20 self.dt = self.stockMax/(float(self.Ms))
21 self.dx = self.maturity/(float(self.Nt))
22
23 def compute_explicite(self):
24 previous = np.zeros(self.Ms)
25 xvalues = np.zeros(self.Ms)
26 for x in range(self.Ms):
27 xvalues[x] =x*self.dx
28 previous[x] = max(xvalues[x]- self.strike,0)
29 result = np.zeros(self.Ms)
30 output1 = list()
31 output2 = list()
32 output3 = list()
33
34 prev_t = 0
35 for ti in range(self.Nt):
36 cur_t = prev_t + self.dt
37 result[0] = 0
38 result[self.Ms - 1] = (xvalues[self.Ms - 1] - self.strike) *
,→ math.exp(-self.risk_free_rate * self.dt * (self.maturity - prev_t))
39 for xi in range(1, self.Ms - 1, 1):
40 result[xi] = self.coef_a(xi) * previous[xi + 1] + self.coef_b(xi) *
,→ previous[xi] + self.coef_c(xi) * previous[xi - 1]
41 for xi in range(self.Ms):
42 output1.append(xvalues[xi])
43 output2.append(prev_t)
44 output3.append(result[xi])
48 self.plot_option(xvalues,result)
49 self.plot_surface(output1,output2,output3)
50
51 def plot_option(self,x_values,c_values):
52 fig, ax = plt.subplots()
53 ax.plot(x_values,c_values)
54 ax.set_xlabel('Stock')
55 ax.set_ylabel('Option')
56 ax.set_title('Finite Model price')
57 plt.show()
58
References
[1] Robert A. Jarrow and Dilip B. Madan. “Is Mean-Variance Analysis Vacuous: Or was
Beta Still Born?” In: Review of Finance 1 (Apr. 1997), pp. 15–30. doi: 10.1023/A:
1009779113922.
[2] Phelim Boyle. “Options: A Monte Carlo approach”. In: Journal of Financial Eco-
nomics 4 (1977), pp. 323–338. doi: 10.1016/0304-405X(77)90005-8.
[3] Phelim Boyle, Mark Broadie, and Paul Glasserman. “Monte Carlo methods for se-
curity pricing”. In: Journal of Economic Dynamics and Control 21 (1977), pp. 1267–
1321. doi: 10.1016/S0165-1889(97)00028-6.
[4] Axel Buchner. “Equilibrium option pricing: A Monte Carlo approach”. In: Finance
Research Letters 15 (June 2015), pp. 138–145. doi: 10.1016/j.frl.2015.09.004.
[5] P. Glasserman. Monte Carlo methods in financial engineering. Springer Science and
Business Media, 2004. isbn: 978-0-387-21617-1.
[6] Steven Heston. “A Closed-Form Solution for Options with Stochastic Volatility with
Applications to Bond and Currency Options”. In: The Review of Financial Studies
21 (Apr. 2015), pp. 327–343. doi: 10.1093/rfs/6.2.327.
[7] Sven Husmann and Neda Todorova. “CAPM option pricing”. In: Finance Research
Letters 8 (Dec. 2011), pp. 213–219. doi: 10.1016/j.frl.2011.03.001.