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 均值回归特性:基差不会永远偏离

基差最迷人的特性就是均值回归。你想想看,如果基差一直很大,套利者就会进场,把基差推回正常水平。这就是套利的本质——赚的就是均值回归的钱。

我个人习惯用两种方法检验均值回归特性:

  1. 自相关函数(ACF)检验:如果基差序列的自相关系数衰减缓慢,说明有强趋势性,均值回归弱;如果快速衰减到零,说明均值回归强。
  2. 单位根检验(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 基差分析框架:一张图说清楚

说了这么多,我画了一张流程图,把基差分析的逻辑串起来。你照着这个框架走,基本不会漏掉关键步骤。

基差分析框架 第一步:数据获取 第二步:统计特征分析 均值/标准差 偏度/峰度 分布检验 异常值检测 第三步:季节性规律分析 月度均值统计 季节性因子 基本面验证 异常年份识别 第四步:均值回归特性检验 ADF单位根检验 自相关函数 半衰期计算 套利策略设计

这个框架我用了好多年,每次分析新品种都按这个流程走一遍。你可能会问,为什么要把季节性分析放在均值回归前面?因为季节性规律会影响均值回归的参数估计。如果你不剔除季节性成分,算出来的半衰期可能偏差很大。

实战建议:我个人习惯先做季节性调整,再用调整后的基差做均值回归分析。具体做法是用月度虚拟变量做回归,把季节性成分剥离出来。这样得到的均值回归参数更干净,套利信号也更可靠。

好了,基差分析的核心内容就这些。记住三句话:统计特征告诉你基差长什么样,季节性规律告诉你基差什么时候变,均值回归告诉你基差怎么变回来。这三者结合起来,你就能在期现套利中占据主动。

专注资料整理