ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

随机波动率模型与MCMC在指数期权波动率曲面拟合中的实践

随机波动率模型与MCMC在指数期权波动率曲面拟合中的实践 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^1dV_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, munp.log(1.5), sigma0.6) theta pm.InverseGamma(theta, alpha3, beta0.2) sigma_v pm.InverseGamma(sigma_v, alpha3, beta0.3) rho pm.Uniform(rho, lower-0.99, upper0.99) v0 pm.InverseGamma(v0, alpha3, beta0.15) obs_noise pm.HalfNormal(obs_noise, sigma0.02) # 将模型隐含波动率作为确定性节点 iv_model heston_iv_surface(kappa, theta, sigma_v, rho, v0, log_strike_grid, tau_grid) # 观测似然 iv_obs_data pm.Normal( iv_obs, muiv_model, sigmaobs_noise / np.sqrt(weights), observediv_obs ) trace pm.sample( draws2000, tune1500, chains4, target_accept0.95, initjitteradapt_diag, random_seed42 )采样参数有三个最容易影响质量的地方。target_accept建议设到0.9以上。Heston参数后验经常有厚尾和强相关性NUTS默认步长容易拒绝率过高提高target_accept能逼采样器走更细的步长。代价是采样时间增加但在期权校准这种离线场景下完全值得。初始化策略。直接给随机初始值NUTS可能半天找不到高密度区域。用jitteradapt_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这条路的价值是让估出来的参数和曲面都带上“可信度”这个标签而这恰恰是传统拟合方法给不了的东西。
返回列表