Since almost all exchange listed stock options are American options, we show the following program to estimate an implied volatility based on an American call option:
from math import exp,sqrt def binomialCallAmerican(s,x,T,r,sigma,n=100): deltaT = T /n u = exp(sigma * sqrt(deltaT)) d = 1.0 / u a = exp(r * deltaT) p = (a - d) / (u - d) v = [[0.0 for j in xrange(i + 1)] for i in xrange(n + 1)] for j in xrange(i+1): v[n][j] = max(s * u**j * d**(n - j) - x, 0.0) for i in xrange(n-1, -1, -1): for j in xrange(i + 1): v1=exp(-r*deltaT)*(p*v[i+1][j+1]+(1.0-p)*v[i+1][j]) v2=max(s-x,0) v[i][j]=max(v1,v2) return v[0][0]
The previous Python program is used to estimate an American call option based on the binomial-tree method, or CRR method. Based on the input values, we first calculate u
, d
, and p
, where u
represents the up movement, d
represents the down movement...