第十七章:统计套利择时:协整检验与均值回归策略的实战

统计套利,说白了就是找「亲戚」。

两个品种,走势看着像,但偶尔会闹别扭走散了。这时候你进场,赌它们会重新和好。这就是均值回归策略的核心逻辑。

但问题来了——你怎么知道它们是真的「亲戚」,还是只是碰巧长得像?

嗯,这就是协整检验要干的事。

17.1 协整检验:别把巧合当缘分

我记得刚入行那会儿,看到螺纹钢和热卷走势几乎一模一样,兴奋得不行。心想这不就是捡钱吗?结果一跑协整检验,p值0.35,根本不显著。后来才明白,很多品种看着相关,其实没有长期稳定的均衡关系。

协整检验的核心思想很简单:

  • 相关性 ≠ 协整性。两个随机游走的序列,相关系数可能很高,但没有任何长期绑定关系。
  • 协整性 = 存在一个线性组合,使得组合序列是平稳的。说白了,就是它们之间的价差会回归均值。

我常用的方法是Engle-Granger两步法

  1. 先对两个序列做OLS回归,得到残差序列
  2. 对残差做ADF单位根检验,看是否平稳

实战经验:我个人习惯用Johansen检验替代EG两步法。为什么?因为EG两步法只能处理一对一的协整关系,而Johansen可以同时检验多个品种。我在做跨品种套利时,经常把螺纹、热卷、铁矿、焦炭放一起跑Johansen,看看哪些组合有稳定的协整关系。

# Python示例:Johansen协整检验
import statsmodels.tsa.vector_ar.vecm as vecm

# 假设price1, price2是两个价格序列
data = pd.DataFrame({'A': price1, 'B': price2})
result = vecm.coint_johansen(data, det_order=0, k_ar_diff=1)

# 查看迹统计量
print('迹统计量:', result.lr1)
print('临界值(95%):', result.cvt)

# 如果迹统计量 > 临界值,说明存在协整关系

避坑指南:我曾经吃过一次大亏——用日线数据跑协整检验,结果很漂亮,但换到小时线就不行了。后来才意识到,协整关系是有时间尺度的。你用什么频率交易,就用什么频率的数据做检验。别拿日线的结论去指导分钟级的交易。

17.2 均值回归策略:从检验到交易

协整检验通过了,接下来就是怎么用。

均值回归策略的框架其实不复杂:

步骤 操作 说明
1 计算价差 价差 = 品种A价格 - β × 品种B价格
2 标准化 Z-score = (当前价差 - 均值) / 标准差
3 设定阈值 通常 ±1.5 或 ±2 个标准差
4 开仓信号 Z-score 突破阈值时反向开仓
5 平仓信号 Z-score 回归到0附近时平仓

你想想看,这个逻辑其实很直观。价差偏离均值越远,回归的概率就越大。但这里有个坑——阈值设多少合适?

注意:阈值不是拍脑袋定的。我建议用滚动窗口动态计算均值和标准差。窗口大小我一般取20-60个周期,具体看品种的波动特性。太短的窗口容易过拟合,太长的窗口反应迟钝。

# 均值回归策略核心代码
def zscore_strategy(price_a, price_b, window=30, entry_z=2.0, exit_z=0.5):
    # 计算价差
    spread = price_a - price_b
    
    # 滚动均值和标准差
    mean = spread.rolling(window).mean()
    std = spread.rolling(window).std()
    
    # 计算Z-score
    z = (spread - mean) / std
    
    # 生成信号
    signals = pd.DataFrame(index=price_a.index)
    signals['position'] = 0
    
    # 开仓:Z-score上穿阈值时做空价差,下穿阈值时做多价差
    signals.loc[z > entry_z, 'position'] = -1
    signals.loc[z < -entry_z, 'position'] = 1
    
    # 平仓:Z-score回归到exit_z以内
    signals.loc[abs(z) < exit_z, 'position'] = 0
    
    return signals

17.3 实战中的几个关键细节

代码写起来简单,但实盘是另一回事。我踩过的坑,今天一次性说清楚。

17.3.1 协整关系的稳定性

协整关系不是一成不变的。我见过一个组合,上半年协整检验p值0.01,下半年就变成0.3了。为什么?市场结构变了,或者品种的基本面逻辑变了。

我的做法是:定期重新检验。每周跑一次协整检验,如果发现关系失效,立刻停止交易。

17.3.2 交易成本的影响

均值回归策略通常交易频率较高,手续费和滑点会吃掉利润。我算过一笔账:

品种 单边手续费 滑点成本 总成本/次
螺纹钢 0.5跳 0.5跳 1跳
铁矿石 0.8跳 1跳 1.8跳
焦炭 1跳 1.5跳 2.5跳

你看,焦炭一次来回就是5跳的成本。如果你的策略平均盈利只有3跳,那就是亏钱的。所以阈值设置必须考虑成本。我一般会在理论阈值基础上加0.5-1个标准差,作为安全垫。

17.3.3 极端行情的处理

均值回归策略最怕什么?怕价差一去不回头。

我记得2016年双十一那晚,螺纹和热卷的价差瞬间拉大到6个标准差。按策略应该做空价差,但如果你真做了,后面几天价差继续扩大,直接爆仓。

怎么防?两个办法:

  • 设置止损:价差超过3个标准差时强制平仓,认错离场
  • 动态调整仓位:价差越大,仓位越小,避免在极端位置重仓

我的习惯:我会在策略中加入一个「熔断机制」。如果连续3笔交易都亏损,就暂停交易24小时。等市场冷静下来再说。有时候,不交易就是最好的交易。

17.4 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当成一个检查清单,做策略时对照着看。

统计套利择时:协整检验与均值回归策略 数据准备 协整检验 策略构建 价格序列对齐 频率统一(日/小时) 缺失值处理 EG两步法 / Johansen ADF单位根检验 p值 < 0.05 通过 价差计算 & Z-score 阈值设定(±1.5~2) 开平仓信号生成 风控与实盘注意事项 止损设置 动态仓位管理 协整关系定期重检 交易成本控制

这张图把整个流程分成了四步:数据准备 → 协整检验 → 策略构建 → 风控。每一步都有对应的子项,你可以对照着检查自己的策略有没有遗漏。

最后说一句,统计套利不是印钞机。它需要耐心,需要纪律,更需要你对市场保持敬畏。我见过太多人,协整检验跑出来一个漂亮的结果就冲进去,结果被市场教育得鼻青脸肿。

记住:策略是死的,市场是活的。永远给自己留一条退路。


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