Merton 跳跃扩散模型:给期权定价补上『崩盘』这一课
Black-Scholes 假设价格连续、收益正态,但真实市场会跳——一夜暴跌 10% 不是连续路径能画出来的。Merton 1976 在扩散上叠一个泊松跳跃过程,用解析级数解同时解释了肥尾、左偏和波动率微笑。固定种子 20260801 受控模拟:同样 20% 年化波动,跳跃扩散把日收益峰度从 0 拉到 140、偏度压到 -6.24,尾部整整长出一截。跳跃扩散的期权价格反解出真实市场那条『微笑曲线』——虚值看跌区隐含波动 28% 高于 ATM 的 26%,而纯 BS 是一条平线。四项对抗式检验全过:20 万路径蒙特卡洛收敛到解析解 11.74(互验无 bug)、关掉跳跃(λ→0)Merton 完美退化为 BS 基准 9.41、跳跃越密左尾保险越贵、泊松级数几项即收敛。核心教训:BS 少算的那 2.3 块钱期权费,正是市场为『崩盘可能性』收的保险费。
问题:Black-Scholes 为什么算不准崩盘保险?#
Black-Scholes(BS)是期权定价的地基,但它站在一个理想化的假设上:股价是连续的。在 BS 的世界里,价格像水流一样平滑移动,明天的价格离今天的价格不会太远,收益率严格服从正态分布。
现实不是这样。2020 年 3 月熔断、2015 年 A 股千股跌停、个股财报暴雷一夜 -20%——这些跳变(jump)在 BS 的连续路径里根本画不出来。一个连续扩散过程要走到 -20%,需要经过中间的每一个点;而现实的跳空是瞬间的、跳过中间价位的。
后果很具体:BS 会系统性低估虚值期权的价格,尤其是虚值看跌期权(防崩盘的保险)。因为 BS 认为”一个月内跌 30%“的概率几乎为零,于是给这种保险定了个白菜价。但市场知道崩盘会发生,愿意为这种保险付更高的钱——这就是**波动率微笑(volatility smile)**的由来:把不同行权价的市场期权价格反解成 BS 隐含波动率,会得到一条两端翘起的曲线,而不是 BS 理论预言的水平线。
Robert Merton 1976 年给出了一个优雅的补丁——跳跃扩散模型(jump-diffusion model):在原来的连续扩散上,叠加一个泊松跳跃过程。平时价格照常连续波动,但每隔一段时间(服从泊松分布),价格会瞬间跳一下,跳幅服从对数正态分布。
其中 是布朗运动(连续扩散), 是强度为 的泊松过程(跳跃到达), 是跳幅(), 是补偿项,保证漂移在风险中性下仍等于无风险利率。

图1 把两种模型的样本路径摆在一起。左边是纯几何布朗运动(GBM),价格连续蠕动,最大的单日变动也很温和;右边是跳跃扩散,大部分时间和左边看起来一样,但时不时会有一根断崖式的竖线——那就是跳跃。注意这些跳大多向下(因为我设了 ,崩盘偏向),这正是股票市场的真实特征:跌起来比涨起来更快更狠。
跳跃如何制造肥尾与左偏#
BS 假设收益正态,但真实收益是**尖峰厚尾(leptokurtic)**的:中间比正态更尖(大部分日子波动很小),两端比正态更肥(极端日子远比正态预测的频繁)。跳跃扩散能自然地生成这个特征。
我用固定种子模拟 4 万条路径、每条 252 个交易日,统计日对数收益的分布:

