11、基差回归与统计套利:配对交易策略、价差回归、Z-score信号生成

说到基差交易,很多朋友第一反应就是「买近抛远」或者「买远抛近」。但说实话,这种单腿的基差策略,风险敞口其实挺大的。我个人更喜欢的玩法,是把它做成统计套利——说白了,就是找两个高度相关的品种,赌它们的价差会回归。

嗯,今天我们就聊聊这个。配对交易、价差回归、Z-score信号生成,这三板斧用好了,基差交易就能从「赌方向」变成「赚波动」。

一、配对交易的核心逻辑

配对交易不是什么新鲜玩意儿。上世纪80年代,摩根士丹利的一群量化天才就开始玩了。但放到期货市场,尤其是基差交易里,它的逻辑特别清晰:

  • 找一对兄弟品种:比如螺纹钢和热卷、豆粕和豆油、焦煤和焦炭。它们价格走势高度同步,但偶尔会「闹别扭」——价差拉大。
  • 赌它们和好:价差拉大到一定程度,大概率会回归均值。这时候我们就进场,做多被低估的那个,做空被高估的那个。
  • 等回归平仓:价差回到正常范围,两边同时平仓,赚的就是这个回归的利润。

关键点:配对交易赚的不是方向,是价差的「弹性」。你不需要判断螺纹钢是涨是跌,只需要判断螺纹钢和热卷的价差是不是「过分了」。

我在项目中遇到过一个问题:很多人选配对品种只看相关性系数。其实相关性高不等于协整关系成立。你想想看,两个随机游走的价格序列,相关性也可能很高,但它们的价差可能永远不会回归。所以,协整检验才是配对的基石。

二、价差回归模型:从理论到代码

价差回归,说白了就是均值回归。我们假设两个品种的价格序列 P1P2 存在长期均衡关系:

P1 = α + β * P2 + ε

这里的 ε 就是价差(或者叫残差)。如果这个残差是平稳的,那它就会围绕0上下波动。波动大了,就会往回拽。

我习惯用两步法来建模:

  1. 第一步:用OLS回归估计β。注意,这里要用对数价格,因为对数收益率更接近正态分布。
  2. 第二步:对残差做ADF检验。如果p值小于0.05,说明残差平稳,配对成立。

给你看一段我常用的Python代码:

import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller

# 假设p1, p2是两列价格序列
p1_log = np.log(p1)
p2_log = np.log(p2)

# 第一步:OLS回归
X = sm.add_constant(p2_log)
model = sm.OLS(p1_log, X).fit()
beta = model.params[1]
residual = p1_log - beta * p2_log

# 第二步:ADF检验
adf_result = adfuller(residual)
print(f'ADF统计量: {adf_result[0]:.4f}')
print(f'p值: {adf_result[1]:.4f}')

if adf_result[1] < 0.05:
    print('残差平稳,配对成立')
else:
    print('残差不平稳,换个品种试试')

我的小技巧:别只看p值。我一般还会看ADF统计量,如果它比1%临界值还小,那这个配对就非常靠谱。我曾经用这个方法在焦煤焦炭上跑了一年,年化夏普比做到了2.3。

三、Z-score信号生成:什么时候进场?

模型建好了,价差序列也有了。但问题来了:价差偏离多少才算「过分」?什么时候该进场?什么时候该止损?

我的答案是:用Z-score

Z-score的计算很简单:

Z = (当前价差 - 价差均值) / 价差标准差

它告诉你当前价差偏离均值多少个标准差。一般来说:

  • |Z| > 2:价差偏离较大,可以考虑进场。做多价差(买被低估的,卖被高估的)。
  • |Z| < 0.5:价差回归到均值附近,平仓离场。
  • |Z| > 3:极端情况,可以考虑加仓,但要小心——价差可能不会回归,而是结构变了。

我一般用滚动窗口来计算均值和标准差。窗口大小选多少?我个人习惯用60个交易日。太短了信号太多,太长了反应太慢。你想想看,60天大概一个季度,正好覆盖一个基差周期的长度。

代码实现也很简单:

def calculate_zscore(spread, window=60):
    mean = spread.rolling(window=window).mean()
    std = spread.rolling(window=window).std()
    zscore = (spread - mean) / std
    return zscore

# 生成信号
z = calculate_zscore(residual)
long_signal = z < -2   # 价差被低估,做多价差
short_signal = z > 2   # 价差被高估,做空价差
exit_signal = abs(z) < 0.5  # 回归平仓

避坑指南:我曾经在2016年用这套逻辑做螺纹钢和热卷的配对,结果亏了一波大的。为什么?因为供给侧改革来了,两个品种的基本面发生了结构性变化,价差均值永久性地移动了。所以,Z-score信号一定要配合基本面判断。如果政策变了、供需格局变了,赶紧停手。

四、完整的交易流程

把上面这些串起来,一个完整的基差回归统计套利流程是这样的:

  1. 选品种:找相关性高、协整关系稳定的品种对。
  2. 建模:用OLS估计β,计算价差序列。
  3. 生成信号:用Z-score判断价差是否偏离。
  4. 执行交易:|Z| > 2进场,|Z| < 0.5平仓。
  5. 风控:设置最大亏损限额,比如单笔亏损不超过总资金的1%。

我习惯用一张图来展示这个流程,你看下面这个SVG:

基差回归统计套利流程图 1. 选品种对 相关性+协整检验 2. OLS建模 估计β,计算价差 3. Z-score信号 |Z|>2进场 4. 执行交易 做多/做空价差 5. 风控止损 单笔亏损≤1% 6. 回归平仓 |Z|<0.5离场 循环交易

五、实战中的几个坑

最后,我把自己踩过的坑总结一下,希望能帮你少走弯路:

表现 怎么躲
伪回归 相关性高但价差不回归 必须做ADF协整检验,别只看相关系数
结构突变 价差均值永久移动 定期重新估计β,配合基本面判断
滑点过大 信号出来了但成交价差太大 用限价单,别追涨杀跌
过度交易 Z-score刚过2就进场,频繁止损 放宽阈值到2.5,或者加一个「确认信号」

嗯,今天就聊到这儿。基差回归和统计套利,说白了就是赚「均值回归」的钱。但记住,均值回归不是100%会发生的——它只在市场情绪过度反应时有效。所以,别把它当圣杯,它只是你工具箱里的一把好用的扳手。

一句话总结:配对交易的核心不是预测方向,而是捕捉价差的「弹性」。Z-score是你的信号灯,协整检验是你的安全带。两者缺一不可。

公众号:蓝海资料掘金营,微信deep3321