☰
随机波动率模型与MCMC在指数期权波动率曲面拟合中的实践
2026/10/3 14:21:40 网站建设 项目流程

1. 波动率曲面拟合的痛点与改进思路

刚入行做指数期权量化那几年,我一直以为波动率曲面拟合就是把散点插值做得漂亮一点。直到在真实行情里连续吃了几个暗亏才明白,这件事根本没这么简单。指数期权的波动率曲面,是定价、对冲、风控、做市报价共用的一个“底层地图”,地图画错了,后面每个环节都会跟着跑偏。

我当时的典型困境是:用什么曲线去逼近不同行权价和不同期限的隐含波动率?用了样条,短端拟合得很好,长端却会甩尾;换了SVI,样本内误差很小,换到下一个交易日参数就剧烈跳动;试过直接把随机波动率模型拿来校准,又发现传统最小二乘经常陷在局部极值里,而且不同初值给出的参数组合差别大到不敢用。

所以后来我把工作重心转向了“随机波动率模型 + 马尔可夫链蒙特卡洛方法”的联合路线。这里随机波动率模型负责描述市场波动的动态规律,MCMC负责在参数空间里充分采样,给出参数的后验分布,而不是一个孤零零的点估计。整套方案对指数期权波动率曲面拟合的改进,不只是降低拟合残差,更关键的是让曲面在横截面上更平滑、在时间序列上更稳定,同时还能给出每个曲面点的不确定性边界。

这篇文章就把我在这个方向上的理解、实操流程和踩坑记录整理出来。适合两类人看:一类是刚接触期权量化、想搞懂波动率曲面背后机制的初学者;另一类是自己正在做模型校准、被参数稳定性问题折磨的从业者。

1.1 曲面上的信息与日常业务诉求

指数期权的波动率曲面一般用三个维度描述:行权价、剩余期限、隐含波动率。把同一期限下不同行权价的隐含波动率连成曲线,就是常说的波动率微笑或偏斜;把不同期限放在一起看,就是期限结构。

做交易的人看曲面,本质是在看市场情绪和风险偏好。近月平值附近的隐含波动率反映了短期对冲需求,远月曲面更多体现中期预期;左侧虚值认沽的隐含波动率抬升,往往对应避险需求上升,右侧虚值认购的隐含波动率则可能受追涨情绪影响。这些信息不是独立存在的,它们被市场参与者的交易行为编织在一起,曲面上任何一个区域的异常,都可能牵连到其他区域。

从业务需求来看,曲面至少承担四件事:第一,给新挂牌行权价的期权提供“无套利”报价基准;第二,为组合的Delta、Gamma、Vega等希腊字母提供连续可微的计算基础;第三,给奇异期权或场外结构定价提供输入;第四,作为风控模型压力测试的市场参数来源。所以“拟合得好”不只是统计意义上的误差小,还要在经济含义、套利约束、动态变化三个方面都站得住脚。

1.2 经典拟合方法为什么不够用

这里我不去否定传统方法,它们各有用途,但在指数期权这种流动性分布极度不均匀的标的上,短板很明显。

SVI类参数化方法的优势是横截面拟合能力强,几个参数就能描述一条微笑曲线。但问题在于这类方法本质上是静态参数化,每个交易日都要重新拟合,参数的时间序列往往剧烈跳动,不能保证前后两个交易日曲面形态的连贯性。如果你拿SVI参数去做对冲,会发现今天和明天的参数几乎“各说各话”,很难给出稳定的风险敞口判断。

核平滑、样条、径向基函数这一类非参数方法,优点是非常灵活,几乎可以贴合任何形态的曲面。缺点与优点同样突出:太灵活了,容易把非流动性合约的异常报价也当成真实信息吸收进来。深度虚值期权的买卖价差通常很大,做市商报价偶尔还会出现明显偏离,非参数方法会把这种噪声一起平滑进曲面,导致局部出现不合理凸起。

传统模型校准方法也存在类似问题。很多同行用Heston或SABR模型做最小二乘校准,目标函数通常写成“隐含波动率残差平方和”。实际操作中,这个优化问题的目标函数面在参数空间里非常不平整,存在大量局部极值。换一组初值,结果就跑到另一个局部区域。更麻烦的是,优化算法只给出一个最优参数组合,无法告诉你这个参数组合到底可不可信、曲面上哪些区域对参数最敏感。

