1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| Public Function PricingArbreBinomial(NbreDePas As Integer) As Double
ReDim PrixCall(NbreDePas) As Double
Dim hausse As Double
Dim baisse As Double
Dim ProbaRN As Double
Dim St As Double
Dim S0 As Double
Dim r As Double
Dim T As Double
Dim K As Double
Dim Barriere As Double
Dim d As Double
Dim vol As Double
S0 = Sheets("Pricing").Range("D5").Value
r = Sheets("Pricing").Range("D6").Value
T = Sheets("Pricing").Range("D7").Value
K = Sheets("Pricing").Range("D8").Value
Barriere = Sheets("Pricing").Range("D9").Value
d = Sheets("Pricing").Range("D10").Value
vol = Sheets("Pricing").Range("D11").Value
NbreDePas = Sheets("Pricing").Range("E20").Value
hausse = Exp((r - d) * T / NbreDePas + vol * Sqr(T / NbreDePas))
baisse = Exp((r - d) * T / NbreDePas - vol * Sqr(T / NbreDePas))
ProbaRN = (Exp((r - d) * T / NbreDePas) - baisse) / (hausse - baisse)
For i = 0 To NbreDePas
St = S0 * hausse ^ (NbreDePas - i) * baisse ^ i
If (St >= Barriere) Then
If St > K Then
PrixCall(i) = St - K ----> l'erreur est sur cette ligne
Else
PrixCall(i) = 0
End If
Else
PrixCall(i) = 0
End If
Next i
For j = 0 To NbreDePas - 1 'calcul des valeurs intermédiaires du spot (remplissage par ligne)
For i = 1 To NbreDePas - j
St = S0 * hausse ^ (NbreDePas - j - i) * baisse ^ j
If St > Barriere Then
PrixCall(i) = (ProbaRN * PrixCall(i) + (1 - ProbaRN) * PrixCall(i + 1)) / Exp(r * T / NbreDePas)
Else
PrixCall(i) = 0
End If
Next i
Next j
PricingArbreBinomial = PrixCall(0)
End Function |
Partager