第 27a 章 超越 BSM:替代模型、随机波动率与局部波动率
第 20 章说明,交易员用波动率曲面弥补几何布朗运动的缺陷:曲面告诉我们普通期权代入 BSM 时应使用的波动率。但对第 26a、26b 章的奇异期权,曲面几乎没有指导意义。曲面显示 1 年期、执行价 $40 的普通期权应使用 27% 的波动率,用 27% 给 1 年期、执行价 $40 的障碍期权定价,可能完全不对:障碍期权的价值取决于标的在障碍附近的行为,而不只是到期时的分布。
要更有把握地给奇异期权定价,需要一个能同时拟合普通期权价格的随机过程。本章介绍这类模型的三条路线和两个工业标准:
- 保持价格连续,但换一种扩散过程:CEV 模型;
- 在扩散上叠加跳跃:Merton 跳跃扩散;
- 全部由跳跃构成:方差–伽马(VG)模型;
- 让波动率本身随机:随机波动率模型(Hull–White、Heston);
- 让波动率是价格和时间的确定函数,并精确拟合当天全部欧式期权:隐含波动率函数(局部波动率)模型。
第 27b 章再讲数值方法。全章仍假设标的提供收益率 \(q\)。
学习目标
- 说出 CEV、跳跃扩散、方差–伽马三类模型的风险中性过程,以及各自产生什么形状的波动率微笑。
- 理解 Merton 公式"Poisson 加权的 BSM 价格"的构造,会用蒙特卡洛模拟跳跃过程(扩散部分漂移须减去 \(\lambda k\))。
- 理解方差–伽马模型中"经济时间"的含义,会按三步抽样生成 VG 分布。
- 掌握 Hull–White(1987)结论:波动率随机且与价格不相关时,期权价格 = BSM 价格对平均方差分布的积分;由此解释 BSM 对平值高估、对两翼低估。
- 理解局部波动率模型与 Dupire 公式,知道它为什么能正确定价单时点支付的产品,却可能错误定价障碍、远期开始等依赖联合分布的产品。
读前导读
这一章在解决什么问题。 CFA 里的 BSM 假设波动率是一个常数,但你在实务中一定见过同一标的、不同执行价的期权报出不同的隐含波动率(波动率微笑/偏斜)。这说明市场认为真实的价格分布不是对数正态:左尾更厚(股市更容易暴跌)、峰更尖。本章介绍几种"修补 BSM"的模型,它们的共同目标是:产生一个更接近现实的价格分布,从而让模型价格能同时对上所有普通期权的报价,然后再用同一个模型给奇异期权定价。
可以用读者熟悉的利率模型类比。CFA 固定收益中,二叉利率树要先"校准"到当天的国债价格(无套利),再用它给含权债券定价;不同的利率模型可以都对上当天的收益率曲线,却给同一只可赎回债券不同的价格,因为它们对利率"未来如何变动"的假设不同。本章的结论完全平行:多个模型可以都对上当天的波动率曲面,却给障碍期权不同的价格,这一差别就是模型风险。
需要先想起来的数学。
- 泊松分布。 单位时间平均发生 \(\lambda\) 次的随机事件,在时间 \(T\) 内恰好发生 \(n\) 次的概率为 \(e^{-\lambda T}(\lambda T)^n/n!\)。例:\(\lambda=0.5\)/年,2 年内不跳的概率 \(e^{-1}=0.368\),跳一次的概率也是 \(0.368\)。
- 全期望公式(先条件、再平均)。 \(E[X]=E\big[E[X\mid Y]\big]\)。Merton 跳跃公式和 Hull–White 公式都用它:先固定跳跃次数(或平均方差),此时 BSM 成立;再按跳跃次数(或平均方差)的分布加权平均。见 第 00 册第 07 章 概率中的分析工具(条件期望部分)。
- 凹凸性与 Jensen 不等式。 函数在一段区间上向下弯(凹)时,"函数的平均"小于"平均处的函数值",向上弯(凸)时相反。这是随机波动率产生微笑的全部原因。见 第 00 册第 02 章 导数与泰勒展开(二阶导数与凹凸)。
- 偏导数。 Dupire 公式里 \(\partial c/\partial T\)、\(\partial c/\partial K\)、\(\partial^2c/\partial K^2\) 分别是期权价格对期限的斜率、对执行价的斜率和对执行价的曲率,各自对应一个可交易的期权组合(日历价差、垂直价差、蝶式价差)。见 第 00 册第 05 章 多元微积分与优化。
- 均值回归过程。 \(dV=a(V_L-V)dt+\ldots\) 的意思是"\(V\) 离长期水平越远,被拉回的速度越快",与 CFA 中利率模型(Vasicek、CIR)的均值回归项完全相同。
怎么读这一章。 核心必读:27.1 中 CEV 和 Merton 跳跃扩散各自产生什么形状的微笑(公式可以不推)、27.2 的"确定性时变波动率"和 Hull–White 结论、27.3 的"能做什么、不能做什么"。CEV 的非中心卡方公式、VG 的密度和 \(\omega\) 第一次只需知道"有半解析解",不必细读。Dupire 公式抓住"分子 = 日历价差、分母 = 风险中性密度"这一解读即可。
27.1 BSM 的替代模型
BSM 假设价格连续变化,且任意未来时刻价格服从对数正态分布。三类替代思路都属于 Lévy 过程的范畴(粗略地说,具有平稳独立增量的连续时间随机过程),CEV 是一个例外,它是状态依赖的扩散。这些模型都通过最小化模型价与市场价的平方误差之和来校准参数。
常弹性方差模型(CEV)
Cox & Ross(1976)的常弹性方差(constant elasticity of variance,CEV)模型,风险中性过程为
白话解释:把方程两边除以 \(S\):\(dS/S=(r-q)dt+\sigma S^{\alpha-1}dz\),百分比波动率是 \(\sigma S^{\alpha-1}\),随价格变化。弹性的意思和经济学的价格弹性一样:价格变动 1%,波动率变动约 \((\alpha-1)\%\)。 数值例:\(\alpha=0.5\),百分比波动率 \(=\sigma/\sqrt S\)。设 \(S=100\) 时为 25%,则 \(\sigma=2.5\);股价跌到 81 时波动率变为 \(2.5/9=27.8\%\),涨到 121 时变为 \(2.5/11=22.7\%\)。价格越低越波动,这就是向下偏斜的来源。 与杠杆效应的联系:股价下跌时,公司的负债/股权比上升,股权的波动率被放大,这与第 24 章 Merton 模型中"\(\sigma_E=N(d_1)\frac{V}{E}\sigma_V\)"是同一个机制。
- \(\alpha=1\):几何布朗运动。
- \(\alpha<1\):价格下跌时波动率上升,更可能继续大幅下跌;价格上涨时波动率下降,更难继续上涨。结果是左尾厚、右尾薄,隐含波动率随执行价下降,与股票期权观察到的偏斜一致(图 20.4)。这也是第 20 章"杠杆效应"的一个数学化身。
- \(\alpha>1\):价格上涨时波动率上升,右尾厚、左尾薄,隐含波动率随执行价上升,有时见于期货期权(如商品期权中的"上涨恐慌")。
CEV 下的欧式期权有基于非中心卡方分布的解析公式。记 \(\chi^2(z;k,v)\) 为自由度 \(k\)、非中心参数 \(v\) 的非中心卡方变量小于 \(z\) 的概率(Technical Note 12;Python 中为 scipy.stats.ncx2.cdf(z, k, v))。当 \(0<\alpha<1\) 时:
CEV 适合给股票上的奇异期权定价,因为它用一个参数 \(\alpha\) 就产生了合理的偏斜。代码中取 \(\alpha=0.5\)、在 \(S_0=100\) 处局部波动率 25%,6 个月期隐含波动率从执行价 80 的 26.4% 平滑下降到执行价 120 的 23.9%。但 CEV 的偏斜通常不够陡,单独使用难以拟合短期股指期权。
Merton 跳跃扩散模型
Merton(1976)在几何布朗运动上叠加跳跃。设 \(\lambda\) 为每年平均跳跃次数,\(k\) 为平均跳幅(占价格的百分比)。\(\Delta t\) 内发生跳跃的概率为 \(\lambda\Delta t\),跳跃带来的平均增长率为 \(\lambda k\)。为使总期望收益率仍为 \(r-q\),扩散部分的漂移要扣除 \(\lambda k\):
重要特例:\(\ln(1+\text{跳幅})\) 服从正态分布、标准差为 \(s\)。条件于 \(T\) 内恰好发生 \(n\) 次跳跃,\(\ln S_T\) 仍是正态的,只是方差多了 \(ns^2\)、均值多了 \(n\) 次跳跃的贡献。于是欧式期权价格是 BSM 价格按跳跃次数的 Poisson 加权平均:
推导拆解:两个要点。
- 为什么扩散漂移要扣 \(\lambda k\):每一小段 \(\Delta t\) 里,以概率 \(\lambda\Delta t\) 发生一次平均幅度为 \(k\) 的跳跃,跳跃部分贡献的期望收益为 \(\lambda\Delta t\times k\)。风险中性世界中总期望收益必须是 \((r-q)\Delta t\),所以扩散部分只能贡献 \((r-q-\lambda k)\Delta t\)。例:\(\lambda=0.5\)、\(k=-10\%\)(平均每两年一次 10% 的闪崩),则 \(\lambda k=-5\%\),扩散部分漂移要比 \(r-q\) 高 5 个百分点,作为对跳跃损失的补偿。
- 为什么价格是 Poisson 加权的 BSM:用全期望公式,期权价值 \(=\sum_n P(\text{恰好 }n\text{ 次跳跃})\times E[\text{贴现收益}\mid n\text{ 次跳跃}]\)。给定 \(n\) 次跳跃,每次跳跃的对数幅度是正态的,\(n\) 个正态之和加上扩散部分仍是正态,所以条件价格就是一个参数调整过的 BSM 价格。多出来的 \(ns^2\) 被摊到年化方差里,故方差率为 \(\sigma^2+ns^2/T\)。 正文把 \(\lambda\) 换成 \(\lambda'\)、利率加 \(n\gamma/T\),是为了让每个 \(f_n\) 都能直接套用标准 BSM 公式,第一次读可以接受这个结论,不必推导。
跳跃扩散的左右尾都比 BSM 厚。当平均跳幅为负时(股市"闪崩"),左尾尤其厚,产生向下偏斜;当跳幅对称时,产生 U 形微笑,适合外汇期权。跳跃对短期期权影响大,对长期期权影响小(跳跃在长期中被扩散"平均掉"),这与市场上短期微笑更陡的事实一致。
蒙特卡洛实现跳跃。 Poisson 过程下 \(\Delta t\) 内恰有 \(m\) 次跳跃的概率为 \(e^{-\lambda\Delta t}(\lambda\Delta t)^m/m!\)。原书表 27.1 列出 \(\lambda=0.5\) 时 2 年内跳跃次数的分布:\(m=0,1,2,3,4,5,6,7\) 的概率分别为 0.3679、0.3679、0.1839、0.0613、0.0153、0.0031、0.0005、0.0001,累计概率 0.3679、0.7358、0.9197、0.9810、0.9963、0.9994、0.9999、1.0000。模拟时抽一个 \([0,1)\) 均匀数查表决定跳跃次数(0 到 0.3679 无跳,0.3679 到 0.7358 跳一次,依此类推),再为每次跳跃抽跳幅。扩散部分按第 21b 章方法抽样,漂移必须是 \(r-q-\lambda k\),否则总期望收益不等于无风险利率,价格会有偏。
方差–伽马模型
Madan, Carr & Chang(1998)的方差–伽马(variance-gamma,VG)模型是流行的纯跳跃模型。它引入一个伽马过程:均值速率 1、方差速率 \(v\) 的纯跳跃过程,小跳频繁、大跳偶尔。记 \(g\) 为该过程在时间 \(T\) 内的增量,其密度为
白话解释:VG 的构造可以分两层读。外层:先随机决定"这段时间里实际流逝了多少经济时间" \(g\),它平均等于日历时间 \(T\),但有时多、有时少(伽马分布保证 \(g>0\))。内层:给定 \(g\),对数收益就是一个普通的正态分布,方差与 \(g\) 成正比。 把许多方差不同的正态分布混合在一起,得到的分布峰更尖、尾更厚,这与 CFA 里"厚尾、超额峰度"的描述一致。\(v\) 越大,\(g\) 越分散,混合越剧烈,峰度越高。\(\theta\) 让均值随 \(g\) 移动:\(\theta<0\) 时信息多的时期往往下跌,于是左尾更厚。 \(\Gamma(\cdot)\) 是伽马函数,可以看作阶乘的推广(\(\Gamma(n)=(n-1)!\)),这里只起归一化作用。\(\omega\) 只是一个常数修正,使 \(\hat E(S_T)=S_0e^{(r-q)T}\) 成立,作用与 Merton 模型中扣除 \(\lambda k\) 相同。
三步抽样(原书用 Excel 实现,10,000 个样本):
- 抽 \(g\):
GAMMAINV(RAND(), T/v, v); - 抽 \(z\sim N(\theta g,\sigma^2g)\):\(z=\theta g+\sigma\sqrt g\,\varepsilon\);
- \(S_T=S_0\exp[(r-q)T+\omega+z]\)。
原书图 27.1 对比了 \(S_0=100\)、\(T=0.5\)、\(v=0.5\)、\(\theta=0.1\)、\(\sigma=0.2\)、\(r=q=0\) 的 VG 分布与 20% 波动率的对数正态分布,VG 尾部更厚。
直观解释。 \(g\) 刻画时间 \(T\) 内信息到达的多少:\(g\) 大,信息多,第 2 步的正态样本均值和方差都大;\(g\) 小,信息少,价格变动小。\(T\) 是日历时间,\(g\) 称为经济时间(economic time)。这一视角与金融时间序列中"按成交量或成交笔数度量时间"的思路一脉相承(第 06、07 册)。Madan 等给出欧式期权的半解析公式。VG 倾向于产生 U 形、不一定对称的微笑,短期限非常明显、长期限逐渐消失,可拟合股票或外汇的普通期权价格。
27.2 随机波动率模型
BSM 假设波动率恒定,但第 23 章表明波动率随时间变化。VG 通过 \(g\) 间接反映这一点;另一条路是直接给波动率指定一个随机过程。
确定性时变波动率
先看最简单的情形:
随机波动率
现在让方差率 \(V\) 本身随机:
Hull–White(1987)结果。 若波动率随机但与资产价格不相关,欧式期权价格等于 BSM 价格对存续期内平均方差率 \(\bar V\) 的风险中性分布的积分:
由此可以推出一个重要的定性结论:BSM 用平均波动率时,会高估平值或近平值期权,低估深度实值和深度虚值期权。 原因是 BSM 价格作为方差的函数,在平值附近是凹的(价格约与 \(\sqrt{\bar V}\) 成正比),在两翼是凸的,由 Jensen 不等式即得。这正是外汇期权的 U 形微笑(第 20.2 节)。本章代码的模拟验证了这一点:平均波动率 20% 时,平值期权的随机波动率价格(6.264)低于 BSM 价格(6.307),而执行价 70 和 130 的期权高于 BSM 价格,反解出的隐含波动率形成微笑。
推导拆解:用一个两情景的例子看 Jensen 不等式怎么造出微笑。设平均波动率以各 50% 的概率为 10% 或 30%(平均方差 \(=0.5\times0.01+0.5\times0.09=0.05\))。 平值期权:价格约与波动率成正比(平值 BSM 价格 \(\approx0.4S\sigma\sqrt T\)),所以随机波动率下的价格 ∝ \(0.5\times10\%+0.5\times30\%=20\%\);而 BSM 用平均方差对应的 \(\sqrt{0.05}=22.4\%\) 定价,更高。平值期权被 BSM 高估,反推的隐含波动率低于 22.4%。 深度虚值期权:价格在低波动率时几乎为零、高波动率时迅速变大,是波动率的凸函数。两个情景平均,高波动率情景贡献的价值远超低波动率情景的损失,所以随机波动率价格高于 BSM 价格,隐含波动率高于 22.4%。 两翼高、中间低,这就是微笑。注意这个论证只用到"波动率不确定",没有用到"波动率与价格相关",所以得到的是对称的微笑;偏斜需要负相关。
相关的情形。 波动率与价格相关时问题更复杂,可用蒙特卡洛。\(\alpha=0.5\) 时,Hull & White(1988)给出级数展开,Heston(1993)给出了半解析解(基于特征函数的傅里叶积分),这使 Heston 成为业界最常用的随机波动率模型。波动率与价格负相关时,隐含波动率呈现股票期权那样的向下偏斜,原因与 CEV 相同:价格下跌伴随波动率上升。
GARCH 与随机波动率。 第 23 章的 EWMA 和 GARCH(1,1) 也是刻画随机波动率的方式。Duan(1995, 1996)证明可以以 GARCH(1,1) 为基础建立内部一致的期权定价模型(GARCH 与连续时间随机波动率模型的关系见习题 23.14)。
影响有多大? 随机波动率模型拟合普通期权价格后,可用于给奇异期权定价(Hull & Suo 2002)。对 1 年以内的期权,随机波动率对价格的绝对影响较小(但对深度虚值期权的百分比影响可能很大),且随期限增加而增大。随机波动率对 delta 对冲的效果影响通常很大,这就是交易员即使使用 BSM 也要计算 vega、监控波动率暴露的原因(第 19b 章)。
27.3 隐含波动率函数模型(局部波动率)
上面的模型都只能近似拟合某一天的普通期权价格。金融机构有时需要精确拟合,原因很实际:若内部模型不能精确重现市场上普通期权的价格,交易员可能把时间花在"套利"本行的内部模型上,而不是市场上。
1994 年 Derman & Kani、Dupire、Rubinstein 分别提出隐含波动率函数模型(implied volatility function,IVF),又称隐含树模型(implied tree)或局部波动率模型(local volatility model)。无论波动率曲面形状如何,它都能精确拟合当天的全部欧式期权价格。
模型与 Dupire 公式
风险中性过程为
金融直觉:Dupire 公式中的三个偏导数都对应可交易的期权组合,可以用差分近似:
- \(\partial c/\partial T\approx[c(K,T+\Delta T)-c(K,T)]/\Delta T\):日历价差(买远月、卖近月)的价格。多给 \(\Delta T\) 时间,期权价值增加多少,反映了这段时间里在 \(K\) 附近"预期会发生多少波动"。
- \(\partial c/\partial K\approx[c(K+\Delta K)-c(K)]/\Delta K\):垂直价差,约等于 \(-e^{-rT}\times\) 实值概率。
- \(\partial^2c/\partial K^2\approx[c(K+\Delta K)-2c(K)+c(K-\Delta K)]/\Delta K^2\):蝶式价差除以 \(\Delta K^2\),约等于价格落在 \(K\) 附近的(贴现)概率密度。 在 \(r=q=0\) 时公式简化为 \(\sigma^2(K,T)=\frac{2\,\partial c/\partial T}{K^2\,\partial^2c/\partial K^2}\):用"多等一段时间能多值多少钱"除以"价格恰好在 \(K\) 附近的可能性",就得到市场认为价格处在 \(K\)、时间处在 \(T\) 时的瞬时方差。分母是二阶差分,对报价噪声最敏感,这正是实务中必须先平滑曲面的原因。
若市场有足够多的看涨价格,就可以由 (27.4) 估计 \(\sigma(S,t)\)。实务中价格是离散且有噪声的,直接差分会放大噪声,通常需要先平滑隐含波动率曲面(并保证无套利)。Dupire 考虑 \(r=q=0\) 的情形,Andersen & Brotherton-Ratcliffe 考虑一般情形,并用隐式有限差分实现;Derman–Kani 与 Rubinstein 的隐含树方法则直接构造一棵与市场期权价格一致的资产价格树。
本章代码做了一个干净的验证:用 CEV 模型的解析价格作为"市场价格曲面",代入 (27.4) 做有限差分,恢复出的局部波动率与 CEV 的真实局部波动率 \(\sigma S^{\alpha-1}\) 在 4 位小数上一致。
局部波动率模型能做什么、不能做什么
实务中 IVF 模型每天用普通期权价格重新校准,用来保证奇异期权与普通期权定价一致。
它能做对的事。 普通期权的价格(所有执行价、所有期限)决定了未来每一个时刻资产价格的风险中性边缘分布(第 20 章 Breeden–Litzenberger)。IVF 精确拟合了全部普通期权,因此它给出的每个时刻的边缘分布都是正确的。所以只在单一时点支付的产品(如全或无期权、资产或无期权,以及任何欧式收益)用 IVF 定价是正确的。
它可能做错的事。 边缘分布正确不等于两个或多个时刻的联合分布正确。复合期权、障碍期权、远期开始期权、棘轮期权的价值依赖于联合分布,IVF 可能给错。Hull & Suo 做过一个检验:假设真实世界由随机波动率模型生成,用 IVF 给奇异期权定价,结果对复合期权效果尚可,对障碍期权有时误差严重。一个常被引用的直观原因是:局部波动率模型隐含的"未来微笑"会随时间变得很平,而真实市场的微笑在未来依然陡峭,所以依赖未来微笑的产品(远期开始期权、棘轮)在 IVF 下定价偏差系统性存在。
白话解释:边缘分布和联合分布的差别,可以用一个简单例子说明。假设每天收盘时只看"股价在 90 以下、90–110、110 以上"的概率,两个模型可以在每一天都给出完全相同的三个概率,但一个模型中股价会在一天内从 110 以上跌到 90 以下再涨回来,另一个模型中价格走得很平稳。欧式期权只看到期那天的概率,分辨不出两者;向下敲出期权关心"途中是否跌破过 90",两个模型的答案就不同了。 金融类比:CFA 中的组合方差需要相关系数,只知道每只股票各自的分布不够;这里"各时点的边缘分布"对应"每只股票各自的分布","跨时点的联合分布"对应"相关结构"。普通期权只告诉我们前者。
这正是本章开头那个问题的答案:普通期权价格只能约束边缘分布,奇异期权的价格还取决于模型对"动态"的假设。 不同模型可以完全拟合同一张波动率曲面,却给同一个障碍期权不同的价格,这一差别就是模型风险。
量化实战
本章内容在量化交易中的用途
- 期权定价与做市系统。Heston、局部波动率、跳跃扩散、VG 是期权做市与奇异期权定价系统的标准模型组件。实务中常见的组合是:普通期权用参数化曲面(如 SVI)插值,奇异期权用局部波动率或局部–随机波动率混合模型定价,以 Heston 等模型做模型风险对照。
- 判断产品对模型的敏感度。"边缘分布 vs 联合分布"是判断一个产品是否对模型选择敏感的最好标准:欧式收益对模型不敏感;障碍、远期开始、棘轮、雪球类产品对"未来微笑的动态"敏感,必须用多个模型交叉定价并计提模型储备。
- 尾部风险与因子研究。跳跃和随机波动率解释了收益厚尾与波动率聚集。期权隐含的偏度、峰度(可用 VG 的 \(\theta\)、Merton 的 \(k\) 和 \(\lambda\) 拟合得到)是常用的期权隐含因子;隐含分布与现实分布的差异是偏度溢价、方差风险溢价研究的出发点。
- 对冲。随机波动率对 delta 对冲效果的影响很大。在有偏斜的市场中,"最小方差 delta"(考虑价格与波动率负相关)通常比 BSM delta 小,这一修正对期权做市的对冲成本有可见影响。
Python 示例:四种模型的微笑与 Dupire 公式检验
代码依次完成:(1) CEV 非中心卡方公式与蒙特卡洛核对,并反解隐含波动率;(2) Merton 跳跃扩散的 Poisson 加权公式与蒙特卡洛核对(跳幅均值 −8%);(3) 按原书三步法抽样 VG 分布,检验远期、计算微笑;(4) 模拟与价格独立的随机方差,验证 Hull–White 结论;(5) 用 CEV 价格曲面做 Dupire 有限差分,恢复局部波动率。
import numpy as np
from math import factorial
from scipy.stats import norm, ncx2
from scipy.optimize import brentq
N = norm.cdf
def bsm(S, K, T, r, q, sig, kind="call"):
d1 = (np.log(S/K) + (r - q + 0.5*sig**2)*T)/(sig*np.sqrt(T))
d2 = d1 - sig*np.sqrt(T)
if kind == "call":
return S*np.exp(-q*T)*N(d1) - K*np.exp(-r*T)*N(d2)
return K*np.exp(-r*T)*N(-d2) - S*np.exp(-q*T)*N(-d1)
def iv(price, S, K, T, r, q):
return brentq(lambda s: bsm(S, K, T, r, q, s) - price, 1e-4, 3.0)
S0, r, q, T = 100.0, 0.05, 0.02, 0.5
Ks = np.array([80, 90, 100, 110, 120], float)
# ---------- 1) CEV:非中心卡方公式 vs 蒙特卡洛,以及偏斜 ----------
def cev_call(S, K, T, r, q, sig, alpha):
v = sig**2/(2*(r - q)*(alpha - 1))*(np.exp(2*(r - q)*(alpha - 1)*T) - 1)
a = (K*np.exp(-(r - q)*T))**(2*(1 - alpha))/((1 - alpha)**2*v)
b = 1/(1 - alpha)
c = S**(2*(1 - alpha))/((1 - alpha)**2*v)
if alpha < 1:
return S*np.exp(-q*T)*(1 - ncx2.cdf(a, b + 2, c)) - K*np.exp(-r*T)*ncx2.cdf(c, b, a)
return S*np.exp(-q*T)*(1 - ncx2.cdf(c, -b, a)) - K*np.exp(-r*T)*ncx2.cdf(a, 2 - b, c)
alpha = 0.5
sig_cev = 0.25*S0**(1 - alpha) # 使 S0 处的局部波动率为 25%
rng = np.random.default_rng(0)
n, m = 200_000, 250
dt = T/m
S = np.full(n, S0)
for _ in range(m):
S = np.maximum(S + (r - q)*S*dt + sig_cev*S**alpha*np.sqrt(dt)*rng.standard_normal(n), 0.0)
print("CEV(alpha=0.5) K 公式 MC 隐含波动率")
for K in Ks:
f = cev_call(S0, K, T, r, q, sig_cev, alpha)
mc = np.exp(-r*T)*np.maximum(S - K, 0).mean()
print(" %4.0f %7.3f %7.3f %5.2f%%" % (K, f, mc, 100*iv(f, S0, K, T, r, q)))
# ---------- 2) Merton 跳跃扩散:Poisson 加权的 BSM ----------
def merton_call(S, K, T, r, q, sig, lam, k, s):
gam = np.log(1 + k)
lam2 = lam*(1 + k)
total = 0.0
for n_ in range(60):
w = np.exp(-lam2*T)*(lam2*T)**n_/factorial(n_)
sig_n = np.sqrt(sig**2 + n_*s**2/T)
r_n = r - lam*k + n_*gam/T
total += w*bsm(S, K, T, r_n, q, sig_n)
return total
lam, kj, sj, sig_d = 1.0, -0.08, 0.10, 0.18
# 蒙特卡洛:ln(1+跳幅) ~ N(ln(1+k) - s^2/2, s^2),使 E[跳幅]=k
rng = np.random.default_rng(1)
nJ = rng.poisson(lam*T, 1_000_000)
jump = nJ*(np.log(1 + kj) - 0.5*sj**2) + np.sqrt(nJ)*sj*rng.standard_normal(1_000_000)
ST = S0*np.exp((r - q - lam*kj - 0.5*sig_d**2)*T + sig_d*np.sqrt(T)*rng.standard_normal(1_000_000) + jump)
print("Merton K 公式 MC 隐含波动率")
for K in Ks:
f = merton_call(S0, K, T, r, q, sig_d, lam, kj, sj)
mc = np.exp(-r*T)*np.maximum(ST - K, 0).mean()
print(" %4.0f %7.3f %7.3f %5.2f%%" % (K, f, mc, 100*iv(f, S0, K, T, r, q)))
# ---------- 3) 方差-伽马:按原书 Excel 三步抽样 ----------
v_, theta, sig_vg = 0.5, -0.15, 0.20
omega = T/v_*np.log(1 - theta*v_ - sig_vg**2*v_/2)
rng = np.random.default_rng(2)
g = rng.gamma(shape=T/v_, scale=v_, size=1_000_000) # 第 1 步:经济时间 g
z = theta*g + sig_vg*np.sqrt(g)*rng.standard_normal(g.size) # 第 2 步:条件正态
ST = S0*np.exp((r - q)*T + omega + z) # 第 3 步
print("VG 远期检验: E[S_T]=%.3f, 理论 %.3f" % (ST.mean(), S0*np.exp((r - q)*T)))
print("VG 隐含波动率:", ["K=%d: %.2f%%" % (K, 100*iv(np.exp(-r*T)*np.maximum(ST - K, 0).mean(), S0, K, T, r, q))
for K in Ks])
# ---------- 4) Hull-White(1987):不相关随机波动率 = BSM 对平均方差积分 ----------
rng = np.random.default_rng(3)
n, m = 200_000, 100
dt = T/m
V = np.full(n, 0.04); intV = np.zeros(n)
for _ in range(m): # dV = a(VL - V)dt + xi*V dz_V,与股价独立
intV += V*dt
V = np.maximum(V + 3.0*(0.04 - V)*dt + 1.0*V*np.sqrt(dt)*rng.standard_normal(n), 1e-8)
Vbar = intV/T
print("Hull-White: 平均方差均值 %.4f (即 %.2f%% 波动率)" % (Vbar.mean(), 100*np.sqrt(Vbar.mean())))
for K in (70, 100, 130):
hw = bsm(S0, K, T, r, q, np.sqrt(Vbar)).mean()
flat = bsm(S0, K, T, r, q, np.sqrt(Vbar.mean()))
print(" K=%3d 随机波动率价 %.4f BSM(平均波动率) %.4f 隐含波动率 %.2f%%" % (K, hw, flat, 100*iv(hw, S0, K, T, r, q)))
# ---------- 5) Dupire:从 CEV 价格曲面恢复局部波动率 sigma*S^(alpha-1) ----------
dK, dT = 0.5, 0.01
for K in (85, 100, 115):
for Tm in (0.5,):
C = lambda k, t: cev_call(S0, k, t, r, q, sig_cev, alpha)
cT = (C(K, Tm + dT) - C(K, Tm - dT))/(2*dT)
cK = (C(K + dK, Tm) - C(K - dK, Tm))/(2*dK)
cKK = (C(K + dK, Tm) - 2*C(K, Tm) + C(K - dK, Tm))/dK**2
loc = np.sqrt(2*(cT + q*C(K, Tm) + K*(r - q)*cK)/(K**2*cKK))
print("Dupire 局部波动率 K=%d: %.4f, 理论 sigma*K^(alpha-1) = %.4f" % (K, loc, sig_cev*K**(alpha - 1)))
输出:
CEV(alpha=0.5) K 公式 MC 隐含波动率
80 21.767 21.800 26.43%
90 13.794 13.837 25.67%
100 7.685 7.727 25.01%
110 3.708 3.731 24.42%
120 1.538 1.547 23.89%
Merton K 公式 MC 隐含波动率
80 21.545 21.571 24.25%
90 13.209 13.231 22.81%
100 6.793 6.806 21.76%
110 2.853 2.862 21.07%
120 0.982 0.986 20.65%
VG 远期检验: E[S_T]=101.503, 理论 101.511
VG 隐含波动率: ['K=80: 26.74%', 'K=90: 23.39%', 'K=100: 20.03%', 'K=110: 17.66%', 'K=120: 18.19%']
Hull-White: 平均方差均值 0.0400 (即 20.00% 波动率)
K= 70 随机波动率价 30.7561 BSM(平均波动率) 30.7488 隐含波动率 20.86%
K=100 随机波动率价 6.2644 BSM(平均波动率) 6.3068 隐含波动率 19.84%
K=130 随机波动率价 0.2771 BSM(平均波动率) 0.2561 隐含波动率 20.30%
Dupire 局部波动率 K=85: 0.2712, 理论 sigma*K^(alpha-1) = 0.2712
Dupire 局部波动率 K=100: 0.2500, 理论 sigma*K^(alpha-1) = 0.2500
Dupire 局部波动率 K=115: 0.2331, 理论 sigma*K^(alpha-1) = 0.2331
读输出时注意:
- CEV(\(\alpha=0.5\)):公式与蒙特卡洛相差约 0.03,主要来自 Euler 离散的偏差(250 步)。隐含波动率从 26.4% 平滑下降到 23.9%,偏斜温和。
- Merton(每年平均 1 次跳跃,平均跳幅 −8%):公式与 100 万次模拟一致到小数点后两位;偏斜比 CEV 陡(24.3% → 20.7%),而且在右侧趋于平坦,这是负跳跃主要加厚左尾的结果。
- VG(\(\theta=-0.15\)):模拟的 \(E[S_T]\) 与远期一致,说明 \(\omega\) 修正项正确。微笑左侧陡、右侧在 \(K=120\) 又回升,呈不对称的 U 形("微笑 + 偏斜")。
- Hull–White:平均方差均值精确为 0.04。平值期权的随机波动率价格 6.264 低于 BSM 价格 6.307,两翼高于 BSM,隐含波动率 20.86%、19.84%、20.30% 形成微笑,与理论一致。
- Dupire:从 CEV 价格曲面恢复的局部波动率与理论值 \(\sigma K^{\alpha-1}\) 完全一致。真实市场数据没有这么干净,必须先平滑。
实战提示:校准这些模型时,目标函数用隐含波动率误差(按 vega 加权的价格误差)比直接用价格误差稳健,否则深度实值期权的价格误差会主导拟合。跳跃模型的参数(\(\lambda,k,s\))之间高度相关,常常可识别性很差,最好固定其中一个或加正则化。
本章小结
为了拟合波动率微笑,发展出了多种模型。CEV 模型让波动率随价格变化,\(\alpha<1\) 时产生股票型偏斜,欧式期权有非中心卡方解析式;Merton 跳跃扩散在扩散上加 Poisson 跳跃,价格是 BSM 价格的 Poisson 加权和,左右尾都更厚,适合货币期权,跳幅为负时产生偏斜;方差–伽马是纯跳跃模型,以伽马过程为"经济时间",用 \(v,\sigma,\theta\) 三个参数刻画峰度、波动和偏度。随机波动率模型中,若波动率与价格不相关,期权价格是 BSM 价格对平均方差分布的积分,BSM 高估平值、低估两翼;负相关产生股票型偏斜,Heston 模型有半解析解。局部波动率模型由 Dupire 公式从期权价格曲面直接得出 \(\sigma(S,t)\),能精确拟合全部欧式期权,因此单时点支付的产品定价正确;但它不保证多时点联合分布正确,障碍期权等可能误差很大,这是模型风险的核心来源。
| 模型 | 风险中性过程/关键公式 | 产生的微笑 |
|---|---|---|
| 确定性时变波动率 | BSM 中用平均方差 \(\frac1T\int\sigma^2(t)dt\) | 无微笑,只有期限结构 |
| CEV | \(dS=(r-q)Sdt+\sigma S^\alpha dz\),非中心卡方解 | \(\alpha<1\) 向下偏斜;\(\alpha>1\) 向上 |
| Merton 跳跃扩散 | \(\frac{dS}{S}=(r-q-\lambda k)dt+\sigma dz+dp\);\(\sum\frac{e^{-\lambda'T}(\lambda'T)^n}{n!}f_n\) | 两侧厚尾;负跳幅则偏斜;短期更陡 |
| 方差–伽马 | \(\ln S_T\mid g\sim N(\ln S_0+(r-q)T+\omega+\theta g,\ \sigma^2g)\) | U 形,可不对称;短期明显 |
| Hull–White 随机波动率 | 不相关时 \(c=\int c_{BS}(\bar V)g(\bar V)d\bar V\) | 对称微笑;负相关则偏斜 |
| 局部波动率(Dupire) | \(\sigma^2(K,T)=2\frac{c_T+qc+K(r-q)c_K}{K^2c_{KK}}\) | 精确拟合任意曲面 |
练习
基础
-
某期权 1 年期,前 3 个月波动率 15%,中间 6 个月 25%,最后 3 个月 20%。BSM 中应使用什么波动率? 提示:\(\sqrt{0.25\times0.15^2+0.5\times0.25^2+0.25\times0.2^2}=21.7\%\)(原书习题 27.4 类型)。
-
验证 CEV 模型的期权价格满足看涨看跌平价(原书习题 27.1)。 提示:用 \(\chi^2(z;k,v)\) 的性质 \(1-\chi^2(c;b,a)\) 与 \(\chi^2(a;b+2,c)\) 的组合,把 \(c-p\) 化简为 \(S_0e^{-qT}-Ke^{-rT}\);也可以直接用本章代码的数值验证。
-
在 Merton 模型中,若每次跳跃都使价格跌到 0(\(k=-1\)),说明期权价格等于把无风险利率换成 \(r+\lambda\) 的 BSM 价格(原书习题 27.5)。 提示:\(\lambda'=0\),只有 \(n=0\) 一项,\(f_0\) 中利率为 \(r-\lambda k=r+\lambda\)。直观上,价格要额外补偿违约概率。
-
为什么局部波动率模型对全或无期权定价正确,对障碍期权却未必? 提示:前者只依赖 \(S_T\) 的边缘分布;后者依赖整条路径(原书习题 27.8、27.9)。
-
方差–伽马模型中,若 \(v\to0\),模型退化成什么? 提示:伽马过程的方差趋于 0,\(g\to T\),\(\ln S_T\) 正态,\(\omega\to-(\theta+\sigma^2/2)T\),当 \(\theta=0\) 时退化为 BSM(原书习题 27.11)。
进阶
-
证明时变 \(r(t)\) 和 \(\sigma(t)\) 下 \(\ln S_T\sim\phi[\ln S_0+(\bar r-\bar V/2)T,\ \bar VT]\),其中 \(\bar r,\bar V\) 分别为平均利率和平均方差(原书习题 27.6)。 提示:对 \(d\ln S=(r(t)-\sigma(t)^2/2)dt+\sigma(t)dz\) 积分,\(\int\sigma dz\) 是均值 0、方差 \(\int\sigma^2dt\) 的正态变量。
-
用本章代码的
merton_call、cev_call和 VG 模拟,校准三个模型使平值价格都与 20% 波动率的 BSM 价格相同,比较三者的波动率微笑(原书习题 27.22)。 提示:固定其他参数,用brentq调整 \(\sigma\) 使平值价格匹配。CEV 产生最平缓的偏斜,跳跃模型在短期最陡。 -
在本章 Hull–White 模拟中加入价格与方差的相关(\(\rho=-0.6\)),观察隐含波动率形状的变化。此时 Hull–White 积分公式还成立吗? 提示:不成立,因为条件于方差路径时 \(\ln S_T\) 的均值也被改变;需要直接模拟价格。结果会出现向下偏斜。
-
用 Dupire 公式的代码,对一个加入了噪声(价格加 \(\pm0.01\) 均匀噪声)的 CEV 价格曲面估计局部波动率,观察误差,并尝试先在隐含波动率空间做二次多项式平滑再求导。 提示:二阶差分对噪声极敏感:\(\Delta K=0.5\) 时噪声在 \(c_{KK}\) 中的量级可达 \(4\times0.01/0.25=0.16\),而 \(c_{KK}\) 本身(约等于风险中性密度)只有 0.02 左右,分母可能为负或接近 0;平滑后才可用。
-
解释为什么"BSM 对平值期权高估、对深度虚值期权低估"会导致在随机波动率世界中卖出平值跨式、买入虚值宽跨式的策略在 BSM 定价下"看起来"有利可图。这真的是套利吗? 提示:不是。差异来自 BSM 的错误假设;按正确模型这些期权的价格是公平的,策略只是承担了波动率的波动风险。
原书推荐习题:27.6(时变参数下的分布);27.16(Hull–White 随机波动率定价的离散版);27.22(同一平值价格下不同模型的微笑对比,建议编程复现);27.2(Merton 跳跃扩散定价);27.20(用微笑给牛市价差定价,说明奇异期权"正确波动率"可能违反直觉);27.7(写出随机波动率模型的模拟方程)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 章首导言 | Chapter 27 introduction | p.647 |
| 27.1 替代模型 | 27.1 Alternatives to Black–Scholes–Merton(CEV、Merton 跳跃扩散、VG,表 27.1,图 27.1) | p.648–653 |
| 27.2 随机波动率 | 27.2 Stochastic Volatility Models | p.653–655 |
| 27.3 局部波动率 | 27.3 The IVF Model | p.655–656 |
| 小结与习题 | Summary, Practice Questions 27.1–27.23 | p.673–677 |
数值方法(可转债、路径依赖树、障碍期权数值方法、两相关资产的树、蒙特卡洛与美式期权)见第 27b 章。延伸阅读:Cox & Ross (1976);Merton (1976);Madan, Carr & Chang (1998);Heston (1993);Hull & White (1987);Dupire (1994);Derman & Kani (1994);Andersen & Brotherton-Ratcliffe (1997);Duan (1995);Hull & Suo (2002);Rebonato (2004)。