Option Base 0 'arrays number from 0
Function BinOptVal(iopt, S, X, r, q, tyr, sigma, nstep) 'code for European Options CRR
'returns binomial option value,European only where iopt=1 for call,-1 for put
Dim u, d, p, pstar
Dim i As Integer, j As Integer
Dim vvec As Variant
ReDim vvec(nstep) 'known size of vector
'calculate parameters
u=Exp(sigma*Sqr(tyr/nstep))
d=1/u
p=Exp(r-q)*Sqr(tyr/nstep)-d/(u-d)
pstar=1-p
'calculating vector of of option values after nstep
For i = 0 To nstep
vvec(i) = Application.Max(iopt * (S *( u ^ i) * (d ^ (nstep - i)) - X), 0)
Next i
'claculating conditional payoff & discounting back step-by-step
For j = nstep - 1 To 0
For i = 0 To j
vvec(i) = (p * vvec(i + 1) + pstar * vvec(i)) / erdt
Next i
Next j
BinOptVal = vvec(0)
End Function