2. 价差分析与统计:价差序列的平稳性检验、均值回复特性、协整关系
做跨期套利,说白了就是在赌一件事——价差会回归。但你怎么知道它一定会回归?靠感觉?那不行。我们得用统计学这把尺子,量一量价差序列到底有没有“规矩”。
我个人习惯,拿到一组期货合约数据后,第一件事不是急着算收益,而是先做三件事:平稳性检验、均值回复特性分析、协整关系验证。这三步走完,心里才有底。
2.1 价差序列的平稳性检验
什么叫平稳?简单说,就是价差的均值、方差不会随着时间乱跑。你想想看,如果价差均值一直在漂移,那你还怎么套利?今天均值是10,明天变成20,后天又变成5,这没法玩。
我常用的方法是ADF检验(Augmented Dickey-Fuller Test)。它的原假设是“序列存在单位根,即非平稳”。如果p值小于0.05,我们就拒绝原假设,认为序列是平稳的。
嗯,这里要注意一点:ADF检验的滞后阶数选择很关键。选少了,自相关没消除;选多了,检验功效下降。我一般用AIC准则自动选阶,但也会手动验证一下。
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
# 假设价差序列 spread
result = adfuller(spread, autolag='AIC')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
if result[1] < 0.05:
print('价差序列平稳,可以继续分析')
else:
print('价差非平稳,需要差分或考虑协整')
我在项目中遇到过一种情况:ADF检验显示平稳,但实际交易中价差就是不回归。后来发现是结构突变导致的——比如交易所调整了保证金比例。所以,平稳性检验不是万能的,还得结合业务逻辑判断。
2.2 均值回复特性分析
平稳性检验通过后,我们就要看价差到底有多“爱回归”。这里我主要看两个指标:半衰期和回复速度。
半衰期,就是价差偏离均值后,回到均值一半所需的时间。半衰期越短,套利机会越多,但噪音也大;半衰期太长,你可能等不起。
怎么算半衰期?用一阶自回归模型:
import numpy as np
from sklearn.linear_model import LinearRegression
# 构建滞后变量
spread_lag = spread.shift(1).dropna()
spread_diff = spread.diff().dropna()
# 对齐数据
y = spread_diff.values
X = spread_lag.values.reshape(-1, 1)
# 回归
model = LinearRegression().fit(X, y)
theta = model.coef_[0]
# 计算半衰期
half_life = -np.log(2) / theta
print(f'半衰期: {half_life:.2f} 个周期')
除了半衰期,我还会看回复速度的稳定性。怎么判断?滚动计算半衰期,看它是不是稳定在一个区间内。如果半衰期忽大忽小,说明价差的统计特性不稳定,这时候要小心。
我曾经踩过一个坑:某品种的价差半衰期历史均值是10天,但有一段时间突然变成30天。我没及时调整参数,结果持仓两个月都没回归,最后止损出局。所以,动态监控半衰期很重要。
2.3 协整关系
如果价差序列本身不平稳,是不是就不能做套利了?不一定。两个非平稳的时间序列,如果它们的线性组合是平稳的,那它们就存在协整关系。说白了,就是两个变量虽然各自乱跑,但步调一致,差距稳定。
协整检验最常用的是Engle-Granger两步法:
- 第一步:用OLS回归两个合约的价格,得到残差
- 第二步:对残差做ADF检验,看是否平稳
import statsmodels.api as sm
# 假设近月合约 price_near,远月合约 price_far
X = sm.add_constant(price_near)
model = sm.OLS(price_far, X).fit()
residuals = model.resid
# 对残差做ADF检验
result = adfuller(residuals, autolag='AIC')
print(f'协整检验p值: {result[1]:.4f}')
if result[1] < 0.05:
print('存在协整关系,可以构建价差套利策略')
else:
print('不存在协整关系,不建议做跨期套利')
协整关系还有一个容易被忽略的点:协整系数的经济含义。比如,近月和远月合约的协整系数是0.95,意味着近月涨1%,远月平均涨0.95%。这个系数如果偏离1太多,你要想想为什么——是不是两个合约的基本面发生了变化?
2.4 知识体系总览
说了这么多,我画了一张图,帮你把这三块内容串起来。这样你心里就有个完整的框架了。
你看,这三块内容其实是层层递进的。平稳性检验是入门门槛,过了这关再看均值回复特性,最后用协整关系兜底。我建议你每次分析新品种时,都按这个流程走一遍,养成习惯。
好了,价差分析与统计这块就讲到这里。记住一句话:没有经过统计检验的价差策略,就是裸奔。下一节我们会聊如何把这些统计结论转化成具体的交易信号,到时候见。
公众号:蓝海资料掘金营,微信deep3321