第十二章:基差交易的信号生成

信号生成,说白了就是给交易系统装上眼睛。我做了这么多年基差交易,见过太多人拿着漂亮的策略曲线,一上实盘就崩。为什么?信号太粗糙了。

这一章,我们聊聊怎么生成靠谱的交易信号。从最简单的阈值,到多因子合成,一步步来。

12.1 基差阈值信号

这是最基础的方法。设定一个上下限,突破了就干。

举个例子:螺纹钢的基差,历史均值在200块左右。我习惯设±1.5倍标准差作为阈值。基差超过350,做多现货空期货;低于50,反过来。

核心逻辑:基差偏离均值太远,迟早要回归。这是统计套利的基本信仰。

# 阈值信号示例(Python伪代码)
import numpy as np

def threshold_signal(basis, lookback=60):
    mean = np.mean(basis[-lookback:])
    std = np.std(basis[-lookback:])
    upper = mean + 1.5 * std
    lower = mean - 1.5 * std
    
    if basis[-1] > upper:
        return 1  # 做多基差(多现货空期货)
    elif basis[-1] < lower:
        return -1 # 做空基差(空现货多期货)
    else:
        return 0  # 观望

我的经验:阈值不能死板。不同品种、不同市场环境下,标准差倍数要动态调整。我曾经在动力煤上用过固定2倍标准差,结果连续止损三次。后来改成1.2倍,反而赚了。

12.2 基差动量信号

阈值信号有个毛病——它只看位置,不看方向。基差可能在低位徘徊很久,你进去早了,被震荡洗出来。

动量信号解决的就是这个问题。它关注基差的变化速度。

我个人习惯用基差的N日变化率。比如5日变化率超过3%,说明基差在加速,这时候追进去胜率更高。

def momentum_signal(basis, period=5):
    change = (basis[-1] - basis[-period-1]) / basis[-period-1]
    if change > 0.03:
        return 1  # 基差加速走强
    elif change < -0.03:
        return -1 # 基差加速走弱
    else:
        return 0

注意:动量信号在震荡行情里容易反复打脸。我建议配合趋势过滤器使用,比如只在大趋势方向做动量。

12.3 基差与成交量配合信号

这个信号,是我从股票量价关系里偷师的。基差变动如果没成交量配合,很可能是假突破。

你想想看:基差突然拉大,但成交量没放大。这说明什么?可能是几个大户在搞鬼,不是市场共识。这种信号我一般直接过滤掉。

具体做法:计算基差变动时的成交量是否超过过去20日均值的1.5倍。

def volume_confirm_signal(basis, volume, lookback=20):
    avg_vol = np.mean(volume[-lookback:])
    basis_change = abs(basis[-1] - basis[-2])
    
    if basis_change > threshold and volume[-1] > 1.5 * avg_vol:
        return True  # 成交量确认
    else:
        return False # 量能不足,放弃

避坑指南:我曾经在铜的基差交易上,看到基差突破但量能不足,还是进去了。结果第二天就被打回原形。从那以后,量能确认成了我的铁律。

12.4 多因子信号合成

单一信号都有缺陷。阈值信号滞后,动量信号震荡期失效,量能信号在流动性差的品种上不准。

怎么办?合成。把多个信号揉在一起,取交集或加权平均。

我常用的合成方法有两种:

  1. 投票法:三个信号里至少两个发出同向指令,才执行。
  2. 加权法:给每个信号分配权重,计算综合得分。
def composite_signal(basis, volume):
    # 获取三个子信号
    s1 = threshold_signal(basis)
    s2 = momentum_signal(basis)
    s3 = 1 if volume_confirm_signal(basis, volume) else 0
    
    # 投票法
    signals = [s1, s2, s3]
    long_count = sum(1 for s in signals if s == 1)
    short_count = sum(1 for s in signals if s == -1)
    
    if long_count >= 2:
        return 1
    elif short_count >= 2:
        return -1
    else:
        return 0

核心要点:多因子合成不是越多越好。我见过有人用10个因子,结果信号互相矛盾,根本没法交易。3-5个相关性低的因子,效果最好。

12.5 信号生成的整体框架

下面这张图,是我自己用的信号生成流程。你可以参考一下。

基差交易信号生成框架 原始数据输入 阈值信号 动量信号 量能确认信号 多因子信号合成 最终交易指令 投票法 / 加权法 → 输出做多、做空或观望

这个框架,我用了好几年。核心就一句话:信号要简单,逻辑要清晰,执行要坚决

最后说一句:信号生成只是第一步。真正赚钱的,是信号出来后的仓位管理和风控。那些东西,后面章节会细讲。

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