我后来改变思路的原因很简单:我需要的不只是一个能拟合当前曲面的参数点,而是一套能描述“参数不确定性”的完整概率分布。这正是MCMC的强项。

2. 随机波动率模型与MCMC的搭配逻辑

随机波动率模型的核心理念,是把波动率本身看作一个随机的、连续变化的状态过程,而不是像BS模型那样假设波动率是常数,也不像局部波动率模型那样用确定函数去反推扩散系数。指数期权市场里观察到的波动率微笑、期限结构以及波动率自身聚集效应,随机波动率模型都能给出相对自然的解释。

MCMC方法则解决另一个问题:当我们只有一组有限、带噪声的期权报价数据时,如何从这些数据中推断出模型参数,并且量化推断的不确定性。传统优化算法在参数空间中寻找一个最优解,MCMC则是让一条马尔可夫链在参数空间中游走,最终留下的采样点近似服从后验分布。这个分布的中心代表参数的合理取值,分布宽度代表参数估计的精度。

把这两个工具结合起来,曲面拟合就不只是一个“画线”问题,而是一个“统计推断”问题。拟合结果的输出不是一条唯一的曲面,而是大量可能曲面组成的分布。从分布里取均值作为交易使用的曲面,取分位数作为压力测试边界,逻辑上要扎实得多。

2.1 Heston模型的基本设定

我核心使用的是Heston随机波动率模型。$S_t$是标的指数,$V_t$是瞬时方差过程,风险中性测度下的动态可以写成:

dS_t = r S_t dt + sqrt(V_t) S_t dW_t^1
dV_t = kappa (theta - V_t) dt + sigma_v sqrt(V_t) dW_t^2

其中两个布朗运动的相关系数为rho。kappa是均值回复速度,theta是长期平均方差,sigma_v是波动率的波动率,rho决定股票收益与波动率变化的相关性。这些参数各有明确的经济含义:rho通常为负,解释指数期权中“下跌时波动率上升”的现象;kappa越大,波动率向长期均值回复越快;theta就是长期方差的锚。

Heston模型存在半闭式解,可以通过特征函数和傅里叶反演计算欧式指数期权的价格。这在实际工程中是巨大的优势——不需要蒙特卡洛模拟来算期权价格,校准速度会快很多。当然,特征函数公式里涉及复数运算和积分截断,实现时需要注意数值稳定性,我在第三部分会详细说。

2.2 MCMC给校准带来的不只是“更准”

很多人第一次接触MCMC校准,第一个问题是:它比最小二乘更准吗?

我的回答往往是:它最大的价值不是让样本内拟合误差变小,而是让参数估计更加合理。期权市场里的观测数据噪声极强,用最小二乘硬解一个点估计,容易把噪声当作信号学进去,造成过拟合。MCMC通过先验分布给参数一个合理范围,又通过似然函数约束模型与数据的关系,两者一起作用,等效于给参数估计加了一层贝叶斯正则化。

举个例子。深度虚值期权的隐含波动率波动非常大,如果给它和近月平值一样的权重,校准结果会被牵着鼻子走。在MCMC框架里,我们可以为不同区域的期权配置不同的似然噪声,流动性差的合约给更大的噪声方差,相当于自动降权。这种处理方式比在优化目标函数里手动设权重更自然,不确定性被显式建模,而不是事后拍脑袋调权重。

另一个关键点是隐变量处理。Heston模型里的瞬时方差V_t并不能直接观测,传统校准只能把它当作参数v0来处理。MCMC的贝叶斯推断框架天然支持潜变量,可以在估计参数的同时推断V_t的后验分布。观测数据越丰富,对V_t的估计就越精确,参数估计也相应受益。

2.3 改进效果的具体落点

使用MCMC对随机波动率模型做校准,对指数期权波动率曲面拟合的改进主要体现在五个方面。

  • 增强了曲面稳定性。MCMC把所有可用的历史横截面数据以滚动方式纳入联合推断,参数后验均值不会因为某一天个别异常报价而大幅跳变。
  • 提供了不确定性度量。每个行权价、每个期限的拟合值都有后验区间,可以直观地看出哪些区域是数据支撑充分的“硬信息”,哪些区域完全靠模型外推。
  • 减少了过拟合。先验分布就像一根缰绳,防止参数跑到经济含义上荒谬的区域。
  • 保持了动态一致性。随机波动率模型天然给出不同日期之间参数和状态的转移关系,曲面不会今天一个形态、明天另一个截然不同的形态,更符合实际市场连续演化的特征。
  • 便于套利约束检查。从后验分布中抽取大量参数组合,对每个组合做无套利检验,能直观统计出当前曲面违反约束的概率,而不是只看单一拟合曲面的结果。

