第四章 套利策略设计:入场信号、出场信号、止损与仓位管理
策略设计这件事,说白了就是解决四个问题:什么时候进、什么时候出、错了怎么办、每次押多少。我见过太多人把精力全花在入场信号上,结果亏在止损和仓位管理上。嗯,咱们一个一个来拆。
4.1 入场信号:布林带与标准差
我个人习惯用布林带作为入场信号的底层框架。为什么?因为它把价差的「相对位置」量化了。你想想看,价差涨到天上去了,你追不追?布林带告诉你:兄弟,这已经偏离均值两个标准差以上了,小心点。
具体怎么用?我直接给代码框架:
# 计算价差序列的布林带
def bollinger_bands(spread, window=20, num_std=2):
ma = spread.rolling(window).mean()
std = spread.rolling(window).std()
upper = ma + num_std * std
lower = ma - num_std * std
return upper, ma, lower
# 入场信号逻辑
def entry_signal(spread, upper, lower):
# 价差突破上轨 -> 做空价差(卖近买远)
if spread[-1] > upper[-1]:
return 'short_spread'
# 价差跌破下轨 -> 做多价差(买近卖远)
elif spread[-1] < lower[-1]:
return 'long_spread'
else:
return 'no_signal'
这里有个坑——参数不是死的。我在项目中遇到过,螺纹钢的跨期价差用20日均线、2倍标准差效果很好,但换到股指期货上,波动率结构完全不同。我建议你至少跑三组参数:
| 品种类型 | 窗口期 | 标准差倍数 | 适用场景 |
|---|---|---|---|
| 商品期货(如螺纹、铁矿) | 20-30 | 2.0-2.5 | 趋势性较强,价差回归慢 |
| 股指期货(如IF、IC) | 10-15 | 1.5-2.0 | 波动快,回归周期短 |
| 国债期货 | 30-40 | 2.5-3.0 | 价差波动小,需更宽通道 |
4.2 出场信号:不止是反向突破
很多人以为出场就是「价差回到均值就平仓」。太天真了。我吃过这个亏——价差刚回到均值就平仓,结果它继续往均值以下猛冲,白白少赚一大段。
我现在的出场策略分三种:
- 目标出场: 价差回到布林带中轨(均值)时,平掉一半仓位。剩下的一半等它回到下轨(或上轨)再平。
- 跟踪出场: 用价差的移动止损线。比如入场后,价差每向有利方向移动0.5个标准差,止损线就跟着移动0.3个标准差。
- 时间出场: 如果持仓超过N个交易日还没达到目标,直接平仓。我一般设5-8天,具体看品种。
def exit_signal(spread, entry_price, current_ma, num_std):
# 目标出场:回到中轨
if abs(spread[-1] - current_ma) < 0.1 * num_std:
return 'exit_half'
# 跟踪出场:反向突破0.5倍标准差
if abs(spread[-1] - entry_price) > 0.5 * num_std:
return 'exit_all'
return 'hold'
4.3 止损设置:保命线
止损这件事,我把它分成两个维度:硬止损和软止损。
硬止损: 固定金额或固定比例。比如每手亏损超过2000元就砍,或者价差反向突破3倍标准差就砍。这个不能商量,到了就执行。
软止损: 基于波动率的动态止损。我常用ATR(平均真实波幅)来设:
def atr_stop(spread, atr_period=14, multiplier=2):
atr = spread.diff().abs().rolling(atr_period).mean()
stop_distance = atr[-1] * multiplier
return stop_distance
举个例子:价差当前波动率是5个点,2倍ATR就是10个点。如果入场后价差反向走了10个点,止损。这个方法的优点是——行情波动大的时候止损宽一点,不容易被震出去;波动小的时候止损窄一点,保护利润。
4.4 仓位管理:凯利公式的实战变形
仓位管理是跨期套利的命门。很多人觉得「我胜率高,可以重仓干」。错。胜率高不代表不会连续亏损。我见过一个策略胜率70%,但连续亏损8次,重仓的人直接爆仓。
我用的仓位模型是改良版凯利公式:
def kelly_position(win_rate, avg_win, avg_loss):
# 标准凯利
kelly_pct = (win_rate * avg_win - (1 - win_rate) * avg_loss) / (avg_win * avg_loss)
# 保守处理:只取一半
return max(0, min(kelly_pct * 0.5, 0.2))
为什么只取一半?因为凯利公式假设你无限次交易,但实际中资金有限、市场会变。我建议:
- 单品种最大仓位不超过总资金的20%
- 所有跨期套利头寸合计不超过总资金的60%
- 每次加仓间隔至少1个标准差
举个例子:你有100万资金,螺纹钢跨期套利的凯利算出来是15%。那你第一次开仓就用15万。如果价差继续往有利方向走1个标准差,再加10万。这样既不会踏空,也不会一把梭哈。
4.5 知识体系总览
下面这张图,是我做跨期套利策略设计的核心逻辑。你可以把它当成一张检查清单:
最后说一句:策略设计不是写论文,是上战场。你设计的每一个参数、每一条规则,都要经得起实盘的检验。我建议你拿到任何策略,先用历史数据跑1000次模拟,看看最大回撤、胜率、盈亏比能不能接受。能接受,再上小资金试。别一上来就全仓干,那是赌博,不是交易。