美式期权二叉树算法

我国的期货期权均为美式期权,对美式期权的定价采用美式期权二叉树方法。下面对美式期权二叉树方法做一简介:

  • 输入量: 步数step、离到期时间t、标的价格S、执行价K、利率μ、波动率σ
  • 计算过程:
    Step1 : 计算步长∆t=t/step ,计算上涨概率 u= e^σ∆t , 计算下跌概率 u= e^(-σ∆t)。
    Step2 : 计算风险中性概率 p=(e^(-r∆t)-d)/(u-d),如果标的是期货,则风险中性概率修改为p=(1-d)/(u-d) 。
    Step3 : 从左至右形成标的价格树,节点0的价格为S, 则假设至当前步v,标的价格共上升i 步,下降j步, 则步v标的价格 S_(i,j)=S_0ui*dj , 其中 i+j=v 。
    Step4: 从右至左形成期权价格树,从最后一步的价格开始,同一步相邻节点(例如S_(i,j+1)和S_(i+1,j))的价格可推导出两相邻节点父节点S_(i,j)期权贴现价格为 〖DV〗(i,j)=(C(i,j+1)
    (1-p)+C_(i+1,j)*p)*e^(-r∆t) ,最外层的贴现价值为零。 该节点看涨的行权价值为 E_(i,j)=max⁡(S_(i,j+1)-K,0) ,看跌期权的行权价值为E_(i,j)=max⁡(〖K-S〗(i,j+1),0) , 该节点的期权价值为 C(i,j) =max(〖DV〗(i,j), E(i,j) ) 。当步骤进行到根节点时,即为期权价格。
    可以参考对应的python 代如下:
def binomialTree(callPut, spot, strike, rate, sigma, tenor, N=2000, american=True):
 
    # Each time step period
    deltaT = float(tenor) / N
    u = np.exp(sigma * np.sqrt(deltaT))
    d = 1.0 / u
    a = np.exp(rate * deltaT)
    p = (a - d) / (u - d)
    oneMinusP = 1.0 - p
 
    # Initialize the arrays
    fs = np.asarray([0.0 for i in xrange(N + 1)])
 
    # Stock tree for calculations of expiration values
    fs2 = np.asarray([(spot * u ** j * d ** (N - j)) for j in xrange(N + 1)])
 
    # Vectorize the strikes to speed up expiration check
    fs3 = np.asarray([float(strike) for i in xrange(N + 1)])
 
    # Compute the Binomial Tree leaves, f_{N, j}
    if callPut == 'Call':
        fs[:] = np.maximum(fs2 - fs3, 0.0)
    else:
        fs[:] = np.maximum(-fs2 + fs3, 0.0)
 
    # Calculate backward the option prices
    for i in xrange(N - 1, -1, -1):
        fs[:-1] = np.exp(-rate * deltaT) * (p * fs[1:] + oneMinusP * fs[:-1])
        fs2[:] = fs2[:] * u
 
        if american:
            # Simply check if the option is worth more alive or dead
            if callPut == 'Call':
                fs[:] = np.maximum(fs[:], fs2[:] - fs3[:])
            else:
                fs[:] = np.maximum(fs[:], -fs2[:] + fs3[:])
 
    return fs[0]

参考文献:
[1]http://keeprunning.sg/american-vanilla-option-pricing-binomial-tree-method/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值