统计套利的数学基础:均值回归、协整性、平稳性(ADF检验)

各位同学,欢迎来到统计套利的数学基础部分。

说实话,很多做量化交易的朋友,一听到「数学基础」四个字就头疼。我当年刚入行时也一样,觉得策略能赚钱就行,管它什么平稳不平稳。结果呢?实盘跑了一个月,回测曲线漂亮得像教科书,实盘却亏得我怀疑人生。后来我才明白——统计套利的根基,就扎在这三个概念上:均值回归、协整性、平稳性。

今天,我就带你把这三块硬骨头啃下来。放心,我会用最接地气的方式讲,代码也会手把手给你看。

1. 均值回归:统计套利的灵魂

什么叫均值回归?说白了就是:价格涨多了会跌,跌多了会涨,最终围绕一个均值来回摆动。

你想想看,如果两只高度相关的股票,比如茅台和五粮液,它们的价差突然拉得很大。这时候,市场情绪迟早会纠正这个偏差。价差会像被一根无形的橡皮筋拉回来。

我个人习惯把均值回归比作「遛狗」——狗(价格)会跑远,但绳子(均值)总会把它拽回来。绳子有多长、弹性多大,就是我们后面要算的东西。

核心要点: 均值回归不是预测价格方向,而是预测价差会回到均值。这是统计套利和趋势跟踪的本质区别。

2. 平稳性:你的数据「靠谱」吗?

平稳性,是统计套利的入场券。

一个时间序列如果是平稳的,意味着它的均值、方差、自协方差都不随时间变化。换句话说,它的统计性质是稳定的,我们可以用历史数据去推断未来。

我在项目中遇到过最坑的事:用非平稳数据做回测,结果跑出来年化收益50%,夏普比率3.0。我当时高兴坏了,结果一查——那序列是随机游走,根本不能用来做均值回归策略。嗯,这里要注意:非平稳数据会给你虚假的统计显著性。

怎么判断平稳性?最常用的就是ADF检验(Augmented Dickey-Fuller Test)

ADF检验实战代码

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller
import yfinance as yf

# 下载两只股票数据
tickers = ['600519.SS', '000858.SZ']  # 茅台和五粮液
data = yf.download(tickers, start='2020-01-01', end='2023-12-31')['Adj Close']

# 计算价差
spread = data['600519.SS'] - data['000858.SZ']

# ADF检验
result = adfuller(spread.dropna())
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('❌ 价差不平稳,需要差分或换标的')
我的小技巧: 不要只看p值。我习惯同时看ADF统计量和1%临界值。如果统计量比1%临界值还小,那基本稳了。如果只在5%或10%水平显著,我会多留个心眼——可能样本量不够,或者结构有变化。

3. 协整性:两只股票之间的「隐形纽带」

协整性,是统计套利最核心的概念。没有之一。

两只股票各自可能都是非平稳的(比如随机游走),但它们之间存在一个线性组合,这个组合是平稳的。这个线性组合,就是我们说的价差

我曾经犯过一个错误:用相关性去选配对。结果发现两只股票相关性高达0.95,但价差根本不回归。为什么?因为相关性只衡量线性关系的强度,而协整性衡量的是长期均衡关系。两码事。

Engle-Granger两步法

这是最经典的协整检验方法。我带你走一遍:

  1. 第一步: 用OLS回归估计协整系数。比如 y = α + βx + ε,残差ε就是价差。
  2. 第二步: 对残差做ADF检验,看是否平稳。
import statsmodels.api as sm

# 准备数据
y = data['600519.SS']
x = data['000858.SZ']
x = sm.add_constant(x)

# 第一步:OLS回归
model = sm.OLS(y, x).fit()
residuals = model.resid

# 第二步:对残差做ADF检验
result_resid = adfuller(residuals.dropna())
print(f'残差ADF p值: {result_resid[1]:.4f}')

if result_resid[1] < 0.05:
    print('✅ 两只股票存在协整关系')
    print(f'对冲比率 β = {model.params[1]:.4f}')
else:
    print('❌ 没有协整关系,换一对试试')
避坑指南: 我曾经用日线数据做协整检验,结果很漂亮。但换到小时线,协整关系就消失了。为什么?因为协整关系的时间尺度很重要。我建议:先用日线筛选,再用小时线验证。如果两个尺度都通过,那才靠谱。

4. 知识体系框架图

下面这张图,是我自己总结的统计套利数学基础框架。你看一遍,心里就有谱了。

统计套利数学基础框架 均值回归 平稳性 协整性 价差计算 回归阈值 ADF检验 单位根检验 Engle-Granger Johansen检验 核心逻辑 非平稳价格 → 协整组合 → 平稳价差 → 均值回归交易 ⚠ 实战要点 1. 多时间尺度验证协整关系 2. 警惕伪回归:非平稳数据+高相关性 ≠ 套利机会 3. 定期重新检验协整关系(建议每季度一次)

5. 实战中的常见坑

讲完理论,我跟你聊聊实战中我踩过的坑。这些经验,比书本上值钱多了。

常见问题 我的经历 解决方案
协整关系突然失效 2020年疫情时,我持有的配对价差偏离了5个标准差,我以为会回归,结果越走越远。亏了8%。 设置硬止损,价差超过3个标准差就平仓。不要迷信回归。
ADF检验结果不稳定 同样的数据,用不同滞后阶数,p值从0.01跳到0.15。我当时懵了。 用AIC或BIC自动选择滞后阶数,不要手动设。代码里加个循环。
样本内完美,样本外崩溃 回测3年数据,夏普2.5。实盘第一周就亏了5%。 做滚动窗口检验:每半年重新估计协整系数,看是否稳定。
我的习惯: 每次做协整检验,我都会把结果存下来,画成时间序列图。如果残差在某个时间段突然「放飞自我」,那说明结构变了。这时候,我会果断放弃这个配对,换新的。

6. 总结

好了,今天的内容就到这里。

均值回归是目标,平稳性是前提,协整性是桥梁。这三者缺一不可。我见过太多人,只看了相关性就冲进去,结果亏得底裤都不剩。记住:统计套利不是简单的「买低卖高」,而是建立在严谨的数学检验之上的。

代码我已经给你了,框架图也画好了。剩下的,就是你自己去跑数据、去验证、去踩坑。嗯,踩坑是好事,踩过了就记住了。

一句话总结: 非平稳的价格 → 协整组合 → 平稳的价差 → 均值回归交易。这就是统计套利的全部秘密。

公众号:蓝海数据掘金营,微信deep3321