第四章 套利策略设计:入场信号、出场信号、止损与仓位管理

策略设计这件事,说白了就是解决四个问题:什么时候进、什么时候出、错了怎么办、每次押多少。我见过太多人把精力全花在入场信号上,结果亏在止损和仓位管理上。嗯,咱们一个一个来拆。

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 出场信号:不止是反向突破

很多人以为出场就是「价差回到均值就平仓」。太天真了。我吃过这个亏——价差刚回到均值就平仓,结果它继续往均值以下猛冲,白白少赚一大段。

我现在的出场策略分三种:

  1. 目标出场: 价差回到布林带中轨(均值)时,平掉一半仓位。剩下的一半等它回到下轨(或上轨)再平。
  2. 跟踪出场: 用价差的移动止损线。比如入场后,价差每向有利方向移动0.5个标准差,止损线就跟着移动0.3个标准差。
  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万。这样既不会踏空,也不会一把梭哈。

避坑指南: 我曾经在橡胶跨期上连续盈利了10次,一膨胀就把仓位加到了40%。结果第11次价差突然反转,一天亏掉之前两周的利润。从那以后,我给自己定了个死规矩——连续盈利超过5次,主动减仓20%。别跟市场较劲。

4.5 知识体系总览

下面这张图,是我做跨期套利策略设计的核心逻辑。你可以把它当成一张检查清单:

跨期套利策略设计核心逻辑 入场信号 出场信号 止损设置 仓位管理 布林带(均值±N倍标准差) 突破上轨→做空价差 跌破下轨→做多价差 目标出场:回到中轨 跟踪出场:移动止损 时间出场:超时平仓 硬止损:固定金额/比例 软止损:ATR动态止损 原则:止损=认错,不扛单 凯利公式(取半仓) 单品种≤20%总资金 总套利头寸≤60% 核心原则 入场靠规则,出场靠纪律 止损靠执行,仓位靠计算 四个环节缺一不可,任何一个短板都会导致策略失效

最后说一句:策略设计不是写论文,是上战场。你设计的每一个参数、每一条规则,都要经得起实盘的检验。我建议你拿到任何策略,先用历史数据跑1000次模拟,看看最大回撤、胜率、盈亏比能不能接受。能接受,再上小资金试。别一上来就全仓干,那是赌博,不是交易。

专注资料整理