Function calloption(S, u, d, r, K, t, n) ' ' Macro1 Macro ' u = (u - 1) / (n * t) + 1 d = (d - 1) / (n * t) + 1 r = (r - 1) / (n * t) + 1 p = (r - d) / (u - d) num = t * n C = 0 For i = 0 To num C = C + Kumiawase(num, i) * p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(S * u ^ (num - i) * d ^ i - K, 0) Next i calloption = C / r ^ num ' End Function Function putoption(S, u, d, r, K, t, n) ' ' Macro1 Macro ' u = (u - 1) / (n * t) + 1 d = (d - 1) / (n * t) + 1 r = (r - 1) / (n * t) + 1 p = (r - d) / (u - d) num = Application.WorksheetFunction.Round(t * n, 0) Pop = 0 For i = 0 To num Pop = Pop + Kumiawase(num, i) * p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(K - S * u ^ (num - i) * d ^ i, 0) Next i 'putoption = p ^ (num - i) * (1 - p) ^ i * Application.WorksheetFunction.Max(K - S * u ^ (num - i) * d ^ i, 0) putoption = d ' End Function Function Kumiawase(n, i) Kumiawase = 1 If i > 0 Then Kumiawase = (n - i + 1) / i * Kumiawase(n, i - 1) End If End Function Function PCP(S, C, K, r, t) PCP = C - S + K * Exp(-r * t) End Function |