14. 统计套利方法:基于统计模型的套利机会识别
统计套利,说白了就是让数据自己说话。我们不做主观判断,而是让模型告诉我们:现在这个价格,是不是「不正常」了?
我个人习惯把统计套利分成两类:一类是找共性,一类是找个性。PCA属于前者,均值回归属于后者。今天咱们就聊聊这两把刀怎么用。
14.1 PCA主成分分析:降维找共性
波动率曲面是个高维怪物。不同期限、不同行权价,几十个点摆在那。你一个个看,眼睛会瞎的。
PCA的核心思想很简单:大部分波动率变动,其实是由少数几个「隐藏因子」驱动的。
我在项目中遇到过这样的情况——明明整个曲面都在动,但单个点看起来没什么规律。用PCA一拆,发现第一个主成分解释了80%以上的方差。说白了,大家都在跟着大盘走。
- 第一主成分:整体波动率水平(市场情绪)
- 第二主成分:期限结构斜率(短期vs长期)
- 第三主成分:微笑曲率(虚值vs实值)
为什么会这样?因为期权定价的驱动因素就那么几个。你想想看,波动率曲面再怎么扭曲,也逃不出这三个维度的约束。
实战步骤
- 数据准备:取一段时间内,固定期限-行权价网格的隐含波动率数据
- 标准化:每个点减去均值,除以标准差。这一步不能省,不然量纲不同会出问题
- 跑PCA:计算协方差矩阵的特征值和特征向量
- 看载荷:每个主成分对应的特征向量,就是各点的「权重」
- 找残差:用前k个主成分重构曲面,残差就是套利机会
import numpy as np
from sklearn.decomposition import PCA
# 假设 iv_matrix 是 T x N 的矩阵,T为时间,N为曲面点数
# 每一行是一个时间点的曲面快照
iv_matrix = ... # 你的数据
# 标准化
mean = np.mean(iv_matrix, axis=0)
std = np.std(iv_matrix, axis=0)
iv_norm = (iv_matrix - mean) / std
# PCA
pca = PCA(n_components=3)
scores = pca.fit_transform(iv_norm) # 主成分得分
loadings = pca.components_ # 载荷矩阵
# 重构
reconstructed = scores @ loadings * std + mean
# 残差 = 实际值 - 重构值
residuals = iv_matrix - reconstructed
# 残差超过2倍标准差,视为异常
threshold = 2 * np.std(residuals, axis=0)
anomaly_mask = np.abs(residuals) > threshold
14.2 均值回归:赌它「回来」
均值回归是统计套利的老祖宗。它的信仰很简单:价格偏离均值太远,迟早会回来。
嗯,这里要注意——不是所有东西都会均值回归。趋势性资产就不行,比如股票价格。但波动率不一样,它天生就有均值回归的特性。你想想看,波动率能一直高到天上去吗?能一直低到地板上吗?不会的。
我记得有一次,VIX飙到40以上,所有人都说「这次不一样」。结果呢?两个月后回到20。波动率这东西,就像橡皮筋,拉得越狠,弹得越猛。
怎么判断「偏离」?
常用的工具就这几个:
| 指标 | 含义 | 阈值参考 |
|---|---|---|
| Z-score | (当前值 - 均值) / 标准差 | |Z| > 2 视为异常 |
| 布林带 | 均值 ± k * 标准差 | k=2 或 k=2.5 |
| 半衰期 | 偏离回归到一半所需时间 | 半衰期越短,套利越安全 |
我个人习惯用Z-score。简单、直观、好用。但有个坑——均值本身会漂移。你用过去一年的均值,跟用过去一个月的均值,结果可能完全相反。
均值回归策略框架
def mean_reversion_signal(iv_series, window=20, z_threshold=2):
"""
输入:iv_series - 某个曲面点的隐含波动率时间序列
输出:信号 - 1表示做空波动率,-1表示做多波动率
"""
rolling_mean = iv_series.rolling(window).mean()
rolling_std = iv_series.rolling(window).std()
z_score = (iv_series - rolling_mean) / rolling_std
signal = np.zeros_like(z_score)
signal[z_score > z_threshold] = -1 # 偏高,做空
signal[z_score < -z_threshold] = 1 # 偏低,做多
return signal, z_score
14.3 PCA + 均值回归:组合拳
单独用PCA,你只能发现「异常」,但不知道什么时候回归。单独用均值回归,你容易被均值漂移坑。
把两者结合起来,效果会好很多:
- 用PCA把曲面拆成主成分和残差
- 对残差做均值回归分析
- 当残差的Z-score超过阈值时,开仓
- 当残差回归到0附近时,平仓
这样做的好处是:你过滤掉了整体市场波动的影响,只盯着「异常」的部分。说白了,就是在大海里捞针,但你先用PCA把大海过滤成一个小池塘。
- PCA的窗口要足够长(至少6个月),才能稳定估计协方差结构
- 均值回归的窗口要短(1-3个月),捕捉短期偏离
- 开仓要分批,别一把梭。我一般分3次,每次间隔1天
- 止损要设,别死扛。残差超过3倍标准差还不回归,说明模型可能错了
14.4 知识体系总览
下面这张图,是我自己整理统计套利方法时画的框架。你看一眼,心里就有数了。
14.5 避坑指南
做统计套利这些年,我踩过的坑不少。挑几个典型的说说:
- 数据频率不匹配:用日线数据做PCA,用分钟线做交易。结果PCA的因子还没更新,交易信号已经变了。建议PCA和交易用同一频率。
- 过度优化:我曾经为了追求回测夏普比率,调了十几个参数。结果实盘一跑,直接崩了。记住:参数越少,模型越稳。
- 忽略交易成本:统计套利通常是高频、小利差。交易成本一扣,利润可能变负数。我一般会在回测里加2-3个tick的滑点。
- 市场结构突变:2020年3月那次,所有统计模型都失效了。因为波动率曲面的协方差结构彻底变了。遇到这种时候,别硬扛,先停手。
好了,统计套利的核心思路就这些。PCA帮你找到「哪里不对劲」,均值回归告诉你「什么时候动手」。两者结合,就是一套完整的套利系统。
记住:统计模型只是工具,不是真理。它给你信号,但最终决策还得靠你的判断。
公众号:蓝海资料掘金营,微信deep3321