第三章 统计套利入门:均值回归、协整关系、配对交易基础

说实话,我刚入行那会儿,对统计套利是有点敬畏的。

总觉得这东西太数学了,离实战很远。直到有一次,我在做商品期货的策略回测时,发现两个品种的价差走势特别有意思——它们就像被一根无形的绳子牵着,分开了总会拉回来。嗯,这就是我们今天要聊的核心:均值回归

3.1 均值回归:金融世界的万有引力

什么叫均值回归?说白了,就是一个价格序列,涨多了会跌,跌多了会涨。它不会永远偏离某个中心值。

你想想看,如果一只股票今天涨停,明天又涨停,后天呢?大概率要回调。这不是玄学,是统计规律。我个人的经验是,均值回归策略最适合震荡市,单边行情里用它会死得很惨。

核心假设:金融时间序列在长期内会围绕某个均值波动,偏离越大,回归的概率越高。

但这里有个坑——你怎么知道当前价格是“偏离”了?

我曾经犯过一个错误:拿过去一年的均值当基准,结果市场结构变了,均值也跟着漂移。后来我学乖了,用滚动窗口来计算动态均值。

3.2 协整关系:比相关性更靠谱

很多人以为,两个股票相关系数高就能做配对交易。错!

相关系数高,只能说明它们走势像,但万一哪天走散了,就再也回不来了。协整关系才是真正的“灵魂伴侣”——它要求两个序列的线性组合是平稳的。

我举个例子:

  • 相关性:你和你的影子,步调一致,但影子不会自己动。
  • 协整性:你和你的狗,虽然有时你走快它走慢,但绳子牵着,总会拉回来。

在量化里,我们常用Engle-Granger两步法来检验协整。第一步,用OLS回归估计协整系数;第二步,对残差做单位根检验(ADF检验)。

实战技巧:我建议先用相关性筛选一遍,再跑协整检验。别上来就全量跑,计算量太大,而且伪协整的概率会升高。

3.3 配对交易:从理论到代码

好了,理论说完了,咱们来点实在的。配对交易的流程其实就四步:

  1. 选对:找到协整关系稳定的品种对
  2. 建模:计算价差和回归系数
  3. 开仓:价差偏离到一定程度时入场
  4. 平仓:价差回归时出场,或者止损

下面是我个人习惯用的一个Python示例,用statsmodels库做协整检验:

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller

# 假设我们有两支股票的日收益率数据
# df['A'] 和 df['B'] 是价格序列

def cointegration_test(series1, series2):
    # 第一步:OLS回归
    series1 = sm.add_constant(series1)
    model = sm.OLS(series2, series1).fit()
    residuals = model.resid
    
    # 第二步:ADF检验残差平稳性
    adf_result = adfuller(residuals, maxlag=1)
    p_value = adf_result[1]
    
    return p_value, model.params[1]  # 返回p值和协整系数

# 使用示例
p_val, hedge_ratio = cointegration_test(df['A'], df['B'])
if p_val < 0.05:
    print(f"协整关系成立,对冲比率: {hedge_ratio:.2f}")
else:
    print("没有发现协整关系")

代码很简单,但要注意几点:

  • ADF检验的滞后阶数怎么选?我一般用AIC准则自动选。
  • 对冲比率不是一成不变的,建议定期重估。
  • 别只看p值,还要看残差的标准差,这决定了你的开仓阈值。

3.4 开仓与止损:别让利润变成亏损

有了协整关系,接下来就是怎么交易了。我常用的方法是Z-score

# 计算价差
spread = df['A'] - hedge_ratio * df['B']

# 计算Z-score
z_score = (spread - spread.rolling(window=60).mean()) / spread.rolling(window=60).std()

# 交易信号
entry_threshold = 2.0  # 开仓阈值
exit_threshold = 0.5   # 平仓阈值

# 当Z-score > 2时,做空价差(卖A买B)
# 当Z-score < -2时,做多价差(买A卖B)
# 当Z-score回到0.5以内时,平仓

避坑指南:我曾经把阈值设得太小(比如1.5),结果频繁交易,手续费吃掉了所有利润。后来我改成2.0,虽然交易次数少了,但每笔的胜率和盈亏比都上去了。

另外,止损怎么设?我个人的经验是:如果Z-score超过3.0还没回归,说明协整关系可能已经破裂了。这时候别犹豫,直接止损离场。

3.5 知识体系总览

下面这张图,是我自己整理的知识框架。你可以把它当成一张地图,随时回来看看:

统计套利知识体系 均值回归 协整关系 配对交易 滚动窗口 / 动态均值 Engle-Granger / ADF检验 Z-score / 阈值设定 避免均值漂移陷阱 伪协整 / 结构突变 止损 / 手续费控制 核心:找到稳定的协整关系,利用均值回归获利

3.6 写在最后

统计套利不是万能药。它最怕的就是趋势行情——如果两个品种一起涨,价差可能越拉越大,你的止损单会被反复打掉。

我个人的建议是:先用历史数据做一遍回测,看看最大回撤你能不能接受。别一上来就实盘,那是在给市场送钱。

嗯,今天就聊到这儿。记住一句话:协整是基础,均值回归是信仰,止损是底线

专注资料整理