3. 落地流程:从期权数据到后验曲面

理论说完,接下来是工程细节。我用沪深300指数期权作为实践对象,但流程对其他指数期权同样适用。整个流程分成四步:数据预处理、模型与似然设定、MCMC采样、后处理生成曲面。

3.1 数据预处理与参数定义

期权原始数据不能直接扔给模型。必须先过滤掉三类典型异常。剩余期限太短的合约,临近到期时价格受交割机制影响大,隐含波动率经常异常跳动;买卖价差过宽的合约,报价参考性弱;深度虚值且成交量极低的合约,隐含波动率噪声巨大。

我的过滤规则大致是:剩余期限保留10天到1年之间;相对平值偏离即|K/S - 1|超过20%的合约剔除;当日成交量低于某个阈值的合约剔除;买卖价差中间价作为参考,同时把买卖价差宽度记录下来用作权重。实际操作中,这些阈值要看品种流动性灵活调整,不能一套参数用到底。

接下来做标准化。对每笔期权记录,计算执行价格与标的指数的对数偏离k = ln(K/S0),这一项代替直接使用行权价,能统一不同指数点位水平下的曲面横轴。把无风险利率r和中债国债收益率或SHIBOR挂钩,指数期权统一采用现金交割和欧式行权处理。如果标的指数包含分红预期,还需要在定价时把分红收益率提前隐含在远期价格中,否则近月曲面会出现系统性的水平偏移。

3.2 定价误差的似然构建

我采用的似然函数建立在隐含波动率残差上,而不是期权价格残差。原因是不同行权价期权的价格量级差异很大,直接比价格残差会让平值附近期权主导结果;而隐含波动率的量级相对统一,不同行权价可比性强。

对第i个观测样本,模型预测的隐含波动率记为sigma_mli(theta, k_i, tau_i),市场隐含波动率记为sigma_obs_i,残差为e_i = sigma_obs_i - sigma_mli。假设残差服从正态分布,但允许不同区域的观测噪声不同:

e_i ~ N(0, sigma_obs^2 / w_i)

这里w_i由买卖价差和成交量决定。价差越窄、成交越活跃的合约,隐含波动率报价越可信,w_i越大。sigma_obs是需要估计的参数,表示整体观测误差的基准水平。

指数期权曲面存在明显的异方差性:深度虚值期权残差方差远大于平值期权。我在实际项目中还测试过用Student-t分布替代正态分布作为似然,效果也相当不错。胖尾似然对异常报价的容忍度更高,不容易让个别离群点把后验分布拉偏。

3.3 MCMC采样实现与关键参数

MCMC的工程实现我选过PyMC,理由很简单:NUTS采样器对参数空间的自适应探索能力强,不需要手动调太多跳步参数。当然完整的Heston定价函数要嵌入PyTensor成本较高,实际操作时,可以先把Heston特征函数定价模块写成高效函数,再封装成PyTensor可调用的算子。下面是一个结构示意,具体算子实现因后端而异。

import pymc as pm import numpy as np with pm.Model() as heston_cal: # 先验设定 kappa = pm.Lognormal("kappa", mu=np.log(1.5), sigma=0.6) theta = pm.InverseGamma("theta", alpha=3, beta=0.2) sigma_v = pm.InverseGamma("sigma_v", alpha=3, beta=0.3) rho = pm.Uniform("rho", lower=-0.99, upper=0.99) v0 = pm.InverseGamma("v0", alpha=3, beta=0.15) obs_noise = pm.HalfNormal("obs_noise", sigma=0.02) # 将模型隐含波动率作为确定性节点 iv_model = heston_iv_surface(kappa, theta, sigma_v, rho, v0, log_strike_grid, tau_grid) # 观测似然 iv_obs_data = pm.Normal( "iv_obs", mu=iv_model, sigma=obs_noise / np.sqrt(weights), observed=iv_obs ) trace = pm.sample( draws=2000, tune=1500, chains=4, target_accept=0.95, init="jitter+adapt_diag", random_seed=42 )

