第七章 基差交易的数据分析:数据获取与清洗、基差序列的统计分析、基差回归模型、基差预测模型
做基差交易,说白了就是跟数据打交道。我见过太多人,策略逻辑想得天花乱坠,结果一上手数据全是坑。今天咱们就把这块硬骨头啃下来。
7.1 数据获取与清洗:别让脏数据毁了你的策略
数据是基差交易的命根子。我刚开始做这行时,吃过一次大亏——用了某数据商的日频数据,没做校验,结果基差序列里混了三个异常值,回测曲线漂亮得不行,实盘直接打脸。
数据来源,我一般这么选:
- 交易所官方数据:最权威,但获取成本高。适合做交割月基差分析。
- Wind/Choice/聚宽:国内主流,数据全,但要注意复权处理。
- Bloomberg/Reuters:国际品种首选,贵,但数据质量确实好。
- 自建爬虫:适合做高频或特殊品种,但维护成本高。
数据清洗,我总结了三步走:
- 缺失值处理:别直接删!先看缺失比例。低于5%用前向填充,高于5%要考虑是不是品种流动性问题。
- 异常值检测:我习惯用3σ原则,但期货数据经常有跳空,所以会结合IQR(四分位距)做二次过滤。
- 对齐时间戳:不同合约的到期日不同,必须统一到同一时间轴。我一般用主力合约连续映射。
核心经验:数据清洗不是一次性工作。每次换合约、换品种,都要重新跑一遍清洗流程。我曾经因为没更新主力合约切换规则,导致基差序列里混了两个月的老合约数据,回测结果完全失真。
# 一个简单的基差数据清洗示例(Python伪代码)
import pandas as pd
import numpy as np
def clean_basis_data(df):
# 1. 缺失值处理
df['basis'] = df['basis'].fillna(method='ffill')
# 2. 异常值检测(3σ)
mean = df['basis'].mean()
std = df['basis'].std()
df = df[(df['basis'] > mean - 3*std) & (df['basis'] < mean + 3*std)]
# 3. 时间对齐
df = df.set_index('date').resample('D').last()
return df
7.2 基差序列的统计分析:摸清它的脾气
拿到干净数据后,别急着建模。先做描述性统计,看看基差序列到底长什么样。
我一般会看这几个指标:
- 均值与中位数:判断基差是否长期偏离零值。比如铜的基差长期在-200到+200之间震荡,如果均值偏离太多,说明数据可能有问题。
- 标准差:衡量波动性。波动大的品种,交易机会多,但风险也高。
- 偏度与峰度:偏度看是否对称,峰度看是否有厚尾。基差序列往往有尖峰厚尾特征,这意味着极端行情比正态分布更常见。
- 自相关性:用ACF/PACF图判断。基差序列通常有较强的自相关性,尤其是近月合约。
一个小技巧:做统计分析时,一定要分时间段看。牛熊市、交割月前后、政策发布期,基差的统计特征完全不同。我习惯把数据切成三个窗口:正常市、极端市、过渡期,分别建模。
7.3 基差回归模型:找到驱动因素
基差不是凭空产生的。它受库存、持仓、期限结构、宏观情绪等多重因素影响。回归模型就是帮我们量化这些关系。
我常用的回归框架:
| 变量类型 | 具体指标 | 预期影响方向 |
|---|---|---|
| 库存因子 | 仓单数量、社会库存 | 库存高→基差弱(负向) |
| 持仓因子 | 主力合约持仓量、多空比 | 持仓集中→基差波动大 |
| 期限结构 | 近远月价差、升贴水 | Back结构→基差偏强 |
| 宏观因子 | 美元指数、PMI、利率 | 经济好→基差走强 |
# 基差回归模型示例
import statsmodels.api as sm
X = df[['inventory', 'open_interest', 'spread', 'dollar_index']]
y = df['basis']
X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
print(model.summary())
注意:回归模型最怕多重共线性。比如库存和持仓往往高度相关,我一般会用VIF(方差膨胀因子)做筛选,VIF大于10的变量直接剔除。
7.4 基差预测模型:从解释到预测
回归模型告诉我们「为什么」,预测模型告诉我们「接下来会怎样」。做基差预测,我走过不少弯路,这里分享几个靠谱的方法。
时间序列模型(ARIMA/GARCH):
适合短期预测(1-5天)。基差序列通常有均值回复特性,ARIMA能捕捉这个规律。GARCH则能预测波动率,对风控很有用。
# ARIMA预测基差示例
from statsmodels.tsa.arima.model import ARIMA
model = ARIMA(df['basis'], order=(2,1,2))
results = model.fit()
forecast = results.forecast(steps=5)
机器学习模型(XGBoost/LSTM):
适合中期预测(5-20天)。XGBoost对特征工程要求高,但解释性强。LSTM能处理非线性关系,但容易过拟合。
我的经验:别迷信复杂模型。对于基差预测,ARIMA+简单特征往往比LSTM更稳定。我做过对比测试:在10个品种上,ARIMA的胜率是62%,LSTM是58%,但ARIMA的回撤只有LSTM的一半。
预测模型的评估指标:
- MAE/MSE:看预测误差大小
- 方向准确率:预测涨跌方向是否正确,这个比数值准确更重要
- 回测夏普比:最终要看策略表现,不是模型拟合度
避坑指南:我曾经在预测模型上犯过一个低级错误——用未来数据做特征。比如用T+1的库存数据预测T日的基差,回测结果漂亮得离谱。后来我养成了一个习惯:所有特征必须滞后一期,确保是「已知信息」。
好了,基差交易的数据分析就聊到这儿。记住:数据质量决定策略上限,统计方法决定下限,模型只是工具。把基础打牢,后面的策略设计才能站得住脚。