第十三章:机器学习在曲面套利中的应用

说实话,做期权曲面套利做到一定程度,你会发现一个尴尬的事实——传统统计套利模型越来越难赚钱了。为什么?因为市场在进化,做市商和量化机构都在用更复杂的工具。这时候,机器学习就派上用场了。

我个人习惯把机器学习在曲面套利中的应用分成三个层次:预测曲面变动、识别套利信号、优化执行策略。这一章,我们重点聊前两个。

13.1 为什么要用机器学习预测曲面变动?

先问一个问题:曲面套利的本质是什么?

说白了,就是找到曲面上的定价错误,然后赌它回归。但这里有个坑——曲面本身是动态的。你今天看到的"错误",明天可能就变成"合理"了。

我在项目中遇到过这样的情况:一个明显的蝶式套利机会,按传统统计模型算出来有3个sigma的偏离。结果我进场之后,曲面继续往不利方向跑,最后止损出局。后来复盘发现,是因为没有把曲面变动的趋势考虑进去。

所以,预测曲面变动,本质上是在回答一个问题:当前这个定价偏差,是会收敛,还是会扩大?

核心观点:机器学习不是用来替代传统套利模型的,而是用来给传统模型加一个"方向过滤器"。只有预测曲面会向有利方向变动时,才进场。

13.2 LSTM:捕捉曲面时序依赖

LSTM(长短期记忆网络)这东西,说白了就是专门处理时间序列的。曲面数据天然就是时序数据——今天的曲面和昨天的曲面有很强的依赖关系。

我建议这样设计LSTM的输入:

  • 输入特征:过去N天的曲面切片(比如ATM波动率、偏度、峰度)
  • 目标变量:未来K天的曲面变动方向(涨/跌/平)
  • 时间窗口:我个人习惯用20天(约一个交易月)

代码示例(简化版):

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

# 假设曲面数据 shape: (样本数, 时间步长, 特征数)
# 特征:ATM波动率、25delta偏度、10delta偏度、期限结构斜率
X_train = np.random.randn(1000, 20, 4)  
y_train = np.random.randint(0, 3, 1000)  # 0:下跌, 1:持平, 2:上涨

