L’arbre binomial
L’arbre est produit en travaillant de la date d’évaluation à la date d’expiration. À chaque étape, on présume que le sous-jacent va soit bouger vers le haut (up) ou le bas (down) d’un facteur spécifique (u ou d). Par définition nous obtenons u³1 et 0
Su= S×u ou Sd= S×d.
Les facteurs up et down sont calculés en utilisant la volatilité du sous-jacent, s, et la durée d’une branche de l’arbre, t, mesurée en année.
Dans le modèle de CRR, lorsque le sous-jacent subit une hausse, suivi d’une baisse (u,d), le prix sera le même que s’il avait d’abord connu la baisse et ensuite la hausse (d,u), les deux se fusionnent ou se combinent. Cette propriété réduit significativement le nombre de nœuds dans l’arbre et donc accélère le calcul du prix de l’option.
Calcul selon la méthode CRR
Nous avons au départ les informations suivantes pour calculer le put d’une option sans dividendes:
1. Le prix Spot (S): 91$
2. Le prix d’exercice (X) : 101$
3. Le taux sans risque (rf) : 6%
4. L’échéance (T) : 6 mois
5. La volatilité (sigma) : 30%
6. Le nombre d’essais (n) : 100
Voici maintenant le résultat obtenu

Nous avons programmé dans VBA une fonction qui nous permet d’utiliser la méthode CRR à son plein potentiel. Tout d’abord, à la première ligne l’on choisi le type d’option. L’on note p s’il s’agit d’un put (option de vente) et l’on note c s’il s’agit d’un call (option d’achat).
À la seconde ligne, l’on inscrit l’échéance de l’option. On note un e s’il s’agit d’une option de type européen et l’on note a s’il s’agit d’une option de type américaine.
Finalement, nous insérons chacune des données relatives à l’évaluation.
Pour trouver la valeur finale du put européen sans dividendes, l’on insère dans Excel à la cellule H12 cette formule :
La programmation dans VBA fut la suivante :
________________________________________________________________________
Function CRR_Put(CallPutFlag, S, X, T, rf, sigma, ExerciseType, n) As Double
S0 = S
If CallPutFlag = "c" Then
CallPutFlag = 1
Else
CallPutFlag = -1
End If
dt = T / n
u = Exp(sigma * dt ^ 0.5)
d = Exp(-sigma * dt ^ 0.5)
p1 = (u - Exp(rf * dt)) / (u - d)
p2 = 1 - p1
ReDim Smat(1 To n + 1, 1 To n + 1)
Smat(1, 1) = S0
For i = 1 To UBound(Smat, 1) - 1
Smat(1, i + 1) = Smat(1, i) * Exp(sigma * dt ^ 0.5)
For j = 2 To i + 1
Smat(j, i + 1) = Smat(j - 1, i) * Exp(-sigma * dt ^ 0.5)
Next j
Next i
ReDim Cmat(1 To n + 1, 1 To n + 1)
For i = 1 To n + 1
Cmat(i, n + 1) = Application.Max(CallPutFlag * (Smat(i, n + 1) - X), 0)
Next i
For i = UBound(Smat, 2) - 1 To 1 Step -1
For j = 1 To i
present_value = Exp(-rf * dt) * (p2 * Cmat(j, i + 1) + p1 * Cmat(j + 1, i + 1))
immediate_val = CallPutFlag * (Smat(j, i) - X)
If ExerciseType = "a" Then
Cmat(j, i) = Application.Max(present_value, immediate_val)
Else
Cmat(j, i) = Application.Max(present_value, 0)
End If
Next j
Next i
CRR_Put = Cmat(1, 1)
End Function
______________________________________________________________________________
L'argent fait tout l'argent passe - partout.
RépondreSupprimer