一个布林带突破策略的5个bug:从0信号到141只股票有效梵如谨科技 · 量化研究 · 2026-06-14 |
| 一个看似完整的布林带突破策略,回测时147只股票全部0信号。逐行审查发现5个bug——变量名冲突、语法错误、逻辑短路。修复后141只股票恢复交易信号,胜率47.6%。这不是策略不行,是公式写错了。 |
|
这两天我们在审查回测池中的公式时,发现编号ID-129的布林带突破策略一直在回测中显示"0信号"——147只股票无一触发买入条件。 这种"全市场沉默"的公式通常有两种可能:策略条件过于严格,或者公式代码本身有问题。逐行排查后,我们找到了5个bug。 Bug 1:变量名覆盖——LOW被占用了 原始公式中写了 Bug 2:CROSS(LOW, LOW) = 永远不会发生的事 第21行 Bug 3:双引号字符串崩溃解析器
Bug 4:Output变量在Assign中被引用 公式写 Bug 5:级联污染
|
| ★★☆☆☆ 综合评级:中(S3) | |||||||||||||||||||||||||||
| 回测S3 | 代码B级 | |||||||||||||||||||||||||||
|
|
🔧 修复了什么 1. 将布林带下轨变量名从 2. 删除 3. 所有中间逻辑改为 4. 增加首次信号过滤 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日是否正收益。四个条件同时满足时触发买入信号,且要求前一交易日未触发(避免重复进场)。 |
|
🎯 适用场景
✅ 趋势行情中的突破追涨 |
|
⚠️ 风险提示 历史回测数据,不构成投资建议。最大回撤21.4%,单边下跌市中回撤可能更大。投资有风险,入市需谨慎。 |
|
📡 梵如谨科技
专注于A股量化因子研究与策略开发 访问梵如谨官网 → 文章专栏 → 查看完整优化代码 官网地址:fanrujin.cloud(备案中,http可访问) ⚠️ 历史回测数据,不构成投资建议。投资有风险。 |