采样参数有三个最容易影响质量的地方。

  • target_accept建议设到0.9以上。Heston参数后验经常有厚尾和强相关性,NUTS默认步长容易拒绝率过高,提高target_accept能逼采样器走更细的步长。代价是采样时间增加,但在期权校准这种离线场景下完全值得。
  • 初始化策略。直接给随机初始值,NUTS可能半天找不到高密度区域。用jitter+adapt_diag对变量做转换和自适应预设,能明显加快收敛。如果还是慢,可以先跑一遍短链MAP优化,把结果作为初始点。
  • 链数和样本量。我会至少跑4条链、每条2000至3000有效样本。原因是要算Gelman-Rubin诊断,少于4条链很难判断是否真正收敛。

3.4 曲面生成与无套利检查

MCMC采样完成后,trace里保存了大量参数组合。输出曲面时,我不用最大后验概率点,而是用后验均值。后验均值天然带有平滑效果,能显著减少单一参数点估计造成的局部抖动。

具体操作时,取后验参数样本,逐一计算k网格和tau网格上的模型隐含波动率,得到一张巨大的“后验预测曲面分布”。对每个网格点取5%、50%、95%分位数。50%分位数作为对外使用的曲面,5%和95%分位数作为不确定性区间。

无套利检查是必须做的一步。随机波动率模型本身不保证输出曲面处处符合无套利约束,尤其是外推区域。我在工程上做两类检查。第一类检查日历价差,固定行权价,要求total variance,也就是sigma^2(k,tau) * tau,随tau单调递增;第二类检查蝶式价差,固定期限,要求曲面在行权价方向满足凸性。对后验样本逐组检查,统计违反频率。违反频率较高的区域,在最终输出前要做局部修正或者降低该区域的可信度标注。

4. 常见问题与排查技巧实录

MCMC校准这条路我走了大半年,期间遇到不少问题。有些问题在资料里写过,有些是实际交易场景特有的。这里把几个最典型的案例和排查过程记录下来。

4.1 典型案例一:采样不收敛

最开始做Heston校准,我直接套用默认采样参数,结果Rhat统计量迟迟压不到1.01以下,链与链之间轨迹分离得厉害。

排查后发现主因是参数化方式问题。kappa、theta、sigma_v这些参数高度相关,而且部分参数存在尺度差异。直接在原参数空间采样,NUTS很难高效游走。后来我把参数改成非中心化参数化,先采样一个标准正态基元,再通过变换映射到原始参数,采样效率明显提升。另外,对theta取了log变换、对rho做了logit变换,把有界和无界变量全部映射到实数空间,进一步缓解了采样器在边界附近的困难。

此外,模型初值也很关键。可以在采样前先跑一次快速最小二乘校准,拿到一个比较合理的点,然后以该点为中心设置初始值。经验上,这能把采样时间缩短三分之一以上,收敛诊断也更让人放心。

4.2 典型案例二:后验分布出现严重厚尾

有一段时间我发现后验分布长尾特别严重,均值和中位数偏离明显。查数据发现,问题出在深度虚值期权上。有些合约流动性太差,隐含波动率报出离谱的数值,Student-t似然虽然比正态似然耐抗,但样本数量不足时,异常点依然会把尾部拉长。

解决思路是双管齐下。一是在数据预处理阶段增加更严格的流动性过滤,把买卖价差占隐含波动率比例过高的合约剔除;二是在似然里引入更稳健的误差模型,比如对残差做winsorize处理,或者采用不对称的残差分布,捕捉认购和认沽两边的不同噪声水平。

4.3 典型案例三:曲面上出现局部“脊”或“坑”

即使采样收敛,后验均值曲面偶尔也会在某个行权价附近出现不合逻辑的小凸起。我最早以为模型代码算错了,反复检查后确认不是数值问题。

真正的原因是数据本身导致的。某个行权价附近刚好有一大批成交记录,价格拥挤在一处,模型为了迎合这些高权重数据,被迫改变形态。这个现象在流动性高度集中在少数行权价的市场里非常典型。

解决办法是在似然权重里加入惩罚项,降低相邻行权价之间优化权重差异的冲击。具体做法是对权重矩阵做平滑,让高流动性合约不至于完全主导周围区域的形态。

