第六讲:基差回归策略设计——Z-score信号、阈值设定与仓位管理
各位同学,欢迎来到第六讲。前面我们讲了基差数据的获取、处理,也聊了套利的基本逻辑。今天这一讲,是真正把策略落地的关键一步——基差回归策略的设计。
说白了,就是回答三个问题:什么时候进场?什么时候止损?每次下多少仓位?
我个人习惯把这三件事拆开来看,但实际执行时它们是联动的。你想想看,信号再准,仓位管理一塌糊涂,照样亏钱。反过来,仓位管理再好,信号全是噪音,也是白搭。
一、Z-score信号生成:把基差变成可交易的信号
基差本身是一个绝对值,比如螺纹钢的基差现在是80元/吨。但80元是高是低?这得看历史分布。
Z-score就是干这个的。它把基差标准化,告诉你当前基差偏离均值多少个标准差。
公式很简单:
Z = (当前基差 - 基差均值) / 基差标准差
我一般用过去20个交易日或者60个交易日作为滚动窗口。为什么是20?因为一个月大概20个交易日,符合中短期回归的节奏。
来看一段Python代码,这是我实际项目中用过的简化版:
import pandas as pd
import numpy as np
def calc_zscore(basis_series, window=20):
"""
计算基差的滚动Z-score
basis_series: 基差时间序列
window: 滚动窗口
"""
mean = basis_series.rolling(window).mean()
std = basis_series.rolling(window).std()
zscore = (basis_series - mean) / std
return zscore
嗯,这里要注意:标准差不能为零。如果某段时间基差完全不动,std=0,Z-score就变成无穷大。我在实盘里遇到过这种情况,后来加了一个最小std的过滤,比如std小于0.1就跳过。
二、开仓阈值与止损阈值设定
有了Z-score,接下来就是设定阈值。阈值设多少?这没有标准答案,但我给你一个经验范围。
开仓阈值
一般用±1.5到±2.5个标准差。我个人习惯:
- 保守型: Z-score > 2.0 或 < -2.0 才开仓
- 激进型: Z-score > 1.5 或 < -1.5 就开仓
- 稳健型: 结合波动率动态调整,波动大时用2.5,波动小时用1.5
为什么会有这个差异?因为不同品种的基差波动特性不一样。比如股指期货的基差波动小,2.0可能一年都触发不了几次;而商品期货波动大,1.5可能每周都有信号。
止损阈值
止损比开仓更重要。我见过太多人只想着赚,没想过亏了怎么办。
止损阈值一般设为开仓阈值的1.5到2倍。举个例子:
- 开仓阈值设为Z-score=2.0
- 止损阈值可以设在Z-score=3.0或3.5
为什么?因为如果基差已经偏离到2.0个标准差,理论上回归概率很大。但如果继续偏离到3.0,说明市场结构可能变了,原来的套利逻辑不成立了。
我曾经在铁矿石上吃过这个亏。当时基差Z-score到了2.3,我开仓做回归。结果基差继续拉到3.5,我硬扛,最后亏了15%。后来复盘发现,那段时间港口库存大幅下降,基差的均值已经上移了。
三、仓位管理模型:凯利公式
信号有了,阈值有了,接下来就是下多少仓位。这里我推荐凯利公式。
凯利公式的原始形式是用于赌博的,但用在交易上也完全OK。它的核心思想是:根据胜率和盈亏比,计算出最优的下注比例。
公式:
f* = (bp - q) / b
其中:
f* = 最优仓位比例
b = 盈亏比(平均盈利 / 平均亏损)
p = 胜率
q = 1 - p(败率)
举个例子:
- 你的策略历史胜率是60%(p=0.6)
- 平均盈利是1000元,平均亏损是500元(b=2)
- 那么 f* = (2*0.6 - 0.4) / 2 = 0.4
也就是说,每次应该用总资金的40%来开仓。
但这里有个问题——凯利公式算出来的仓位往往偏大。实盘中我一般用半凯利,也就是把结果除以2。上面那个例子,40%变成20%。
来看一个完整的仓位计算代码:
def kelly_position(win_rate, avg_win, avg_loss, total_capital, half_kelly=True):
"""
凯利公式仓位计算
win_rate: 胜率 (0-1)
avg_win: 平均盈利
avg_loss: 平均亏损
total_capital: 总资金
half_kelly: 是否使用半凯利
"""
b = avg_win / avg_loss # 盈亏比
p = win_rate
q = 1 - p
f = (b * p - q) / b
if half_kelly:
f = f / 2
# 限制仓位在0到1之间
f = max(0, min(f, 1))
position = f * total_capital
return position
四、完整策略框架图
下面我用一张SVG图来展示整个策略的流程。从数据输入到最终执行,每一步都串起来:
五、实战中的几个要点
讲完了理论,我再说几个实战中容易踩的坑:
- Z-score不是万能的。 它假设基差服从正态分布,但实际中基差有厚尾特征。极端行情下,Z-score到4.0都有可能。这时候别死扛。
- 阈值要动态调整。 我习惯每季度重新计算一次阈值参数。市场在变,基差的波动率也在变。
- 凯利公式的输入要靠谱。 胜率和盈亏比要用样本外数据算,别拿回测数据自欺欺人。
- 多品种分散。 别把所有资金压在一个品种上。我一般同时做3-5个品种的基差套利,相关性越低越好。
好了,这一讲就到这里。记住,策略设计不是一锤子买卖,需要不断迭代优化。下一讲我们会聊回测框架的搭建,到时候把这些策略逻辑全部跑一遍。
公众号:蓝海资料掘金营,微信deep3321