如何在Python中为多个N值运行二叉树看跌期权定价函数
问题原因
你遇到报错的核心原因有两个:
np.linspace(20,250,47)返回的是浮点型数组,而二叉树函数中的N需要作为数组维度、循环迭代次数的参数,必须是正整数,直接传入浮点型数值或者整个数组都会触发报错。- 原代码中直接调用了
exp()、sqrt(),没有加np.前缀,如果你没有单独从numpy导入这两个方法,也会触发命名错误。
解决方法
按照以下步骤修改即可实现批量传入多个N值运行:
- 修正函数内的语法问题,给所有数学方法加上
np.前缀 - 将生成的N序列转为正整数类型
- 遍历每个N值调用函数,保存所有输出结果
完整可运行代码
import matplotlib.pyplot as plt import numpy as np # 固定参数定义 S0 = 9 K = 10 T = 3 r = 0.06 sigma = 0.3 def binomial_tree_put(N, T, S0, sigma, r, K, array_out=False): dt = T / N u = np.exp(sigma*np.sqrt(dt)+(r-0.5*sigma**2)*dt) d = np.exp(-sigma*np.sqrt(dt)+(r-0.5*sigma**2)*dt) p = 0.5 price_tree = np.zeros([N+1,N+1]) for i in range(N+1): for j in range(i+1): price_tree[j,i] = S0*(d**j)*(u**(i-j)) option = np.zeros([N+1,N+1]) option[:,N] = np.maximum(np.zeros(N+1), K - price_tree[:,N]) for i in np.arange(N-1, -1, -1): for j in np.arange(0, i+1): option[j, i] = np.exp(-r*dt)*(p*option[j, i+1]+(1-p)*option[j+1, i+1]) if array_out: return [option[0,0], price_tree, option] else: return option[0,0] # 生成整数型N序列(20到250共47个值,步长为5) N_list = np.linspace(20,250,47).astype(int) # 批量调用函数获取结果 put_prices = [binomial_tree_put(n, T, S0, sigma, r, K) for n in N_list] # 可选:绘制N和期权价格的关系图 plt.plot(N_list, put_prices) plt.xlabel('N值') plt.ylabel('看跌期权价格') plt.show()
运行后put_prices列表就存储了每个N对应的期权计算结果,顺序和N_list一一对应。
内容的提问来源于stack exchange,提问作者Tim Deutman
相关产品推荐
相关产品推荐

