第三章 价差统计特征:均值回归、分布检验与平稳性

做跨期套利,说白了就是在赌价差会“回来”。

但你怎么知道它一定会回来?凭什么相信它不会一去不返?

这一章,我们就来拆解价差的底层统计特征。我个人习惯把这部分叫做“价差的体检报告”——你得先搞清楚它的脾气,才能跟它打交道。

3.1 均值回归特性:套利的底层信仰

跨期套利能赚钱,核心假设就是价差具有均值回归特性。

什么叫均值回归?简单说:价差偏离均值太远了,迟早会拽回来。就像橡皮筋,拉得越紧,弹回去的力道越大。

核心要点:

  • 均值回归是统计套利的基石
  • 没有均值回归,就没有套利机会
  • 回归速度决定了持仓周期

我在项目中遇到过一种情况:某个品种的价差看起来一直在均值附近晃悠,但突然有一天就崩了,再也不回来。后来复盘发现,是现货市场的基本面发生了根本变化。所以,均值回归不是永恒的,它只在特定市场环境下成立。

避坑指南:

我曾经以为所有价差都会回归均值,结果在2018年某化工品种上吃了大亏。后来我养成了一个习惯:每次做套利前,先问自己三个问题——

  1. 这个价差的均值是稳定的吗?
  2. 偏离多少算“过度偏离”?
  3. 回归需要多长时间?

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 知识体系总览

下面这张图,是我做价差分析时的完整流程。每次拿到一个新品种,我都会走一遍这个流程。

价差统计特征分析流程 获取价差数据 描述性统计 正态性检验 ADF平稳性检验 是否可套利? ✅ 执行套利 ❌ 放弃或调整 每一步都不可跳过,尤其是ADF检验

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