如何用Python实现不确定性市场下美式看涨期权定价公式?
不确定性市场下美式看涨期权定价公式的Python实现
问题概述
已推导不确定性市场下含上确界(Sup)的美式看涨期权定价公式,需Python实现验证,参数与理论值如下:
- 当前股价 $Y=30$
- 无风险利率 $r=8%$/年
- 模型参数 $m=0.1$, $a=0.06$, $s=7.5$
- 到期时间 $T=0.25$ 年(3个月)
- 执行价格 $K=31$
- 理论定价:$0.2244$
基于的核心模型为《不确定性市场下的新型股票期权定价模型》中的不确定性微分方程股价过程,美式期权定价需求解行权时刻上确界与不确定性期望两个核心环节。
实现思路
- 不确定性期望计算:基于Liu过程的逆累积分布函数,通过数值积分计算期望收益 $\mathbb{E}\left[ \max(Y_t - K, 0) \right]$
- 上确界求解:在 $[0, T]$ 区间内,寻找使折现后期望收益最大的行权时刻,使用数值优化方法实现
Python代码实现
import numpy as np from scipy.integrate import quad from scipy.optimize import fminbound # 验证案例参数 Y0 = 30 r = 0.08 m = 0.1 a = 0.06 s = 7.5 T = 0.25 K = 31 theoretical_price = 0.2244 def inv_liu_cdf(alpha, t): """标准Liu过程的逆累积分布函数(不确定性理论核心函数)""" sqrt_3t = np.sqrt(3 * t) return (sqrt_3t / np.pi) * np.log(alpha / (1 - alpha)) def expected_payoff(t, Y0, K, m, a, s): """计算t时刻的期望行权收益""" # 论文中股价过程的解析解:Y_t = Y0 * exp( (m - 0.5*a*s²)*t + s*C_t ) drift_term = (m - 0.5 * a * s**2) * t def integrand(alpha): c_t = inv_liu_cdf(alpha, t) y_t = Y0 * np.exp(drift_term + s * c_t) return max(y_t - K, 0) # 数值积分计算期望(积分区间[0,1]) exp_val, _ = quad(integrand, 0, 1, epsabs=1e-6) return exp_val def american_call_price(Y0, r, T, K, m, a, s): """计算美式看涨期权定价:折现后最大期望收益""" def objective(t): if t == 0: return max(Y0 - K, 0) # 折现到当前时刻的价值 discount_factor = np.exp(-r * t) return discount_factor * expected_payoff(t, Y0, K, m, a, s) # 用黄金分割法寻找区间[0,T]内的最大值(取负转为最小值问题求解) _, max_val, _, _ = fminbound(lambda t: -objective(t), 0, T, full_output=True) return -max_val # 执行计算并验证 calculated_price = american_call_price(Y0, r, T, K, m, a, s) print(f"计算价格: {calculated_price:.4f}") print(f"理论价格: {theoretical_price:.4f}")
关键调整说明
- 若论文中股价过程的解析解形式不同,需修改
expected_payoff中的y_t计算逻辑 - 积分精度可通过
quad函数的epsabs参数调整,提高计算准确性 - 上确界搜索可替换为网格搜索+局部优化的组合方式,平衡效率与精度
内容的提问来源于stack exchange,提问作者Harsh Raj Ambastha
相关产品推荐
相关产品推荐

