18、基差与统计套利:基差的历史分位数、基差的均值回归特性、基差统计套利模型构建
基差交易做到最后,你会发现一个有意思的现象——价格涨跌有时候是随机的,但基差的波动往往有规律可循。说白了,基差这东西,天生就带着“均值回归”的基因。今天我们就聊聊怎么用统计的方法,把基差这个特性变成交易策略。
一、基差的历史分位数:给基差画个“温度计”
我个人习惯,拿到一个品种的基差数据,第一件事不是看绝对值,而是看它在历史中的位置。这就好比你看一个人发烧不发烧,不能光看体温计上的数字,得知道正常范围是多少。
历史分位数,就是告诉你当前基差处于过去一段时间内的什么水平。比如当前基差处于95%分位数,意味着历史上只有5%的时间比现在更高。
核心逻辑:
- 基差处于极端高位(>90%分位数)→ 做空基差(卖现货买期货)
- 基差处于极端低位(<10%分位数)→ 做多基差(买现货卖期货)
- 基差处于中间位置(30%-70%分位数)→ 观望或轻仓
我在项目中遇到过这样的情况:2021年螺纹钢的基差一度冲到历史98%分位数,很多交易员觉得还能继续涨,结果一周内基差就暴跌了300多点。嗯,这就是不看历史分位数的代价。
计算分位数其实很简单,用Python几行代码就能搞定:
import numpy as np
import pandas as pd
# 假设df是包含基差数据的DataFrame
df['basis'] = df['spot_price'] - df['futures_price']
# 计算当前基差在历史中的分位数
current_basis = df['basis'].iloc[-1]
percentile = (df['basis'] < current_basis).mean() * 100
print(f"当前基差处于历史 {percentile:.1f}% 分位数")
实战技巧:我建议至少用3-5年的历史数据来计算分位数。太短的数据容易受近期极端行情影响,太长的话又可能包含已经失效的市场结构。
三、基差的均值回归特性:为什么它总会回来?
你想想看,基差为什么会有均值回归的特性?原因其实不复杂:
- 交割机制:期货到期时,基差必须收敛到零附近。这是硬约束,谁也逃不掉。
- 套利力量:基差偏离太大时,套利者就会进场。买便宜的、卖贵的,把基差推回去。
- 供需平衡:现货和期货反映的是同一商品,长期看基本面会趋于一致。
我曾经犯过一个错误——在2018年做多豆粕基差,当时基差已经很低了,我觉得肯定要回归。结果因为中美贸易摩擦,基差在低位徘徊了整整三个月。后来我明白了:均值回归是趋势,但回归的时间可能远超你的持仓周期。
避坑指南:均值回归不等于“明天就回归”。我曾经在铜的基差交易上吃过亏,以为偏离20%就一定会回来,结果偏离到40%才回头。所以一定要设置止损,别跟市场较劲。
检验均值回归特性,可以用自相关函数(ACF)和单位根检验(ADF检验)。如果基差序列是平稳的,那它就具备均值回归特性。
from statsmodels.tsa.stattools import adfuller
# ADF检验判断基差是否平稳
result = adfuller(df['basis'].dropna())
if result[1] < 0.05:
print("基差序列平稳,具备均值回归特性")
else:
print("基差不平稳,需要差分处理")
三、基差统计套利模型构建:从想法到策略
好了,理论说完了,咱们来点实际的。怎么把基差的统计特性变成一个能赚钱的模型?
第一步:数据准备
你需要至少两个数据源:现货价格和期货价格。注意,现货价格要选有代表性的,比如螺纹钢就用上海地区的HRB400价格,铜就用长江有色现货价。
第二步:计算基差并标准化
直接拿基差绝对值做交易有个问题——不同品种的基差范围不一样。比如铜的基差可能只有几百块,而螺纹钢的基差可能上千。所以要做标准化处理:
# Z-score标准化
mean_basis = df['basis'].mean()
std_basis = df['basis'].std()
df['z_score'] = (df['basis'] - mean_basis) / std_basis
第三步:设定交易信号
我个人习惯用Z-score来触发交易:
- Z-score > 2.0 → 做空基差(卖现货、买期货)
- Z-score < -2.0 → 做多基差(买现货、卖期货)
- Z-score 回到 0.5 以内 → 平仓
注意:阈值不是固定的。波动大的品种(比如原油)可以把阈值设到2.5,波动小的品种(比如玉米)设到1.5就够了。我一般用滚动窗口来动态调整阈值。
第四步:风险控制
统计套利不是无风险套利。我曾经在2020年3月做多原油基差,结果WTI原油期货跌到负值,基差瞬间爆表。所以一定要加止损:
- 单笔最大亏损:总资金的1%
- 最大持仓时间:30个交易日
- 基差突破历史极值:立即平仓
下面我用一张图来展示整个模型的核心逻辑:
这个模型看起来简单,但实际跑起来有很多细节。我建议你先用历史数据做回测,至少跑个3年,看看夏普比率和最大回撤能不能接受。
个人经验:基差统计套利最适合流动性好的品种,比如铜、螺纹钢、豆粕。流动性差的品种(比如某些化工品)基差波动太随机,统计套利效果不好。
最后说一句:统计套利不是印钞机。它赚的是“大概率”的钱,但市场偶尔会给你一个“小概率”的教训。做好仓位管理,活下去比什么都重要。
公众号:蓝海资料掘金营,微信deep3321