February 7th, 2006, 9:36 pm
here is one way to do it in VBAPublic Function EuropeanBinomialPlainVanilla(CallPutFlag As String, S As Double, X As Double, T As Double, r As Double, b As Double, v As Double, n As Long) As Double Dim u As Double, d As Double, p As Double Dim Sum As Double, dt As Double, A As Double Dim j As Long dt = T / n u = Exp(v * Sqr(dt)) d = 1 / u p = (Exp(b * dt) - d) / (u - d) A = Int(Log(X / (S * d ^ n)) / Log(u / d)) + 1 Sum = 0 If CallPutFlag = "c" Then For j = A To n Sum = Sum + Application.Combin(n, j) * p ^ j * (1 - p) ^ (n - j) * (S * u ^ j * d ^ (n - j) - X) Next ElseIf CallPutFlag = "p" Then For j = 0 To A - 1 Sum = Sum + Application.Combin(n, j) * p ^ j * (1 - p) ^ (n - j) * (X - S * u ^ j * d ^ (n - j)) Next End If EuropeanBinomialPlainVanilla = Exp(-r * T) * SumEnd Function