model = Sequential([
    LSTM(64, return_sequences=True, input_shape=(20, 4)),
    Dropout(0.2),
    LSTM(32),
    Dropout(0.2),
    Dense(16, activation='relu'),
    Dense(3, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)

避坑指南:我曾经在LSTM上吃过亏——直接用原始波动率数据训练,结果模型过拟合严重。后来加了差分处理和归一化,效果才稳定下来。记住,曲面数据是非平稳的,一定要做预处理。

13.3 XGBoost:特征工程才是王道

LSTM虽然强大,但有个问题——可解释性差。你很难说清楚到底是哪个因子在驱动预测结果。这时候,XGBoost就派上用场了。

我个人习惯用XGBoost做两件事:

  1. 特征重要性分析:找出哪些曲面特征对预测最有帮助
  2. 分类预测:和LSTM做同样的任务,但提供可解释性

特征工程这块,我建议至少包含以下几类:

特征类别 具体特征 说明
水平因子 ATM波动率、VVIX 反映整体波动水平
偏度因子 25delta skew、10delta skew 反映尾部风险定价
曲度因子 蝶式价差、铁鹰价差 反映凸性定价
期限结构 近远月价差、期限结构斜率 反映时间溢价
动量特征 过去N日变动率、波动率变化 反映趋势

代码示例:

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# 假设特征矩阵 X 和标签 y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = xgb.XGBClassifier(
    n_estimators=200,
    max_depth=6,
    learning_rate=0.05,
    subsample=0.8,
    colsample_bytree=0.8
)

model.fit(X_train, y_train, 
          eval_set=[(X_test, y_test)],
          early_stopping_rounds=20,
          verbose=False)

# 特征重要性
importance = model.feature_importances_
for i, imp in enumerate(importance):
    print(f"特征{i}: {imp:.4f}")

实战经验:我在实盘中发现,偏度因子(尤其是25delta skew)的重要性往往排在前两位。这说明曲面套利中,尾部风险的定价偏差是最容易预测的。

13.4 特征重要性分析:到底什么在驱动曲面?

你想想看,如果不知道哪些特征重要,你就是在黑箱里做交易。特征重要性分析,说白了就是给模型做"体检"。

我常用的方法有三种:

  • 内置重要性:XGBoost自带的feature_importances_,基于分裂次数或信息增益
  • SHAP值:更精细的分析,能告诉你每个特征对单个预测的贡献
  • Permutation Importance:打乱某个特征,看模型性能下降多少

举个例子,用SHAP分析曲面特征:

import shap

# 创建解释器
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

# 可视化
shap.summary_plot(shap_values, X_test, feature_names=feature_names)

我在项目中用SHAP分析发现了一个有趣的现象:当市场处于低波动环境时,期限结构特征的重要性会上升;而在高波动环境下,偏度特征更重要。这说明曲面变动的驱动因子是动态变化的。

注意:特征重要性分析的结果不能直接用于交易决策。它只是告诉你"哪些特征对预测有帮助",而不是"哪些特征能赚钱"。我曾经犯过这个错误——根据特征重要性调整了交易策略,结果回测表现反而变差了。

13.5 模型集成策略:1+1 > 2

单一模型总有局限性。LSTM擅长捕捉时序依赖,XGBoost擅长处理特征交互。把它们结合起来,效果往往更好。

我常用的集成策略有三种:

  1. Stacking:用LSTM和XGBoost的输出作为元模型的输入
  2. Voting:多个模型投票决定最终预测
  3. Blending:按权重混合多个模型的预测结果

我个人最常用的是Blending,因为它简单且有效:

# LSTM预测概率
lstm_probs = lstm_model.predict(X_test_lstm)

# XGBoost预测概率
xgb_probs = xgb_model.predict_proba(X_test_xgb)

# 加权混合(权重根据验证集表现调整)
weights = [0.4, 0.6]  # LSTM权重0.4, XGBoost权重0.6
ensemble_probs = weights[0] * lstm_probs + weights[1] * xgb_probs

# 最终预测
final_pred = np.argmax(ensemble_probs, axis=1)

小技巧:权重不要固定,可以根据市场状态动态调整。比如在趋势明显的行情中,给LSTM更高权重;在震荡行情中,给XGBoost更高权重。我写了一个简单的状态识别器来做这件事,效果还不错。

13.6 知识体系总览

这一章的内容比较多,我画了一张图帮你理清思路:

机器学习在曲面套利中的应用 曲面数据输入 特征工程(水平/偏度/曲度/期限/动量) LSTM模型 时序依赖捕捉 XGBoost模型 特征交互与可解释性 特征重要性分析 SHAP/Permutation 模型集成(Stacking/Voting/Blending) 曲面变动预测 → 套利信号

这张图展示了从数据输入到最终预测的完整流程。核心思路是:先用特征工程提取有效信息,再用LSTM和XGBoost分别建模,最后通过集成策略融合结果。

13.7 实战中的注意事项

最后,分享几个我在实战中踩过的坑:

  • 过拟合是最大的敌人:曲面数据样本量有限,模型很容易记住噪声。我建议用滚动验证而不是随机划分,更贴近实盘场景。
  • 不要迷信模型精度:预测准确率80%听起来不错,但如果那20%的错误都发生在关键时刻,你的策略照样亏钱。
  • 模型更新频率要合理:我试过每天重新训练模型,结果过拟合严重。后来改成每周更新一次,效果反而更好。
  • 别忘了交易成本:机器学习模型给出的信号可能很频繁,但每次交易都有成本。一定要在回测中考虑滑点和手续费。

总结一下:机器学习在曲面套利中的应用,不是要取代传统模型,而是给传统模型加一个"预测层"。LSTM负责捕捉时序依赖,XGBoost负责特征交互和可解释性,集成策略负责融合优势。三者结合,才能构建出真正稳健的套利系统。

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