图2 左用对数纵轴画收益直方图——对数轴是看尾部的关键,线性轴会把尾部压成看不见的一条线。纯 GBM(蓝)的尾部干净利落地掉下去,跳跃扩散(红)的尾部则明显厚一截、拖得更远,尤其左侧(崩盘方向)。
图2 右是分位-分位图(QQ 风格):如果两个分布相同,点会落在 45° 对角线上。实际曲线在两端明显偏离对角线并向外弯——跳跃扩散的极端分位数远比 GBM 更极端。
数字最直接:同样的年化波动率下,纯 GBM 的峰度是 0(正态基准),跳跃扩散的峰度飙到 140.93,偏度是 -6.24。 这就是跳跃的贡献:它没有改变”平均波动多大”,但彻底改变了”极端事件多频繁、多偏向一侧”。这也是为什么只看年化波动率(标准差)会严重误判尾部风险——标准差对跳跃几乎无感,峰度和偏度才是崩盘风险的探测器。
解析级数解:把跳跃次数拆开来算#
Merton 最漂亮的贡献不只是模型,还有闭式解。他的洞察是:在给定”未来发生了 n 次跳跃”的条件下,跳跃扩散退化成一个参数调整过的 Black-Scholes。于是总价格就是对所有可能的跳跃次数 (服从泊松分布)加权求和:
其中每一项的等效波动率 (跳得越多,等效波动越大),等效利率 也随 调整,。
import numpy as np
from scipy.stats import norm
from math import exp, log, sqrt, factorial
def bs_call(S, K, r, sig, T):
if sig <= 0 or T <= 0:
return max(S - K * exp(-r * T), 0.0)
d1 = (log(S / K) + (r + 0.5 * sig**2) * T) / (sig * sqrt(T))
d2 = d1 - sig * sqrt(T)
return S * norm.cdf(d1) - K * exp(-r * T) * norm.cdf(d2)
def merton_call(S, K, r, sig, T, lam, mu_j, sigma_j, n_terms=60):
"""Merton 1976 跳跃扩散解析级数解。"""
k = exp(mu_j + 0.5 * sigma_j**2) - 1.0 # 期望相对跳幅
lam_p = lam * (1.0 + k)
price = 0.0
for n in range(n_terms):
r_n = r - lam * k + n * (mu_j + 0.5 * sigma_j**2) / T
sig_n = sqrt(sig**2 + n * sigma_j**2 / T)
w = exp(-lam_p * T) * (lam_p * T)**n / factorial(n)
price += w * bs_call(S, K, r_n, sig_n, T)
return price
# 参数:S0=100, K=100, r=3%, σ=20%, T=1, λ=1次/年, μ_J=-10%, σ_J=15%
price = merton_call(100, 100, 0.03, 0.20, 1.0, 1.0, -0.10, 0.15)
print(f"Merton ATM 看涨 = {price:.4f}") # 11.74
print(f"BS ATM 看涨 = {bs_call(100,100,0.03,0.20,1.0):.4f}") # 9.41pythonATM 看涨期权:Merton 定价 11.74,BS 定价 9.41——跳跃让期权贵了 2.32 块,约 25%。 这 2.32 块就是市场为”崩盘可能性”额外收的保险费。BS 看不见跳跃,于是把这笔钱漏算了。
波动率微笑:模型的试金石#
一个跳跃扩散模型是否抓住了真实市场,最直接的检验是:用它算出的期权价格,反解成 BS 隐含波动率,能不能画出一条微笑曲线?

图3 给出答案。灰色虚线是 BS 的世界——无论行权价多少,隐含波动率都等于扩散波动率 20%,是一条平线。而 Merton 价格反解出的隐含波动率(红色)是一条两端翘起的微笑:虚值看跌区(左侧,K/S < 1)的隐含波动率 28%,明显高于 ATM 的 26%,右侧虚值看涨区也翘起来。
蓝色曲线把跳跃波动 调大 1.8 倍——微笑更深、更陡。这印证了机制:跳跃的幅度和频率越大,市场对极端行权价的定价越贵,微笑就越翘。
这条微笑不是硬凑出来的,而是跳跃扩散内生产生的。这就是 Merton 模型的历史地位:它是第一个能从第一性原理解释波动率微笑的模型,也是后续所有随机波动率模型(Heston、SABR 等)的思想源头。
对抗式检验:我怀疑过的四件事#
一个能同时解释肥尾、左偏、微笑的模型,很容易让人产生”太完美了”的警惕。我对它做了四项对抗式检验,全部通过。

