这周我又收到一份"涨停回踩再涨"型公式的源码。号称:找出"涨停 → 回踩 → 不破支撑 → 缩量 → 再放量突破 MA5"的强势股。
听起来特别完整。我打开源码扫了一眼,通达信根本粘贴不进去。问题藏在两个肉眼很难发现的地方。
一、第一处必报错的语法错
这是原文:
A5,赋值,VA6,赋值,ABS(C/O 减 1)乘以 100,小于,5
(原文写的是 A5:= VA6:= ABS(C/O-1)*100<5)
一行里塞了两个赋值号,通达信一行只允许一个 =:=。要么报错拒绝,要么静默只保留最后一个变量——你贴到通达信编辑器里,就是出不了信号。
更要命的是,无论通达信按哪种方式处理,VA6 在公式后半段再也没出现过——就算 A5 不报错,VA6 也是个死变量。
二、第二处更隐蔽的截断
A9 那行末尾:
A9,赋值,MA(C,5),大于等于,A2,且,C,大于,A2,且,C,大于等于,MA(C,5),且,REF(C,1),小于等于,REF(MA(C,5),1),且,LLV(L,A1)
(原文 A9:=MA(C,5)>=A2 AND C>A2 AND C>=MA(C,5) AND REF(C,1)<=REF(MA(C,5),1) AND LLV(L,A1) ← 这里断了)
行尾紧跟 `LLV(L,A1)`,比较操作符和右边的值全没了。参照上下文(A7 那行是 `LLV(C,A1)>=A2`),原作者大概率漏写了 `>=A2 AND`,结果 A9 的判定链条在 `LLV(L,A1)` 后突然中止——后面整段条件失效。
意思是,"缩量未漏"这条约束根本没生效,因为它嵌套在 A9 内部。
三、3 个不致命的死代码
涨停距今:=BARSLAST(涨停信号)和涨停天数:=涨停距今—— 完全相同的两个变量,后者无意义ZT2:=BARSLAST(涨停信号)—— 又一次完全相同的计算,三次重复ZT3:=REF(H,ZT2)-REF(L,ZT2)—— 取涨停日实体高度,但公式里再也没出现
这些不影响信号,但会让你的源码读起来像俄罗斯套娃——要查 bug 时一翻就懵。
四、修复后的版本
我把语法错修了、死代码清掉、保留全部真实约束,给出一份能直接粘贴运行的版本:
MA5:=MA(C,5);MA30:=MA(C,30);
乖离率:=MA5/MA30;
(去掉了 MA10/MA20 —— 公式里没用)
涨停条件:=C=H AND C>=ZTPRICE(REF(C,1),IF(CODELIKE('60') OR CODELIKE('00'),0.1,IF(CODELIKE('30') OR CODELIKE('68'),0.2,10)));
涨停信号:=涨停条件 AND O<=REF(H,1) AND COUNT(涨停条件,5)<3 AND NOT(L=LLV(L,10)) AND COUNT(EVERY(涨停条件,3),20)=0 AND HHV(乖离率,40)<1.4;
(涨停日筛选:跳空高开 + 5日内涨停<3 + 非10日新低 + 20日无双连板 + 乖离率<1.4 不追高)
A1:=BARSLAST((C/REF(C,1)-1)*100>9.5);
A2:=IF(REF(L,A1)>REF(H,A1+1),REF(C,A1+1),REF(O,A1));
(A2=回踩支撑位:跳空高开用涨停日开盘价,否则用涨停日收盘价)
A3:=BETWEEN(A1,2,13);
(涨停距今 2~13 天,超出窗格不参与判定)
A4:=C>=A2 AND BETWEEN(L/A2,1.035,0.97);
(回踩后重新站上支撑位,且最低价只在支撑上方 0.97~1.035 范围内)
A5:=ABS(C/O-1)*100<5;
(当日振幅<5%,清洗跳空缺口干扰)
A7:=LLV(C,A1)>=A2;
(从涨停至今,最低价没漏过支撑位)
A8:=MACD>-1;
DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
(MACD 不要深度空头,打死不插血回调股)
关注:=A3 AND A4 AND A5 AND A7 AND A8;
("关注"-备选池:上述 5 个约束都满足,但还没到买入点)
A9:=MA(C,5)>=A2 AND C>A2 AND C>=MA(C,5) AND REF(C,1)<=REF(MA(C,5),1) AND LLV(L,A1)>=A2;
(修复版 A9:上穿突破 + 全部期间未漏量,这里补上了被截断的部分)
TT:=REF(A3,1)>0 AND A9;
(TT=上一天已经进入关注池,今天才是买点,能避免追高追错节点)
买入:TT AND COUNT(TT,20)=1;
(主信号:TT 且 近20日首次出现,限制频次不重复)
五、3 个关键约束的逻辑为什么能成立
回踩位上下 0.97~1.035 弹性——只允许回踩走到支撑位下最多 3%,但也不能躺在支撑位上方太远(防止高位假突破)
最低价全程未漏——这才是"未量化为出货"的核心证据,不在于今日最低价
MACD > -1——排除深度空头,可避免被探底中股捕获
优化版主公式(可直接复制进通达信,请先删除同名旧公式):
MA5:=MA(C,5);MA30:=MA(C,30);
乖离率:=MA5/MA30;
涨停条件:=C=H AND C>=ZTPRICE(REF(C,1),IF(CODELIKE('60') OR CODELIKE('00'),0.1,IF(CODELIKE('30') OR CODELIKE('68'),0.2,10)));
涨停信号:=涨停条件 AND O<=REF(H,1) AND COUNT(涨停条件,5)<3 AND NOT(L=LLV(L,10)) AND COUNT(EVERY(涨停条件,3),20)=0 AND HHV(乖离率,40)<1.4;
A1:=BARSLAST((C/REF(C,1)-1)*100>9.5);
A2:=IF(REF(L,A1)>REF(H,A1+1),REF(C,A1+1),REF(O,A1));
A3:=BETWEEN(A1,2,13);
A4:=C>=A2 AND BETWEEN(L/A2,1.035,0.97);
A5:=ABS(C/O-1)*100<5;
DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
A7:=LLV(C,A1)>=A2;
A8:=MACD>-1;
关注:=A3 AND A4 AND A5 AND A7 AND A8;
A9:=MA(C,5)>=A2 AND C>A2 AND C>=MA(C,5) AND REF(C,1)<=REF(MA(C,5),1) AND LLV(L,A1)>=A2;
TT:=REF(A3,1)>0 AND A9;
买入:TT AND COUNT(TT,20)=1;
如果你手里也有"涨停回踩型"公式,打开源码找一找——有没有一行里塞了两个 `:=`,有没有一行末尾什么都不像就断了。两处语法错一修,配合理逻辑重新跑,应该就能出来信号。
把这条转给你身边也在跑涨停回踩的那个朋友——他可能贴了一年,0 个信号,从未进过下一行情。