4.4 排查速查表

现象可能原因处理建议
Rhat > 1.05参数化方式不合理、链数太少非中心化参数化、增加链数、提高target_accept
有效样本量过低后验厚尾、步长过小改用Student-t似然、增加采样轮数
曲面局部凸起高权重异常合约影响平滑权重、加强流动性过滤
参数后验边界堆积有界变量无合理变换对rho做logit变换、对kappa和theta做log变换
样本外误差大先验太弱或似然噪声过大收紧先验、调整观测噪声模型
不同交易日参数漂移明显只用单日截面、数据噪声强滚动联合多日数据建模

5. 我在实操中测试过的几点心得

一些具体经验,未必在教科书里出现,但直接影响效果。

5.1 参数先验怎么设

Heston模型的先验不是随便给一个宽范围就完事。kappa先验可以参考指数期权利率期限结构的平均回复速度,一般设在0.5到3之间;theta先验可以用近月平值隐含波动率平方作为初始锚。v0的先验尤其重要,它对短期曲面形态的影响巨大。我会用最近5个交易日的已实现方差作为经验初值,设成对数正态先验,均值落在历史观测区间内部。

sigma_v这个参数比较顽固,后验通常比较宽。为了不让方差过程变得太极端,我会给sigma_v一个偏小的先验。本质上这是在做正则化,避免模型为了解释个别短期异常波动,把“波动率的波动率”抬得过高。

5.2 样本怎么切,效果天差地别

如果只用某一天的截面数据做MCMC校准,参数后验仍然会很宽,尤其是长端参数。我的经验是采用滚动窗口:把最近5个到10个交易日的期权数据放在一起,当作一个联合数据集来校准。这样短期扰动被平均掉,参数估计稳定很多。

滚动窗口会引入一个问题——过期数据。可以对不同日期的数据做时间衰减权重,例如在似然权重w_i上乘一个exp(-lambda * 时间差)的衰减因子。lambda取0.02到0.05左右,效果比较理想。

5.3 与SVI、三次样条类方法的实际对比

我在同样数据上做过横向对比。

SVI对单个交易日的横截面拟合误差最小,但样本外表现不稳定,部分参数时间序列的日间变化幅度大。三次样条方法在数据密集区域拟合细腻,但在行权价两端外推时经常出现单调性崩塌,需要额外修正。Heston加MCMC的样本内误差通常比SVI略高一些,但样本外误差和跨日稳定性明显更好,后验区间还能直观标识哪些区域可信、哪些区域只是外推。

如果目标是做交易和风控,稳定性和可解释性比样本内误差更重要。这也是我愿意接受样本内误差略大的原因。

6. 还可以继续扩展的方向

随机波动率模型加MCMC这套框架,并不局限在静态曲面拟合。指数期权市场里还有几个方向值得继续深入。

6.1 把动态一致性推进到日内

现有框架用的是日频数据,把每个交易日当作一个截面样本。实际上日内数据包含更丰富的波动率动态信息。把日内高频期权报价和标的指数分钟线结合起来,在MCMC框架里对连续时间随机波动率模型做联合推断,理论上可以恢复更精细的方差路径后验。这个方向计算量很大,但很值得尝试。

6.2 多标的联合建模

沪深300、上证50、中证500等指数的期权存在很强的相关性,曲面之间并非完全独立。可以用多维随机波动率模型描述共同因子与特质因子,再用MCMC统一推断多个曲面。这样做的收益有两个:一是在某个品种数据不足时借用其他品种信息补齐;二是为跨品种相对价值交易提供更严谨的曲面差异分布。

6.3 与做市报价系统对接

后验分布产生的不只是曲面均值,还有每个报价点的置信区间。做市系统可以从置信区间推导最小报价宽度,流动性好的区域可以收窄,流动性差的区域自动放宽。把MCMC后验信息接入报价引擎,虽然在线推断成本还比较高,但离线预计算加定期更新的模式已经具备可行性。

最后再说一个我在实际使用中的体会:不要追求复杂的模型表达,工程上更看重参数是否可辨识、后验是否稳定、曲面是否无套利。MCMC这条路的价值,是让估出来的参数和曲面都带上“可信度”这个标签,而这恰恰是传统拟合方法给不了的东西。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询