binomial tree in python

本文介绍了一个使用Python实现的二项期权定价模型。模型参数包括股票初始价格(S0)、到期时间(T)、无风险利率(r)、波动率(vol)、时间步长(M)等。通过生成二项树并计算内在价值,最终对欧式看跌期权进行估值。
摘要由CSDN通过智能技术生成
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):
期权三叉树(Binomial Option Pricing Model, BOPM)是一种用于估算欧式期权价格的数值方法,它基于二叉树模型简化了期权定价过程。在Python中,你可以使用NumPy和SciPy库来实现期权三叉树算法。以下是一个简化的期权三叉树计算步骤概述: 1. 定义参数:期权类型(看涨或看跌)、当前股票价格、执行价格、期权到期时间(以年为单位)、无风险利率、波动率、小步数(树的分支数量)。 2. 创建二叉树:树的每一层代表时间的推进,每个节点代表未来可能的股票价格。从当前价格开始,每次上行或下行都是价格变化的一个倍数。 3. 计算节点价值:对于每个节点,确定是否执行期权(内在价值)或持有期权(期望值)。上行节点的价值是执行价格与股价的较高者减去期权费,下行节点则是期权费。 4. 递归计算:使用贴现因子(e^(-r*t)),根据无风险利率折现未来各层的节点价值。 5. 最终结果:在树的末端,找到期权到期时的价格,即为期权的价值。 在Python中,你可以编写一个函数来执行这些计算。以下是一个简单的伪代码示例: ```python import numpy as np def binomial_tree_call_option(price, strike, t, r, vol, steps): # ... # 具体实现细节 # ... df = np.exp(-r * t) up_factor = np.exp(vol * np.sqrt(t / steps)) down_factor = 1 / up_factor tree_values = * (steps + 1) # 初始化树节点 tree_values = price for i in range(1, steps + 1): # 上行节点 tree_values[i] = np.maximum(tree_values[i-1] * up_factor, strike) # 考虑执行期权 tree_values[i] = np.where(tree_values[i] > strike, tree_values[i] - strike, tree_values[i]) # 下行节点 tree_values[i] *= down_factor # 折现到当前时间 tree_values[i] *= df # 返回期权价值 return tree_values[-1] # 使用时调用这个函数,传入所有参数 price = ... # 股票价格 strike = ... # 执行价格 # ... tree_value = binomial_tree_call_option(price, strike, t, r, vol, steps) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值