一个布林带突破策略的5个bug:从0信号到141只股票有效

一个布林带突破策略的5个bug:从0信号到141只股票有效

梵如谨科技 · 量化研究 · 2026-06-14

一个看似完整的布林带突破策略,回测时147只股票全部0信号。逐行审查发现5个bug——变量名冲突、语法错误、逻辑短路。修复后141只股票恢复交易信号,胜率47.6%。这不是策略不行,是公式写错了。

这两天我们在审查回测池中的公式时,发现编号ID-129的布林带突破策略一直在回测中显示"0信号"——147只股票无一触发买入条件。

这种"全市场沉默"的公式通常有两种可能:策略条件过于严格,或者公式代码本身有问题。逐行排查后,我们找到了5个bug。

Bug 1:变量名覆盖——LOW被占用了

原始公式中写了 LOW := MID - K * STD(CLOSE, N);——把布林带下轨命名为LOW。但LOW是通达信原生变量(最低价),这一赋值将最低价序列永久覆盖了。之后所有引用LOW的地方(包括REF(LOW,1)、HHV(LOW,20))拿到的都是布林带下轨,而不是实际最低价。

Bug 2:CROSS(LOW, LOW) = 永远不会发生的事

第21行 CROSS(LOW, LOW)——经过Bug1后,这是"布林带下轨上穿布林带下轨",一个永假条件。

Bug 3:双引号字符串崩溃解析器

DRAWTEXT(BUY, LOW*0.98, '↑突破买')中的双引号字符串是TDX原生语法,但我们的解析器没有实现双引号token识别,直接崩溃。

Bug 4:Output变量在Assign中被引用

公式写 BUY := SELECTION_UP AND REF(SELECTION_UP,1)=0;。但SELECTION_UP是用 :(输出语句)定义的,而解析器先计算 :=(赋值语句),BUY求值时SELECTION_UP还没被求值,拿到的是NaN。

Bug 5:级联污染

BAND_WIDTH := (UP - LOW) / MID——LOW已被覆盖,BAND_WIDTH的计算结果毫无意义。

★★☆☆☆ 综合评级:中(S3)
回测S3 | 代码B级
指标 原始版 优化版
有效股票 0/147 141/147
总交易次数 0 2,119
胜率 N/A 47.6%
平均收益 N/A 12.3%
盈亏比 N/A 1.81:1
夏普比率 N/A 0.32
卡玛比率 N/A 1.82
最大回撤 N/A 21.4%

🔧 修复了什么

1. 将布林带下轨变量名从 LOW 改为 DN——不再覆盖原生最低价

2. 删除 DRAWTEXT 画线语句——解析器不支持双引号字符串

3. 所有中间逻辑改为 := 赋值,最终输出用 BUY: BUY_VAR;

4. 增加首次信号过滤 REF(ENTRY_VAR,1)=0,避免同一天重复触发

5. 四条件组合:布林上轨突破 + 1.2倍均量 + MA5>MA20 + 5日正动量

📄 优化版完整代码

N:=20;
K:=2;
MID:=MA(CLOSE,N);
UP:=MID+K*STD(CLOSE,N);
DN:=MID-K*STD(CLOSE,N);

{突破信号}
BREAK_UP:=CROSS(CLOSE,UP);

{量能过滤}
VOL_MA20:=MA(VOL,20);
VOL_OK:=VOL>VOL_MA20*1.2;

{短期趋势}
MA5:=MA(CLOSE,5);
MA20:=MA(CLOSE,20);
TREND_UP:=MA5>MA20;

{动量确认}
MOM_OK:=CLOSE>REF(CLOSE,5);

{综合进场}
ENTRY_VAR:=BREAK_UP AND VOL_OK AND TREND_UP AND MOM_OK;
BUY_VAR:=ENTRY_VAR AND REF(ENTRY_VAR,1)=0;

{选股输出}
BUY:BUY_VAR;
布林带突破策略优化前后对比

原始版(5个bug)vs 优化版V5 核心指标对比

🔍 策略逻辑

当股价从下方突破布林带上轨时,检查成交量是否大于20日均量的1.2倍、短期均线是否多头排列(MA5>MA20)、近5日是否正收益。四个条件同时满足时触发买入信号,且要求前一交易日未触发(避免重复进场)。

🎯 适用场景

✅ 趋势行情中的突破追涨
✅ 1.2倍量能过滤降低假突破概率
❌ 震荡市中信号可能频繁假触发
❌ 建议配合5%移动止损使用

⚠️ 风险提示

历史回测数据,不构成投资建议。最大回撤21.4%,单边下跌市中回撤可能更大。投资有风险,入市需谨慎。

📡 梵如谨科技

专注于A股量化因子研究与策略开发
因子库覆盖动量·趋势·量价·波动率·反转五大维度

访问梵如谨官网 → 文章专栏 → 查看完整优化代码

官网地址:fanrujin.cloud(备案中,http可访问)

⚠️ 历史回测数据,不构成投资建议。投资有风险。