信号生成逻辑:从阈值触发到多条件组合
信号生成,说白了就是告诉交易系统「什么时候该动手」。我做了这么多年量化,见过太多策略死在信号生成这步——要么太敏感频繁交易,要么太迟钝错过行情。今天咱们就把这块掰开揉碎了讲。
一、基于阈值的信号生成
这是最基础、也最常用的方法。设定一个数值门槛,价格或指标穿过去,就触发信号。
简单阈值:比如RSI低于30买入,高于70卖出。我在项目中遇到过,这种策略在震荡市里表现还行,但趋势行情里容易反复打脸。
核心逻辑:价格突破某个固定数值或动态数值时触发。
# 简单阈值示例
def simple_threshold(price, upper=100, lower=80):
if price > upper:
return 'sell'
elif price < lower:
return 'buy'
else:
return 'hold'
动态阈值:用移动平均线、布林带等动态计算阈值。我个人习惯用布林带上下轨作为动态阈值,比固定数值更适应市场变化。
我的经验:动态阈值在趋势行情里表现更好,但参数选择很关键。我建议先用历史数据回测,找到最优参数区间。
二、交叉信号
交叉信号是量化交易里最经典的模式之一。两条线交叉,金叉买入,死叉卖出。
均线交叉:短期均线上穿长期均线,买入;下穿则卖出。嗯,这里要注意:均线周期选择直接影响信号质量。我试过5日/20日组合,也试过10日/60日组合,没有绝对的好坏,关键看交易标的的特性。
# 均线交叉信号
def ma_cross(short_ma, long_ma):
if short_ma[-1] > long_ma[-1] and short_ma[-2] <= long_ma[-2]:
return 'buy'
elif short_ma[-1] < long_ma[-1] and short_ma[-2] >= long_ma[-2]:
return 'sell'
return 'hold'
指标交叉:比如MACD的快线穿过慢线,或者KDJ的K线穿过D线。我曾经用MACD金叉死叉做日内交易,效果还不错,但要注意滞后性——信号出来时,行情可能已经走了一半。
避坑指南:交叉信号在盘整行情里会频繁出现假信号。我建议配合趋势过滤器使用,比如只在均线多头排列时做多。
三、多条件组合信号
单一信号容易出错,组合多个条件能提高胜率。说白了,就是让多个指标「投票」,多数同意才执行。
AND逻辑:所有条件同时满足才触发。比如:RSI低于30 AND 价格站上20日均线 AND 成交量放大。这种组合信号胜率高,但交易机会少。
OR逻辑:任一条件满足就触发。比如:价格突破布林带上轨 OR RSI高于80。这种信号多,但假信号也多。
| 组合方式 | 特点 | 适用场景 |
|---|---|---|
| AND | 高胜率,低频率 | 趋势确认、大级别行情 |
| OR | 低胜率,高频率 | 短线交易、震荡行情 |
| 加权投票 | 灵活可控 | 多因子模型 |
# 多条件组合示例
def multi_condition_signal(rsi, ma_status, volume_ratio):
conditions = 0
if rsi < 30:
conditions += 1
if ma_status == 'bullish':
conditions += 1
if volume_ratio > 1.5:
conditions += 1
if conditions >= 2: # 至少两个条件满足
return 'buy'
return 'hold'
我的建议:组合条件不要超过4个,否则信号太少,策略容易「饿死」。我一般用2-3个核心条件,再加1个过滤条件。
四、信号平滑与去噪
原始信号往往毛刺很多,直接使用会导致频繁交易。信号平滑就是把这些毛刺去掉,让信号更「干净」。
移动平均平滑:对信号本身做移动平均。比如把连续5个信号做平均,大于0.5才触发。我在项目中遇到过,这种方法简单有效,但会引入延迟。
# 信号平滑示例
def signal_smoothing(signals, window=3):
smoothed = []
for i in range(len(signals)):
if i < window:
smoothed.append(signals[i])
else:
avg = sum(signals[i-window:i]) / window
smoothed.append(1 if avg > 0.5 else 0)
return smoothed
中值滤波:取窗口内的中位数作为当前信号。这种方法对异常值不敏感,比移动平均更鲁棒。我建议在信号毛刺特别多的时候用中值滤波。
状态机去噪:设定一个「确认次数」,信号连续出现N次才触发。比如连续3根K线都发出买入信号,才真正执行买入。这种方法能有效过滤假信号,但会错过急涨急跌的行情。
避坑指南:我曾经在回测里用移动平均平滑,参数设得太大,结果信号延迟了10个周期,策略收益直接腰斩。平滑参数一定要根据交易频率来调整。
知识体系总览
下面这张图把信号生成的整个逻辑串起来了,你可以对照着看:
信号生成这块,说白了就是「质量优先」。我见过太多人追求信号数量,结果策略回测漂亮,实盘一塌糊涂。记住:一个高质量的信号,胜过十个平庸的信号。
核心总结:阈值信号简单直接,交叉信号经典可靠,多条件组合提高胜率,平滑去噪减少毛刺。把这四块吃透了,信号生成这块基本就稳了。