《另类期权定价模型的实证表现》— Bakshi, Cao, Chen (1997)
一、研究背景与目的
- Black-Scholes 存在明显缺陷:波动率微笑、深度虚值期权定价偏差、收益率非正态
- 后续出现大量扩展模型:随机波动率 SV、随机利率 SI、跳跃扩散 J、随机波动率 + 跳跃 SVJ、随机波动率 + 随机利率 + 跳跃 SVSI-J(即 BCC 模型)
- 研究缺口
- 本文目标:统一框架下对比多模型,从参数一致性、样本外定价、对冲效果三个维度实证对比
二、核心模型体系
本文构建统一闭式模型 SVSI-J,包含以下特例:
- SVSI-J:随机波动率 + 随机利率 + 跳跃(BCC 模型)
模型改进逻辑
三、实证方法
数据
- S&P 500 看涨期权,1988/6–1991/5,共 38,749 条
- 每日从期权价格反解参数(隐含波动率、均值回复、跳跃强度等)
三大评价维度
- 内部参数一致性
- 样本外定价误差
- 对冲效果单资产最小方差对冲 + 多资产 Delta 中性对冲
四、主要实证结论
1. 模型误设程度(从好到差)
SVJ < SVSI < SV < BS
2. 样本外定价
3. 对冲表现(最关键结论)
- 单工具对冲
- Delta 中性对冲:SV/SVSI/SVJ 误差比 BS 低 50%–65%
- 一旦纳入随机波动率,再加入跳跃或随机利率,对冲效果不再明显提升
- 对冲对模型误设不敏感:简单 BS delta-vega 对冲效果接近复杂模型
- 定价:随机波动率最重要,跳跃改善短期,随机利率改善长期
- 对冲:只需要随机波动率就足够强,再加跳跃 / 利率提升有限
- 实践选择
- 简单够用 → BS 配合 delta-vega 对冲
六、关键词速记
- SVSI-J = SV + SI + Jump = BCC 模型
- 直接比较模拟路径无意义
- CIR 波动率天然更小,因为 σ√rₜ < σ
- 模型好坏必须通过校准判断
- Vasicek:简单但会出现负利率
- CIR:更现实、利率非负、波动率随利率变化
- 未校准 → 不能比较;校准后 → CIR 更实用
一、利率模型校准通用步骤
二、市场数据
- 标的:2014-09-30 欧元区 Euribor 利率
- 期限:1,7,14,30,60,90,180,270,360 天(转成年化:mat_list)
数据处理
- 计算复利因子:
factors = 1 + mat_list * rate_list - 计算连续零息利率:
zero_rates = -log(B0(T))/T
CIR 校准 = 市场零息债 → 样条插值 → 远期利率 → MSE 优化 → 得到 k,θ,σLESSON 3 - THE BCC (1997) 模型
一、模型核心定位
BCC 模型(Bakshi, Cao, Chen, 1997)是融合三大核心特征的综合期权定价模型,本质是 Bates (1996) 模型 + CIR (1985) 随机利率,解决了单一模型忽略波动率、跳跃、利率随机性的缺陷,适用于更贴近现实的期权定价场景。
核心融合的三大特征(均为之前所学模型):
- 随机利率(Cox-Ingersoll-Ross, 1985)
三、核心代码与关键函数(可直接复制使用)
1. 基础依赖(隐含)
import numpy as npfrom scipy.integrate import quad
2. 辅助特征函数(复用之前模型)
(1)Heston (1993) 特征函数(随机波动率核心)
def H93_char_func(u, T, r, kappa_v, theta_v, sigma_v, rho, v0): c1 = kappa_v * theta_v c2 = -np.sqrt((rho * sigma_v * u * 1j - kappa_v) ** 2 - sigma_v**2 * (-u * 1j - u**2)) c3 = (kappa_v - rho * sigma_v * u * 1j + c2) / (kappa_v - rho * sigma_v * u * 1j - c2) H1 = r * u * 1j * T + (c1 / sigma_v**2) * ((kappa_v - rho * sigma_v * u * 1j + c2) * T - 2 * np.log((1 - c3 * np.exp(c2 * T)) / (1 - c3))) H2 = ((kappa_v - rho * sigma_v * u * 1j + c2) / sigma_v**2) * ((1 - np.exp(c2 * T)) / (1 - c3 * np.exp(c2 * T))) return np.exp(H1 + H2 * v0)
(2)Merton (1976) 特征函数(跳跃扩散核心)
def M76J_char_func(u, T, lamb, mu, delta): omega = -lamb * (np.exp(mu + 0.5 * delta**2) - 1) return np.exp((1j * u * omega + lamb * (np.exp(1j * u * mu - u**2 * delta**2 * 0.5) - 1)) * T)
3. BCC 模型核心函数(核心新增 / 修改)
(1)BCC 特征函数(H93 + M76,与 Bates 一致)
def BCC_char_func(u, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta): H93 = H93_char_func(u, T, r, kappa_v, theta_v, sigma_v, rho, v0) M76J = M76J_char_func(u, T, lamb, mu, delta) return H93 * M76J
(2)Lewis 积分函数(期权定价积分核心)
def BCC_int_func(u, S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta): char_func_value = BCC_char_func(u - 1j * 0.5, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta) return 1 / (u**2 + 0.25) * (np.exp(1j * u * np.log(S0 / K)) * char_func_value).real
(3)BCC 欧式看涨期权定价函数
def BCC_call_value(S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta): int_value = quad(lambda u: BCC_int_func(u, S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta), 0, np.inf, limit=250)[0] return max(0, S0 - np.exp(-r * T) * np.sqrt(S0 * K) / np.pi * int_value)
4. CIR 模型函数(随机利率定价核心,BCC 专属)
def gamma(kappa_r, sigma_r): """CIR 模型中的 gamma 辅助函数""" return np.sqrt(kappa_r**2 + 2 * sigma_r**2)def b1(alpha): """CIR 模型中 ZCB 价格的 b1 组件""" r0, kappa_r, theta_r, sigma_r, t, T = alpha g = gamma(kappa_r, sigma_r) return (2 * g * np.exp((kappa_r + g) * (T - t) / 2) / (2 * g + (kappa_r + g) * (np.exp(g * (T - t)) - 1))) ** (2 * kappa_r * theta_r / sigma_r**2)def b2(alpha): """CIR 模型中 ZCB 价格的 b2 组件""" r0, kappa_r, theta_r, sigma_r, t, T = alpha g = gamma(kappa_r, sigma_r) return 2 * (np.exp(g * (T - t)) - 1) / (2 * g + (kappa_r + g) * (np.exp(g * (T - t)) - 1))def B(alpha): """CIR 模型零息债(ZCB)定价函数,用于获取 BCC 所需的短期利率""" b_1 = b1(alpha) b_2 = b2(alpha) r0, kappa_r, theta_r, sigma_r, t, T = alpha E_rt = theta_r + np.exp(-kappa_r * t) * (r0 - theta_r) return b_1 * np.exp(-b_2 * E_rt)
定价示例(给定参数)
# 1. 模型参数(示例值)# 随机利率(CIR)参数r0 = -0.032 / 100 # 初始短期利率kappa_r = 0.068 # 利率均值回归速度theta_r = 0.207 # 利率长期均值sigma_r = 0.112 # 利率波动率# 随机波动率(Heston)参数kappa_v = 18.447 # 波动率均值回归速度theta_v = 0.026 # 波动率长期均值sigma_v = 0.978 # 波动率的波动率rho = -0.821 # 波动率与资产价格的相关性v0 = 0.035 # 初始波动率# 跳跃扩散(Merton)参数lamb = 0.008 # 跳跃强度mu = -0.600 # 预期跳跃大小delta = 0.001 # 跳跃标准差# 2. 期权特征S0 = 100 # 初始标的价格K = 90 # 行权价T = 1 # 到期时间(年)# 3. Bates 定价(固定利率 r0)from scipy.integrate import quad# 先定义 Bates 相关函数(复用 BCC 部分函数,仅贴现用固定 r0)def B96_call_value(S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta): int_value = quad(lambda u: BCC_int_func(u, S0, K, T, r, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta), 0, np.inf, limit=250)[0] return max(0, S0 - np.exp(-r * T) * np.sqrt(S0 * K) / np.pi * int_value)B96_call = B96_call_value(S0, K, T, r0, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta)# 4. BCC 定价(随机利率,由 CIR 反推)B0T = B([r0, kappa_r, theta_r, sigma_r, 0, T]) # 计算 ZCB 价格r_bcc = -np.log(B0T) / T # 反推短期利率BCC_call = BCC_call_value(S0, K, T, r_bcc, kappa_v, theta_v, sigma_v, rho, v0, lamb, mu, delta)# 输出结果print("Bates (1996) 看涨期权价格:", B96_call)print("BCC (1997) 看涨期权价格:", BCC_call)
- BCC 模型 = Bates 模型 + CIR 随机利率,唯一区别是短期利率的获取方式(固定 vs 随机)。
- BCC 定价步骤:先通过 CIR 模型计算零息债价格 → 反推短期利率 → 代入 Bates 定价逻辑,得到期权价格。
- 模型优势:同时考虑波动率、跳跃、利率的随机性,定价更贴近现实市场;劣势:参数更多(需校准 CIR + Heston + Merton 三类参数),计算更复杂。
- 后续重点:通过市场数据校准 BCC 所有参数,才能用于实际期权定价
BCC 校准 = 先定利率 → 再定波动 → 再加跳跃 → 最后全局微调分步保证稳定,联合保证精度,是复杂模型校准的标准工程方案。一、利率模型(Vasicek / CIR)核心知识点
1. 模型基础参数
二、BCC (1997) 模型体系
1. 模型构成
BCC 模型的三大核心构建模块:
2. 模型核心参数
- 跳跃强度(jump intensity):课程代码示例中取值为 0.008,代表单位时间内跳跃发生的概率
- Heston 无效参数惩罚值:课程代码中对无效 Heston 参数的惩罚值为 1000(用于引导优化器避开无效参数组合)
三、期权校准与优化实操
1. 近 ATM 期权筛选
- 容忍度(tolerance):课程示例中筛选近 ATM 期权的容忍度为 0.02(行权价与标的价相对偏差在 ±2% 以内)
- 期限选择:校准示例中选择 最接近 / 最短期限(Closest/shortest maturity) 的期权
2. 优化器常见问题
- 优化警告:课程示例中优化输出的常见警告为 Maximum number of iterations exceeded(超过最大迭代次数)
- 无效参数惩罚:通过设置高额惩罚值(如 1000),强制优化器排除不符合模型约束的参数组合,保证解的经济意义
五、补充知识点
1. 其他模型 / 方法
- GARCH/ARCH/EGARCH
- Black-Scholes
- Milstein 方案
- 精确模拟(Exact simulation)
2. 量化反思(Reflection)
Good model calibration relies not only on fitting market prices but also on respecting structural constraints and parameter validity. Imposing penalties on invalid configurations helps guide optimization toward economically meaningful solutions. This reminds us that quantitative models must balance numerical precision with financial intuition, ensuring stability and interpretability in real-world applications.