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
| Option Explicit
Private ro#
Private k#
Private teta#
Private sigma#
Private Sub Main()
Dim Tp#, t1#, t2#, t3#, t4#
Dim k1#, k2#, k3#, k4#
Dim v1#, v2#, v3#, v4#
ro = 0.025: teta = 0.052: k = 0.181: sigma = 0.017
Tp = 1: t1 = 0.5: t2 = 1: t3 = 1.5: t4 = 2
k1 = P(0, Tp + t1) / P(0, Tp)
k2 = P(0, Tp + t2) / P(0, Tp)
k3 = P(0, Tp + t3) / P(0, Tp)
k4 = P(0, Tp + t4) / P(0, Tp)
Debug.Print (k1 & " " & k2 & " " & k3 & " " & k4)
v1 = V(0, Tp, Tp + t1, k1)
v2 = V(0, Tp, Tp + t2, k2)
v3 = V(0, Tp, Tp + t3, k3)
v4 = V(0, Tp, Tp + t4, k4)
Debug.Print (v1 & " " & v2 & " " & v3 & " " & v4)
End Sub
Private Function b(ByVal u#, ByVal k#) As Double
b = 1 / k * (1 - Exp(-k * u))
End Function
Private Function rt(ByVal t#) As Double
rt = ro * Exp(-k * t) + _
k * teta * b(t, k) + _
sigma * b(t, 2 * k) ^ (1 / 2) * Application.WorksheetFunction.NormSDist(t)
End Function
Private Function P(ByVal t#, ByVal J#) As Double
P = Exp( _
-b(J - t, k) * rt(t) - _
sigma ^ 2 / (4 * k) * b(J - t, k) ^ 2 + _
(teta - sigma ^ 2 / (2 * k ^ 2)) * (b(J - t, k) - (J - t)) _
)
End Function
Private Function o(ByVal t#, ByVal Tp#, ByVal Jz#) As Double
o = sigma * b(Tp - t, 2 * k) ^ (1 / 2) * b(Jz - Tp, k)
End Function
Private Function h(ByVal t#, ByVal Tp#, ByVal Jz#, ByVal W#) As Double
h = 1 / o(t, Tp, Jz) * (Log(P(t, Jz) / (W * P(t, Tp))) + _
1 / 2 * o(t, Tp, Jz) ^ 2)
End Function
Private Function V(ByVal t#, ByVal Tp#, ByVal Jz#, ByVal W#) As Double
V = W * P(t, Tp) * Application.WorksheetFunction.NormSDist(o(t, Tp, Jz) - h(t, Tp, Jz, W)) - _
P(t, Jz) * Application.WorksheetFunction.NormSDist(h(t, Tp, Jz, W))
End Function |
Partager