Lorsqu’en 1973 Fisher Black et Myron Scholes publièrent leur article dans le Journal of Political Economy, ils donnèrent enfin au monde financier les moyens d’exploiter à grande échelle un instrument quasi-confidentiel et illiquide, bien que millénaire, l’option sur sous-jacent.
Si, depuis, la finance stochastique a fait d’énormes progrès, reléguant la formule de 73 au rang d’amusement pour étudiants de mastère, le pouvoir explicatif du modèle initial, simple et didactique a été reconnu par l’attribution d’un prix Nobel en 1997.

Malgré les avancées mathématiques développées par les grandes institutions travaillant sur les options, de nombreux professionnels des marchés utilisent encore Black & Scholes pour évaluer des options financières, dans les cas où la précision importe moins que la rapidité de la prise de décision et la simplicité du modèle.
Par ailleurs, Black & Scholes ne requiert pas de moyens de calculs puissants, et peut-être programmée simplement sur Excel via un script en Visual Basic, que je vous propose ci-dessous.
Ces fonctions Excel subissent les mêmes hypothèses que la formule initiale de Black & Scholes : elles sont applicables à des options européennes, ne versant pas de dividendes sur la période, avec des taux d’intérêts constants pendant la durée de vie de l’option, et dont les rendements du sous-jacent suivent une loi normale.

Enfin, j’ai développé un pricer options rudimentaire, ne nécessitant ni ordinateur, ni calculatrice, mais simplement un papier et un crayon, le modèle PC30 : il est présenté sur une page dédiée.

 

 Premium

Prix de l’option
Différent pour un call et un put de mêmes caractéristiques

 

 Delta

Sensibilité de l’option à une variation de 1 point du prix du sous-jacent (notion de vitesse)
Différent pour un call et un put de mêmes caractéristiques

 

 Gamma

Sensibilité du delta à une variation de 1 point du prix du sous-jacent (notion d’accélération)
Identique pour un call et un put de mêmes caractéristiques

 

 Vega

Sensibilité de l’option à une variation de 1 point de la volatilité implicite du sous-jacent
Identique pour un call et un put de mêmes caractéristiques

 

 Thêta

Sensibilité de l’option au temps qui passe (donné pour un jour de perdu sur l’option)
Différent pour un call et un put de mêmes caractéristiques

 

 Rhô

Sensibilité de l’option à une variation de 1 point de taux d’intérêt
Différent pour un call et un put de mêmes caractéristiques (non représenté sur cette page)

Premium - Callð télécharger la feuille Excel

 

 

 

'
' Call Black & Scholes
' par Anthony Penel
' http://www.penel.org
'
Function cbs(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))
d2 = d1 - Volat * Sqr(NbreJours / 365)

nd1 = WorksheetFunction.NormSDist(d1)
nd2 = WorksheetFunction.NormSDist(d2)

cbs = (Cours * nd1) - (Strike * Exp(-Taux * NbreJours / 365) * nd2)

End Function

 

 

 

 

Premium - Put

 

 

 

'
' put Black & Scholes
' par Anthony Penel
' http://www.penel.org
'
Function pbs(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))
d2 = d1 - Volat * Sqr(NbreJours / 365)

nd1 = 1 - WorksheetFunction.NormSDist(d1)
nd2 = 1 - WorksheetFunction.NormSDist(d2)

pbs = (Strike * Exp(-Taux * NbreJours / 365) * nd2) - (Cours * nd1)

End Function

 

 

 

 

Delta - Call

 

 

 

'
' delta call
' par Anthony Penel
' http://www.penel.org
'
Function deltac(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))

deltac = WorksheetFunction.NormSDist(d1)

End Function

 

 

 

 

Delta - Put

 

 

 

'
' delta put
' par Anthony Penel
' http://www.penel.org
'
Function deltap(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))

deltap = -(1 - WorksheetFunction.NormSDist(d1))

End Function

 

 

 

 

Gamma - Call & Put

 

 

 

'
' gamma (call & put)
' par Anthony Penel
' http://www.penel.org
'
Function gamma(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))

fd1 = Exp((-d1 ^ 2) / 2) / Sqr(2 * Application.Pi())

gamma = fd1 / (Cours * Volat * Sqr(NbreJours / 365))

End Function

 

 

 

 

Vega - Call & Put

 

 

 

'
' vega (call & put)
' par Anthony Penel
' http://www.penel.org
'
Function vega(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))

fd1 = Exp((-d1 ^ 2) / 2) / Sqr(2 * Application.Pi())

vega = fd1 * Cours * Sqr(NbreJours / 365) / 100

End Function

 

 

 

 

Thêta - Call

 

 

 

'
' theta call (par jour, base 365)
' par Anthony Penel
' http://www.penel.org
'
Function thetac(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))
d2 = d1 - Volat * Sqr(NbreJours / 365)

fd1 = Exp((-d1 ^ 2) / 2) / Sqr(2 * Application.Pi())
fd2 = Exp((-d2 ^ 2) / 2) / Sqr(2 * Application.Pi())
  
nd1 = WorksheetFunction.NormSDist(d1)
nd2 = 1 - WorksheetFunction.NormSDist(d2)

thetac = (-(((Cours * Volat) / (2 * Sqr(NbreJours / 365)) * fd1)) - Strike * (Exp(-Taux * NbreJours / 365)) * Taux * nd2) / 365

End Function

 

 

 

 

Thêta - Put

 

 

 

'
' theta put (par jour, base 365)
' par Anthony Penel
' http://www.penel.org
'
Function thetap(Cours, Strike, Taux, NbreJours, Volat)

d1 = ((Application.Ln(Cours / (Strike * Exp(-Taux * NbreJours / 365)))) / (Volat * Sqr(NbreJours / 365))) + (0.5 * Volat * Sqr(NbreJours / 365))
d2 = d1 - Volat * Sqr(NbreJours / 365)

fd1 = Exp((-d1 ^ 2) / 2) / Sqr(2 * Application.Pi())
fd2 = Exp((-d2 ^ 2) / 2) / Sqr(2 * Application.Pi())

nd1 = 1 - WorksheetFunction.NormSDist(d1)
nd2 = 1 - WorksheetFunction.NormSDist(d2)

thetap = (-(((Cours * Volat) / (2 * Sqr(NbreJours / 365)) * fd1)) - Strike * (Exp(-Taux * NbreJours / 365)) * Taux * (nd2 - 1)) / 365

End Function

 

 

 

 



 

 

Anthony Penel
©2009