4、基差分析:基差的统计特征、季节性规律与均值回归特性
基差这东西,说白了就是期货价格和现货价格之间的差值。很多人一上来就盯着K线看,其实基差才是期现套利的命门。我做了这么多年量化交易,可以负责任地告诉你——基差分析做得好,套利就成功了一半。
4.1 基差的统计特征:你得先摸清它的脾气
基差不是随机波动的,它有明显的统计规律。我个人习惯先把历史基差数据拉出来,算几个关键指标:均值、标准差、偏度和峰度。为什么要算这些?因为你要知道基差“正常”的时候长什么样,才能判断什么时候“不正常”。
核心统计指标:
- 均值(Mean):反映基差的长期中枢水平。比如沪深300股指期货的基差均值长期在-5到+5之间波动。
- 标准差(Std):衡量基差的波动幅度。标准差越大,套利空间越大,但风险也越高。
- 偏度(Skewness):判断基差分布是否对称。正偏意味着基差更容易出现大的正值,负偏则相反。
- 峰度(Kurtosis):看基差有没有“肥尾”特征。峰度大于3,说明极端行情比正态分布更频繁。
我在项目中遇到过一件事:有一次做螺纹钢的期现套利,基差突然拉大到历史极值。我赶紧查了一下统计特征,发现峰度高达5.8,明显是肥尾分布。嗯,这种情况不能按常规思路处理,得用极值理论来建模。
来看一段简单的Python代码,计算基差的统计特征:
import numpy as np
import pandas as pd
# 假设df包含基差数据,列名为'basis'
basis_data = df['basis'].dropna()
# 计算统计特征
mean_basis = np.mean(basis_data)
std_basis = np.std(basis_data)
skew_basis = basis_data.skew()
kurt_basis = basis_data.kurtosis()
print(f"基差均值: {mean_basis:.2f}")
print(f"基差标准差: {std_basis:.2f}")
print(f"基差偏度: {skew_basis:.2f}")
print(f"基差峰度: {kurt_basis:.2f}")
# 判断是否接近正态分布
if abs(skew_basis) < 0.5 and abs(kurt_basis - 3) < 1:
print("基差近似正态分布,可用常规统计方法")
else:
print("基差有显著非正态特征,建议用非参数方法")
我的经验:基差的统计特征会随着合约到期日变化。临近交割时,基差的标准差会急剧缩小,这叫“收敛效应”。你想想看,如果临近交割基差还很大,那套利机会就非常确定,但风险也小——因为套利空间会被迅速吃掉。
4.2 季节性规律:基差也有“生物钟”
基差不是一年四季都一个样。很多商品期货的基差有明显的季节性规律。为什么会这样?因为现货市场有供需周期,期货市场有交割制度,两者叠加就产生了季节性波动。
我建议你按月份统计基差的均值,画一张热力图。你会发现一些有意思的规律:
| 月份 | 沪深300基差均值 | 螺纹钢基差均值 | 原油基差均值 |
|---|---|---|---|
| 1月 | -2.3 | +15.2 | -1.8 |
| 2月 | -1.8 | +12.6 | -2.1 |
| 3月 | -0.5 | +8.3 | -0.9 |
| 4月 | +1.2 | +3.1 | +0.5 |
| 5月 | +2.8 | -2.4 | +1.2 |
| 6月 | +3.5 | -5.7 | +2.3 |
| 7月 | +2.1 | -8.9 | +1.8 |
| 8月 | +0.8 | -6.2 | +0.6 |
| 9月 | -1.3 | -1.5 | -0.7 |
| 10月 | -2.7 | +4.8 | -1.5 |
| 11月 | -3.1 | +10.3 | -2.4 |
| 12月 | -2.8 | +13.7 | -2.0 |
你看,螺纹钢的基差在冬季(11月-2月)明显偏正,夏季(6月-8月)偏负。这跟建筑行业的施工周期高度相关。冬天停工,现货需求弱,期货反而因为预期春季开工而走强,基差就拉大了。
避坑指南:我曾经在2019年6月看到螺纹钢基差达到-12,按季节性规律应该做多基差(买现货卖期货)。结果那年夏天环保限产政策突然收紧,现货价格暴涨,基差直接翻正。季节性规律不是万能钥匙,一定要结合基本面判断。
4.3 均值回归特性:基差不会永远偏离
基差最迷人的特性就是均值回归。你想想看,如果基差一直很大,套利者就会进场,把基差推回正常水平。这就是套利的本质——赚的就是均值回归的钱。
我个人习惯用两种方法检验均值回归特性:
- 自相关函数(ACF)检验:如果基差序列的自相关系数衰减缓慢,说明有强趋势性,均值回归弱;如果快速衰减到零,说明均值回归强。
- 单位根检验(ADF检验):如果ADF统计量显著小于临界值,说明基差是平稳序列,存在均值回归。
来看一段代码,检验基差的均值回归特性:
from statsmodels.tsa.stattools import adfuller, acf
import matplotlib.pyplot as plt
# ADF检验
adf_result = adfuller(basis_data)
print(f"ADF统计量: {adf_result[0]:.4f}")
print(f"p值: {adf_result[1]:.4f}")
print(f"临界值(1%): {adf_result[4]['1%']:.4f}")
if adf_result[0] < adf_result[4]['1%']:
print("基差序列平稳,存在均值回归特性")
else:
print("基差序列非平稳,均值回归特性不显著")
# 自相关函数
acf_values = acf(basis_data, nlags=20)
print("前10阶自相关系数:", acf_values[:10])
均值回归的速度也很关键。我一般用半衰期(Half-life)来衡量——就是基差偏离均值后,回到一半所需的时间。半衰期越短,套利机会越频繁,但利润空间也越小。
半衰期计算公式:
半衰期 = ln(2) / θ,其中θ是均值回归速度参数,可以通过OLS回归估计:
ΔBasis(t) = α + θ × Basis(t-1) + ε(t)
θ为负值,绝对值越大,回归速度越快。
我记得有一次做铁矿石的期现套利,算出来半衰期只有3天。这意味着基差偏离后,3天就能回归一半。这种品种适合做短线套利,持仓时间不能太长。而像国债期货,半衰期可能长达20天,那就得有点耐心了。
4.4 基差分析框架:一张图说清楚
说了这么多,我画了一张流程图,把基差分析的逻辑串起来。你照着这个框架走,基本不会漏掉关键步骤。
这个框架我用了好多年,每次分析新品种都按这个流程走一遍。你可能会问,为什么要把季节性分析放在均值回归前面?因为季节性规律会影响均值回归的参数估计。如果你不剔除季节性成分,算出来的半衰期可能偏差很大。
实战建议:我个人习惯先做季节性调整,再用调整后的基差做均值回归分析。具体做法是用月度虚拟变量做回归,把季节性成分剥离出来。这样得到的均值回归参数更干净,套利信号也更可靠。
好了,基差分析的核心内容就这些。记住三句话:统计特征告诉你基差长什么样,季节性规律告诉你基差什么时候变,均值回归告诉你基差怎么变回来。这三者结合起来,你就能在期现套利中占据主动。