您的位置:首页 > 编程语言 > Python开发

binomial tree in python

2015-05-06 15:06 405 查看
import numpy as np

def binomial(strike, optype, extype):
# optype 'C' = call, 'P' = put
# extype 'E' = european, 'A' = american

# set model paramters
S0 = 100    # initial stock level
T = 1.0     # time to maturity
r = 0.05    # risk free rate
vol = 0.20  # volatility

M = 1000    # time stpes
dt = T/M    # length of time interval

df = np.exp(-r*dt)
u = np.exp(vol*np.sqrt(dt))
d = 1/u
q = (np.exp(r*dt) - d) / (u - d)

# generate tree
S = np.zeros((M+1,M+1), dtype=np.float64)
S[0,0] = S0
for j in xrange(1, M+1, 1):
for i in xrange(j+1):
S[i,j] = S[0,0]*u**(j-2*i)

# calculte intrinsic value
iv = np.zeros((M+1,M+1), dtype=np.float64)
for j in xrange(M+1):
for i in xrange(j+1):
if optype=='C':
iv[i,j] = max(S[i,j]-strike, 0)
else:
iv[i,j] = max(strike-S[i,j], 0)

# valuation
pv = np.zeros((M+1,M+1), dtype=np.float64)
pv[:,M] = iv[:,M]
for j in xrange(M-1, -1, -1):
for i in xrange(j+1):
pv[i,j] = (q*pv[i,j+1]+(1-q)*pv[i+1,j+1])*df
if extype=='E':
pv[i,j] = pv[i,j]
else:
pv[i,j] = max(pv[i,j], iv[i,j])

return pv[0,0]

print binomial(100, optype='P', extype='E')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: