第十七章:统计套利择时:协整检验与均值回归策略的实战
统计套利,说白了就是找「亲戚」。
两个品种,走势看着像,但偶尔会闹别扭走散了。这时候你进场,赌它们会重新和好。这就是均值回归策略的核心逻辑。
但问题来了——你怎么知道它们是真的「亲戚」,还是只是碰巧长得像?
嗯,这就是协整检验要干的事。
17.1 协整检验:别把巧合当缘分
我记得刚入行那会儿,看到螺纹钢和热卷走势几乎一模一样,兴奋得不行。心想这不就是捡钱吗?结果一跑协整检验,p值0.35,根本不显著。后来才明白,很多品种看着相关,其实没有长期稳定的均衡关系。
协整检验的核心思想很简单:
- 相关性 ≠ 协整性。两个随机游走的序列,相关系数可能很高,但没有任何长期绑定关系。
- 协整性 = 存在一个线性组合,使得组合序列是平稳的。说白了,就是它们之间的价差会回归均值。
我常用的方法是Engle-Granger两步法:
- 先对两个序列做OLS回归,得到残差序列
- 对残差做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 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当成一个检查清单,做策略时对照着看。
这张图把整个流程分成了四步:数据准备 → 协整检验 → 策略构建 → 风控。每一步都有对应的子项,你可以对照着检查自己的策略有没有遗漏。
最后说一句,统计套利不是印钞机。它需要耐心,需要纪律,更需要你对市场保持敬畏。我见过太多人,协整检验跑出来一个漂亮的结果就冲进去,结果被市场教育得鼻青脸肿。
记住:策略是死的,市场是活的。永远给自己留一条退路。