logo strategies-options Accès Site
 
panier
"Gérer, c'est prévoir"
Le site consacré aux stratégies de trading incorporant des produits dérivés, en particulier des options.
Accueil  >  Modèles d'évaluation d'options  >  Option Pricing - Modele trinomial en Python 

Option Pricing - Modele trinomial en Python

Publié le 10 Juillet 2019 par Duchêne
icone rss


La programmation du modèle trinomial en Python est très facile

Python est devenu en quelques années le langage de programmation indispensable à la finance de marché.
Ces liens avec Excel par exemple en ont fait un outil incontournable pour les personnes qui utilisent des tableurs pour valoriser des produits dérivés comme les options.


Comme nous l'avions vu précédemment, l'utilisation du modèle trinomial (et plus généralement de modèle type "différences finies") est naturelle pour qui aura besoin d'évaluer des options de type européen, à l'instar de Black & Scholes, mais aussi de type américain, exerçable à tout moment.

Vraiment très facile de programmer en Python le modèle trinomial.




import math

def Trinomialgeneral(S0, K, r, sigma, q, T,isus,iscall):

dt = 1/10000
N = round(T/dt)
M = round(5*(N**.5))
mu = r-q-.5*sigma*sigma


smax = 2*abs(mu)*(dt**.5)
smax = max(sigma * (2**.5), smax)
if smax == 0:
return -9999

C = [None] * (2*M)
pC = [None] * (2*M)
S = [None] * (2*M)

p = 0.5 * sigma * sigma / (smax * smax)
pu = p + 0.5 * mu * (dt**.5) / smax
pm = 1 - 2*p
pd = p - 0.5 * mu * (dt**.5) / smax

D = 1/(1+r*dt)
E = math.exp(smax * (dt**.5))
S[0] = S0 * math.exp(-M * smax * dt**.5)
for i in range(1, 2*M):
S[i] = S[i-1]*E


for j in range(2*M):
C[j] = max(iscall*(S[j] - K), 0)


for t in range(N):
for j in range(1, 2*M-1):
pC[j] = pu * C[j+1] + pm * C[j] + pd * C[j-1]
pC[j] = pC[j] * D


for i in range(1,2*M-1):
C[i] = max(isus*(iscall*(S[i]-K)), pC[i])

return C[M]



Par exemple, pour un sous-jacent S =100, un prix d'exercice K = 100, un taux d'intérêt (continûment composé) r = 5%, une volatilité sigma = 30%, un taux de dividende q = 0%, une maturité T = 1 an, une option de type Américain isus = 1 et une option de type put iscall = -1, on obtient :
V=Trinomialgeneral(100, 100, 0.05, 0.3, 0.0, 1,1,-1)
print(V)

le résultat est 9.869963659320902


Pour un sous-jacent S =100, un prix d'exercice K = 100, un taux d'intérêt (continûment composé) r = 5%, une volatilité sigma = 30%, un taux de dividende q = 0%, une maturité T = 1 an, une option de type Européen isus = 0 et une option de type CALL iscall = 1, on obtient :
V=Trinomialgeneral(100, 100, 0.05, 0.3, 0.0, 1,0,1)
print(V)

le résultat est 14.23110652674761




NB : dans l'exemple ci-dessus, on a pris 10000 périodes (dt = 1 / 10000 ), on peut bien sûr prendre moins de périodes et de ce fait accélérer les calculs au prix d'une moins grande précision.

A vous de jouer :-)).

La suite : Option Pricing - Black Scholes En Python
Précédent : Le Modèle Trinomial : VBA Code

Duchêne
D'autres Fiches
CAC 40 : risk-reversal delta-hedge suivi 4
- Les Stratégies Options sur Actions et Indices -
CAC 40 : risk-reversal delta-hedge suivi 4
+1 % cette semaine pour le CAC 40, notre risk reversal delta hedgé en profite un peu...
CAC 40 : risk-reversal delta-hedge suivi 6
- Les Stratégies Options sur Actions et Indices -
CAC 40 : risk-reversal delta-hedge suivi 6
Il fallait bien que ça arrive : on est positif sur notre risk reversal delta hedgé sur le CAC40 !
Strategies Options CAC 40 - Static Hedge - Suivi 1
- Mes Achats -
Strategies Options CAC 40 - Static Hedge - Suivi 1
Un premier point qui commence bien.
Ratio backspread sur le CAC 40 (suivi 7)
- Les Stratégies Options sur Actions et Indices -
Ratio backspread sur le CAC 40 (suivi 7)
Baisse marquée sur le CAC 40, et pourtant la volatilité continue à baisser sur notre Ratio backspread.
Option Pricing - Black Scholes en Python
- Modèles d'évaluation d'options -
Option Pricing - Black Scholes en Python
La programmation du modèle Black Scholes en Python
Strategies Options CAC 40 - Static Hedge - Suivi 1
- Livres en Anglais -
Strategies Options CAC 40 - Static Hedge - Suivi 1
Un premier point qui commence bien.