5、统计套利基础:均值回归假设检验、平稳性检验(ADF)、协整关系检验(Engle-Granger)

做基差交易的朋友,一定听过「统计套利」这个词。说白了,统计套利就是找两个品种之间的「不正常关系」,赌它们会回归正常。但这里有个核心问题——你怎么知道它们的关系是「不正常」的?又怎么判断它们一定会回归?

嗯,这就引出了我们今天要聊的三个核心工具:均值回归假设检验、平稳性检验(ADF)、协整关系检验(Engle-Granger)。我个人习惯把这套流程叫做「统计套利的三板斧」,少了哪一斧,策略都可能翻车。

核心逻辑一句话:只有通过了平稳性检验,你才能谈均值回归;只有通过了协整检验,你才能做配对交易。顺序不能乱,一步错步步错。

统计套利基础:三阶段检验流程 阶段一 均值回归假设检验 阶段二 平稳性检验(ADF) 阶段三 协整关系检验(EG) 各阶段核心任务: ① 均值回归假设:观察价差序列是否围绕均值波动,是否存在回归倾向 ② ADF检验:判断序列是否平稳,避免「伪回归」陷阱 ③ Engle-Granger检验:确认两个品种是否存在长期均衡关系 只有三步都通过,才能放心做基差交易

5.1 均值回归假设检验——先别急着上模型

很多人一上来就搞ADF、搞协整,其实第一步应该先问自己一个问题:这个价差序列,看起来像不像会回归的样子?

我刚开始做基差交易时,犯过一个低级错误。当时看到螺纹钢和热卷的价差波动很大,觉得肯定有机会。结果跑完ADF发现是平稳的,但实盘一做就亏。为什么?因为那个价差虽然平稳,但回归速度极慢,半年才回一次均值,资金成本早就把利润吃光了。

所以,均值回归假设检验,说白了就是「肉眼+统计」双重验证。我个人习惯先画图,看看价差是不是围绕某个水平线上下波动。如果看起来像随机游走,那基本没戏。

常用的统计方法包括:

  • 自相关函数(ACF)图:如果ACF快速衰减到0,说明有均值回归倾向;如果衰减很慢,可能是随机游走。
  • 游程检验(Runs Test):检验序列是否随机。如果拒绝随机性假设,说明存在某种趋势或回归模式。
  • 方差比检验:比较不同时间尺度下的方差变化,判断是否存在均值回归。

我的小技巧:先画价差图,用肉眼扫一遍。如果价差在大部分时间都围绕0轴波动,偶尔偏离但很快回来,那大概率有均值回归特征。如果价差像喝醉了酒一样到处乱飘,那后面的检验基本不用做了。

5.2 平稳性检验(ADF)——别被「伪回归」骗了

平稳性检验,是统计套利的「守门员」。为什么这么说?因为如果你用非平稳序列做回归,结果全是假的——这就是著名的「伪回归」问题。

我记得有一次帮朋友看一个策略,他用两个股票的价格直接做回归,R²高达0.95,开心得不行。我问他:「你做过平稳性检验吗?」他愣住了。结果一测,两个序列都是非平稳的,那个0.95的R²纯粹是巧合。你想想看,这种策略实盘能赚钱才怪。

ADF检验(Augmented Dickey-Fuller Test)是最常用的平稳性检验方法。它的核心思想很简单:

  • 原假设H₀:序列存在单位根(非平稳)
  • 备择假设H₁:序列不存在单位根(平稳)

如果ADF统计量小于临界值(通常取1%、5%或10%显著性水平),就拒绝原假设,认为序列是平稳的。

具体操作时,我一般这样处理:

  1. 先对原始价差序列做ADF检验
  2. 如果p值大于0.05,说明非平稳,需要差分
  3. 对一阶差分后的序列再做ADF检验
  4. 如果一阶差分后平稳,说明序列是I(1)过程
# Python代码示例:ADF检验
from statsmodels.tsa.stattools import adfuller

# 假设spread是价差序列
result = adfuller(spread, autolag='AIC')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
print(f'临界值:')
for key, value in result[4].items():
    print(f'  {key}: {value:.4f}')

if result[1] < 0.05:
    print('结论:拒绝原假设,序列平稳')
else:
    print('结论:无法拒绝原假设,序列非平稳')

注意:ADF检验对滞后阶数的选择很敏感。我建议用AIC或BIC自动选择滞后阶数,不要手动指定。另外,如果序列有趋势项,记得在检验时加上「常数项+趋势项」选项,否则结果可能不准。

5.3 协整关系检验(Engle-Granger)——配对交易的核心

好,现在我们已经确认了价差是平稳的。但问题来了:如果我只做一个品种,价差平稳可以直接交易。但如果是两个品种的配对交易呢?比如螺纹钢和热卷,它们各自的绝对价格可能都是非平稳的,但它们的线性组合可能是平稳的——这就是协整。

协整关系检验,说白了就是回答一个问题:这两个品种之间,是否存在长期均衡关系?

Engle-Granger两步法是经典方法,步骤很简单:

  1. 第一步:用OLS回归估计两个序列的长期关系,得到残差序列
  2. 第二步:对残差序列做ADF检验,判断残差是否平稳

如果残差是平稳的,说明两个序列存在协整关系。这时候,你就可以放心地做配对交易了——当价差偏离均值时,做多被低估的、做空被高估的,等待价差回归。

# Python代码示例:Engle-Granger协整检验
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller

# 假设price1和price2是两个品种的价格序列
# 第一步:OLS回归
X = sm.add_constant(price2)
model = sm.OLS(price1, X).fit()
residuals = model.resid

# 第二步:对残差做ADF检验
result = adfuller(residuals, autolag='AIC')
print(f'残差ADF统计量: {result[0]:.4f}')
print(f'残差p值: {result[1]:.4f}')

if result[1] < 0.05:
    print('结论:残差平稳,存在协整关系')
else:
    print('结论:残差不平稳,不存在协整关系')

实战经验:我在做黑色系基差交易时,发现螺纹钢和热卷的协整关系非常稳定,但铁矿石和螺纹钢的协整关系就弱很多。为什么?因为铁矿石是原料,螺纹钢是成品,中间还有焦炭、电费等成本变量。所以,选配对品种时,尽量选产业链上位置相近的品种。

5.4 三个检验的实战顺序

很多新手会问:这三个检验到底先做哪个?我直接给答案:

步骤 检验内容 目的 如果失败怎么办
1 均值回归假设检验 初步判断价差是否有回归倾向 换品种或放弃该策略
2 ADF平稳性检验 确认序列是否平稳,避免伪回归 差分处理或换时间频率
3 Engle-Granger协整检验 确认配对品种的长期均衡关系 换配对组合或调整参数

我个人习惯的顺序是:先画图看均值回归,再跑ADF,最后做协整。每一步都像筛子,筛掉不合格的品种,留下的才是真正值得交易的。

避坑指南:我曾经在协整检验上吃过亏——用日线数据检验通过了,但换成小时线就不行。后来发现,协整关系在不同时间频率下可能不同。所以,建议你在目标交易频率下做检验。做日线交易就用日线数据检验,做小时线交易就用小时线数据检验。

好了,关于统计套利的基础检验,今天就聊到这里。记住一句话:检验做扎实了,策略才站得住脚。别嫌麻烦,这些步骤省了,亏的钱可不会省。

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