图4a:蒙特卡洛与解析解互验。 解析级数解和蒙特卡洛模拟是两条完全独立的计算路径,如果其中一个有 bug,两者不会重合。我用不同路径数跑蒙特卡洛定价 ATM 看涨,随着路径数增加,价格连同 95% 置信区间稳稳收敛到解析解 11.74(20 万路径时 11.71,落在误差带内)。两条独立路径重合,是”代码没写错”最强的证据。
图4b:关掉跳跃,Merton 必须退化为 BS。 这是模型的一致性红线。我把跳跃强度 从 3 逐步降到 0,Merton 价格平滑下降,当 时精确落在 BS 基准 9.41 上。如果 时 Merton 不等于 BS,说明补偿项或级数写错了。它精确退化,说明模型在极限情形下自洽。
图4c:跳跃越密,左尾保险越贵。 我扫描 从 0 到 3,看 ATM(K=100)和虚值看跌区(K=85)的隐含波动率如何变化。两者都随 上升,但虚值看跌区涨得更快、更高——跳跃越频繁,防崩盘保险越贵,微笑越翘。这与经济直觉完全一致:崩盘越可能,左尾保险越值钱。
图4d:泊松级数几项即收敛。 无穷级数在代码里必须截断,截多少项才够?我画出价格随截断项数的变化:当 不大时(这里 ),级数几项就收敛,前 5 项和前 25 项的差已小到看不见。这说明 60 项的截断远远够用,数值上是安全的。
三段式总结#
A. 实现细节#
- 模型设定:风险中性下的 Merton 跳跃扩散,、、扩散波动 、跳跃强度 次/年、跳幅对数正态 (崩盘偏向)、、 年。固定种子
20260801。 - 两条独立定价路径:(1) Merton 1976 解析级数解,按泊松权重对参数调整后的 BS 价格加权求和,截断 60 项;(2) 蒙特卡洛路径模拟,每步扩散项 + 泊松跳(一步内可多跳,跳幅方差随跳数线性放大),252 步离散。两者互验。
- 隐含波动率反解:对每个行权价的模型价格用二分法反解 BS 隐含波动率,误差容限 1e-6,得到波动率微笑曲线。
- 分布统计:4 万条路径的日对数收益汇总,计算峰度、偏度,与纯 GBM 对照。
B. 已知偏差#
- 跳跃参数是外生给定的:本文直接设定 ,没有从市场期权价格校准。真实应用中这些参数要从波动率曲面反推,校准本身是个不适定问题——扩散波动、跳跃频率、跳幅三者对期权价格的影响会互相纠缠,不同参数组合可能拟合出相近的曲面。
- 常数跳跃强度的局限:Merton 假设 恒定,但真实市场的跳跃是簇发的(危机期间跳跃扎堆,平静期几乎没有)。这需要 Hawkes 自激过程或状态切换来建模,本文的常数强度会低估危机期的尾部风险。
- 跳跃独立于扩散的假设:模型假设跳跃过程与扩散过程独立,但现实中跳跃常伴随波动率飙升(跳完之后波动加大)。这需要 Bates 模型(Heston 随机波动 + 跳跃)才能刻画,Merton 的常数扩散波动是简化。
- 风险中性 vs 真实测度:本文全程在风险中性测度下定价,跳跃风险的市场价格(jump risk premium)被吸收进补偿项。真实世界的跳跃频率和跳幅与风险中性下的可能差很多,这也是虚值看跌期权长期偏贵(保险溢价)的来源。
C. 结果解读#
- 跳跃是尾部风险的正确语言:图2 的峰度从 0 到 140 说明,在同样的波动率下,有没有跳跃是两个完全不同的风险世界。只用标准差/年化波动来衡量风险(如经典 VaR、夏普率)会系统性漏掉跳跃风险。任何涉及尾部的应用——组合保险、期权做市、极端风险对冲——都必须用跳跃扩散或更复杂的模型,用 BS/GBM 会低估崩盘概率一个数量级。
- 微笑是模型对不对的判决书:图3 说明,一个期权定价模型好不好,不看它能不能拟合 ATM 期权(那太容易了),而看它能不能内生地产生波动率微笑。BS 产生平线(错),Merton 产生微笑(对)。这是量化里一个通用的判据:模型必须在结构上产生市场观察到的定型化事实(stylized facts),而不是靠参数硬凑。
- 那 2.32 块钱的经济学含义:Merton 比 BS 贵的 2.32 块(ATM 看涨),本质是市场为”价格会跳”这件事收的费。做期权卖方(收取权利金)如果用 BS 定价,会系统性低估自己卖出的保险的真实成本,在崩盘来临时被跳跃扫仓。2018 年 2 月的 XIV(做空波动率 ETN)一夜归零,就是长期卖出尾部保险、用连续模型低估跳跃风险的经典教训。
- Merton 是承前启后的枢纽:它上接 BS( 时退化),下启所有带跳跃/随机波动的现代模型(Bates、Kou 双指数跳跃、Hawkes 跳跃)。理解 Merton,是理解”为什么真实期权市场长这样”的第一把钥匙。
- 适用边界:Merton 适合定价受跳跃主导的资产——个股(财报跳空)、加密货币(24 小时无熔断的剧烈跳变)、事件驱动标的。它对纯指数、大盘、低波动品种可能过度参数化(跳跃不明显时 BS 已够用)。用之前先看资产的收益峰度:峰度显著大于 3,才值得上跳跃模型。