16. 波动率曲面与机器学习:用神经网络预测曲面形态

说实话,做波动率交易这么多年,我一直在想一个问题:曲面形态到底能不能预测?

传统方法当然有——参数化模型、主成分分析、时间序列。但说实话,这些方法都有个通病:它们假设曲面变化是线性的、低维的。可你想想看,真实市场里,曲面扭曲的方式千奇百怪。有时候是短端翘起来,有时候是尾部塌下去,有时候整个曲面都在旋转。

嗯,这时候就该机器学习上场了。

核心观点:神经网络不是要替代你对曲面的理解,而是帮你捕捉那些肉眼看不出来的非线性模式。

16.1 为什么传统方法不够用?

我刚开始做波动率交易那会儿,用的还是SVI参数化。每天收盘后,把曲面参数拟合出来,然后看参数的时间序列。说实话,这套方法在平稳市场里还行,但一到事件驱动行情,参数就开始乱跳。

举个例子:

  • 线性模型:假设曲面变化是几个主成分的线性组合。但实际中,曲面扭曲往往是高度非线性的。
  • 参数化模型:SVI、SSVI这些,参数少、解释性强。但参数之间高度相关,而且拟合不稳定。
  • 时间序列模型:VAR、状态空间模型,能捕捉时序依赖,但处理高维曲面时维度灾难严重。

说白了,传统方法是在用低维工具处理高维问题。而神经网络,天生就是干这个的。

16.2 神经网络能做什么?

我个人习惯把问题分成三类:

任务类型 输入 输出 典型应用
曲面预测 历史曲面序列 未来曲面 对冲、做市
曲面压缩 高维曲面 低维隐变量 因子模型、风险归因
异常检测 实时曲面 异常分数 风控、套利识别

我记得有一次,我在做VIX期货的做市策略。传统方法用PCA压缩曲面,然后做均值回归。但效果一直不理想。后来我换了个自编码器,把曲面压缩成8维隐变量,然后在这个隐空间里做交易信号。结果夏普比率直接翻了一倍。

为什么会这样?因为自编码器能学到非线性流形,而PCA只能找到线性子空间。

16.3 网络结构怎么选?

这里我直接给结论,都是我在项目里踩过坑后总结的:

我的建议:别一上来就用Transformer。对于曲面数据,时序卷积网络(TCN)往往比LSTM更稳定,训练更快,而且不会出现梯度消失。

具体来说,我常用的结构是这样的:

# 伪代码:曲面预测网络
class SurfacePredictor(nn.Module):
    def __init__(self):
        # 输入: (batch, T, K, M)  T个时间步,K个行权价,M个期限
        self.conv1 = Conv2D(64, kernel=3, dilation=1)
        self.conv2 = Conv2D(64, kernel=3, dilation=2)
        self.conv3 = Conv2D(64, kernel=3, dilation=4)
        # 空洞卷积,感受野指数级增长
        self.fc = Linear(64, K*M)
    
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.conv3(x)
        return self.fc(x)

注意这里用了空洞卷积。为什么?因为曲面数据既有时间维度,又有行权价和期限维度。空洞卷积能在不增加参数量的情况下,捕捉长距离依赖。

16.4 数据预处理:容易被忽视的坑

我曾经在数据预处理上栽过大跟头。当时用原始隐含波动率直接训练,结果模型预测出来的曲面全是负的。你想想看,隐含波动率怎么可能为负?

后来我总结了几条经验:

  • 标准化:每个期限-行权价组合单独做z-score。别全局标准化,因为不同位置的波动率量级差异很大。
  • 对数变换:对波动率取log,让分布更接近正态。我试过,训练收敛速度快了30%。
  • 缺失值处理:深度虚值和深度实值期权流动性差,数据经常缺失。我的做法是用张量补全,而不是简单的插值。

注意:千万别用线性插值补曲面!曲面是光滑的,但线性插值会引入锯齿。我建议用样条插值或者矩阵分解补全。

16.5 损失函数怎么设计?

这个问题我问过很多人,答案五花八门。我个人习惯用加权MSE

loss = mean( w * (y_pred - y_true)^2 )

# 权重w怎么设?
# 1. 按流动性加权:交易量大的期权权重高
# 2. 按期限加权:近月权重高,远月权重低
# 3. 按行权价加权:平值附近权重高

为什么这么设计?因为不是所有曲面点都同等重要。平值近月期权交易最活跃,预测误差对策略影响最大。深度虚值期权流动性差,预测错了也无所谓。

我记得有一次,一个实习生用均等权重训练,结果模型在平值附近误差很大,反而在深度虚值上拟合得很好。这明显是本末倒置。

16.6 实战案例:用LSTM预测VIX期货曲面

说个具体的例子。我曾经做过一个策略,用LSTM预测VIX期货曲面未来5分钟的形态。输入是过去60分钟的曲面序列,输出是未来5分钟的曲面。

数据长这样:

时间步 行权价1 行权价2 ... 行权价10
t-60 18.5 19.2 ... 25.1
t-59 18.6 19.3 ... 25.0
... ... ... ... ...
t 19.0 19.7 ... 24.8

训练的时候,我用了序列到序列(Seq2Seq)的结构。编码器把60个时间步压缩成一个上下文向量,解码器从这个向量生成未来曲面。

结果很有意思:模型对曲面整体水平的预测准确率很高,但对曲面斜率和曲率的预测误差较大。这说明什么?说明市场对波动率水平的记忆性很强,但对形态变化的预测更难。

16.7 知识体系总览

下面这张图是我自己整理的,把本章的核心逻辑串起来了:

神经网络预测曲面形态:知识体系 输入:历史曲面序列 数据预处理 神经网络结构 损失函数设计 输出:预测曲面 交易策略应用 • 标准化(z-score) • 对数变换 • 张量补全 • TCN / LSTM • 空洞卷积 • Seq2Seq • 加权MSE • 流动性加权 • 期限加权

16.8 几点忠告

最后,说几句掏心窝子的话:

  • 别迷信模型:神经网络再厉害,也预测不了黑天鹅。2020年3月的波动率暴涨,所有模型都失效了。
  • 可解释性很重要:我建议用SHAP值或者注意力机制来理解模型学到了什么。如果模型告诉你曲面要涨,你得知道是哪个期限、哪个行权价在驱动。
  • 回测要小心:曲面数据有很强的自相关性。用普通的时间序列交叉验证会过拟合。我习惯用滚动窗口回测,每次只往前推一个时间步。

一个小技巧:训练的时候,可以加入对抗样本。比如在输入数据里加一点噪声,让模型学会鲁棒性。我在实盘里试过,加了对抗训练后,模型的预测稳定性提高了不少。

好了,关于用神经网络预测曲面形态,我就说这么多。记住一句话:模型是工具,你对市场的理解才是核心。神经网络能帮你看到更多,但最终做决策的还是你自己。

公众号:蓝海资料掘金营,微信deep3321