第三章 价差统计特征:均值回归、分布检验与平稳性
做跨期套利,说白了就是在赌价差会“回来”。
但你怎么知道它一定会回来?凭什么相信它不会一去不返?
这一章,我们就来拆解价差的底层统计特征。我个人习惯把这部分叫做“价差的体检报告”——你得先搞清楚它的脾气,才能跟它打交道。
3.1 均值回归特性:套利的底层信仰
跨期套利能赚钱,核心假设就是价差具有均值回归特性。
什么叫均值回归?简单说:价差偏离均值太远了,迟早会拽回来。就像橡皮筋,拉得越紧,弹回去的力道越大。
核心要点:
- 均值回归是统计套利的基石
- 没有均值回归,就没有套利机会
- 回归速度决定了持仓周期
我在项目中遇到过一种情况:某个品种的价差看起来一直在均值附近晃悠,但突然有一天就崩了,再也不回来。后来复盘发现,是现货市场的基本面发生了根本变化。所以,均值回归不是永恒的,它只在特定市场环境下成立。
避坑指南:
我曾经以为所有价差都会回归均值,结果在2018年某化工品种上吃了大亏。后来我养成了一个习惯:每次做套利前,先问自己三个问题——
- 这个价差的均值是稳定的吗?
- 偏离多少算“过度偏离”?
- 回归需要多长时间?
3.2 价差分布:了解你的对手
价差的分布形态,决定了你的入场和出场策略。
你想想看,如果价差是正态分布,那用标准差做通道就很有道理。但如果它是个厚尾分布,那极端行情出现的概率就比正态分布高得多——这时候再用2倍标准差做止损,可能就太紧了。
3.2.1 描述性统计
拿到价差数据后,我第一件事就是算这几个指标:
| 统计量 | 含义 | 我的用法 |
|---|---|---|
| 均值 | 价差的中心位置 | 作为回归的锚点 |
| 标准差 | 价差的波动幅度 | 设定通道宽度 |
| 偏度 | 分布是否对称 | 判断多空不对称性 |
| 峰度 | 尾部厚度 | 评估极端风险 |
一个小技巧:
我习惯把价差分布画成直方图,叠加上正态分布曲线。一眼就能看出有没有“肥尾”。如果峰度大于3,我就知道这个品种的极端行情比想象中多,止损要放宽一些。
3.3 正态性检验:别被教科书骗了
很多教材告诉你价差应该服从正态分布。嗯,这话对了一半。
实际交易中,价差分布很少是完美的正态分布。尤其是高频数据,尖峰厚尾是常态。
常用的正态性检验方法:
- Jarque-Bera检验:基于偏度和峰度,我最常用
- Shapiro-Wilk检验:小样本更准确
- Kolmogorov-Smirnov检验:通用但功效较低
import numpy as np
from scipy import stats
# 假设spread是价差序列
spread = np.array([...])
# Jarque-Bera检验
jb_stat, jb_pvalue = stats.jarque_bera(spread)
print(f'JB统计量: {jb_stat:.4f}, p值: {jb_pvalue:.4f}')
# 如果p值小于0.05,拒绝正态性假设
if jb_pvalue < 0.05:
print('价差不服从正态分布,注意尾部风险')
else:
print('不能拒绝正态性假设')
注意:
正态性检验通不过,不代表不能做套利。它只是提醒你:用标准差做通道时,要留足安全边际。我一般会把通道从2倍标准差放宽到2.5倍,或者用分位数代替标准差。
3.4 平稳性检验(ADF):价差会不会漂走?
这是整个跨期套利里最重要的一步,没有之一。
平稳性检验,说白了就是检查价差有没有“趋势”。如果价差是非平稳的,它会越漂越远,均值回归就不成立了。
3.4.1 ADF检验的原理
ADF检验的原假设是:序列存在单位根(非平稳)。
如果p值小于0.05,就拒绝原假设,认为序列是平稳的。
from statsmodels.tsa.stattools import adfuller
# ADF检验
adf_result = adfuller(spread, autolag='AIC')
adf_stat = adf_result[0]
adf_pvalue = adf_result[1]
critical_values = adf_result[4]
print(f'ADF统计量: {adf_stat:.4f}')
print(f'p值: {adf_pvalue:.4f}')
print('临界值:')
for key, value in critical_values.items():
print(f' {key}: {value:.4f}')
if adf_pvalue < 0.05:
print('✅ 价差平稳,可以进行套利')
else:
print('❌ 价差非平稳,需要处理或放弃')
我的经验:
ADF检验的p值小于0.01,我才放心做套利。0.01到0.05之间,我会再观察一段时间。大于0.05?直接放弃,不纠结。
3.4.2 滞后阶数的选择
ADF检验需要选择滞后阶数。选少了,自相关没消除;选多了,检验功效下降。
我一般用AIC准则自动选择,代码里设置autolag='AIC'就行。但如果你发现结果不稳定,可以手动试试不同的阶数。
一个小坑:
我曾经遇到一个品种,日线数据ADF检验通过,但换成小时线就不通过了。后来发现是数据频率的问题。所以,我建议你在多个时间频率上都做一下检验,确保结论稳健。
3.5 知识体系总览
下面这张图,是我做价差分析时的完整流程。每次拿到一个新品种,我都会走一遍这个流程。
3.6 实战中的综合判断
检验结果不是非黑即白的。我见过很多新手,看到ADF的p值是0.051,就纠结要不要做。我的建议是:
- p值 < 0.01:放心大胆做
- 0.01 ≤ p值 < 0.05:可以做,但要控制仓位
- 0.05 ≤ p值 < 0.10:谨慎,最好再观察一段时间
- p值 ≥ 0.10:别碰,换品种
最后说一句:
统计检验只是工具,不是圣杯。我见过ADF检验完美通过,但实盘亏钱的案例。也见过ADF检验没通过,但通过差分处理后赚钱的案例。关键是你得理解背后的逻辑,而不是机械地执行代码。
我的习惯:
每次做完检验,我都会把结果截图保存。时间久了,就能总结出哪些品种的价差“性格好”,哪些“脾气差”。这种经验,是任何书本都给不了你的。
公众号:蓝海资料掘金营,微信deep3321