「主力超短线选股」——源码我扫完,这公式语法没问题,但一个 AND 的位置让它多给了你 93% 的假信号

上期那个"涨停回踩"公式是语法错,一眼看穿。这份"主力超短线"语法完全正确、能直接保存——但末尾一行少了一对括号,让它多给了你 93% 的假信号。这种坑,比语法错更危险。

做这系列到第 11 期,我最怕两种公式:一种是上期那种一眼报错的有 bug 版;另一种是能跑、但你永远不知道它跑错了的暗坑版。

这份"主力超短线选股"属于后者。语法完全合法,通达信能存、能出信号。我逐行扫完,差点以为又是份干净公式——直到看到最后那行。

一、先说它写对了什么

快速扫一遍,逻辑其实挺完整:

TJ = 价格低于 15 日均线,且最低价低于近 20 日最高价的 90%(深调支撑区)。

HYX = 20 日 EMA;QD = 20 日加权慢线(典型价加权)。

HY = 收盘价同时上穿 HYX 和 QD,且 QD 在 HYX 下方(多头雏形)。

HY2 = HYX 上穿 QD(均线金叉)。

HY3 = HY 再加 TJ 深调约束。

YYCDXNH = 同时上穿至少 3 条均线 + 四条均线高度粘合(最大/最小比值 ≤ 1.03)+ 站上 60 日线 + 20 日均线向上。

这部分是"均线粘合后多头起爆"的经典写法,没问题。

核心思路很清楚:多条均线粘合发散 + 价格上穿 + 深调支撑,是典型的超短线起爆形态。逻辑自洽,能直接用。

二、致命暗坑在最后一行

原版最后一行是这么写的:

主力起爆:(HY AND HY2) OR (HY AND HY3) OR (HY2 AND HY3) OR (HY AND HY2 AND HY3) AND YYCDXNH;

问题就在这:在通达信(和几乎所有编程语言)里,AND 的优先级高于 OR。所以这一长串,实际被解析成:

A OR B OR C OR (D AND YYCDXNH)

(A/B/C/D 是前四个金叉组合,YYCDXNH 是均线粘合约束)

看懂了吗?前面三个分支(A、B、C)根本不需要 YYCDXNH 就能触发。只有最后一个分支 D 需要满足均线粘合——而 D 是 A/B/C 的交集,本来就是最严的。

作者真正想要的,显然是:

主力起爆:((HY AND HY2) OR (HY AND HY3) OR (HY2 AND HY3) OR (HY AND HY2 AND HY3)) AND YYCDXNH;

(把前面所有 OR 用括号包起来,再统一 AND YYCDXNH)

就差一对括号,意思完全变了。

三、回测数据:93% 的假信号

沪深 300 成分股,2025-09-22 到 2026-07-23,两种写法分别扫描,统计 20 日收益:

版本触发信号20 日平均收益胜率
原版(YYCDXNH 基本失效)454 个+1.40%44.0%
修复版(加括号约束)31 个+1.86%53.3%

加上那对括号,信号从 454 个骤减到 31 个(缩减 93.2%),胜率从 44%(约等于随机)拉到 53.3%,收益也更高。

这就解释了为什么暗坑比语法错更可恨:语法错你会立刻发现公式跑不动;暗坑让你以为在选股,其实在随机买

四、公式体检评分

语法合规: 9 / 10(能保存、能运行,无语法错)

逻辑严谨: 4 / 10(AND/OR 优先级暗坑,YYCDXNH 形同虚设)

信号质量(原版): 2 / 10(泛滥 454 个,胜率随机)

信号质量(修复版): 8 / 10(精选 31 个,胜率 53%)

五、适用环境

牛市初中期 ✓ 震荡转多头 ✓ 单边熊市 ✗

这公式本质是"均线粘合后发散",依赖的是多空平衡被打破后的趋势惯性。熊市里均线黏合少、假突破多,即使修复了括号,信号质量也会下降——适合在宽度够的市场阶段用。

六、三个启发

  • OR 和 AND 混用,永远加括号。不要赌自己记得优先级,一对括号成本为零,漏一对代价是 93% 假信号。

  • 能跑的公式不代表跑对了。语法错是明枪,优先级暗坑是暗箭;后者更该警惕。

  • 好公式该让你"等得有点不耐烦"。从 454 砍到 31,不是信号变少,是噪音被滤掉了。

修复版公式(可直接复制进通达信,请先删除同名旧公式):

TJ:=L<MA(C,15) AND L<REF(HHV(C,20),1)*0.9 AND MA(C,15)<REF(HHV(C,20),1)*0.9;

HYX:=EMA(CLOSE,20);

ZJ:=(3*CLOSE+LOW+OPEN+HIGH)/6;

QD:=(20*ZJ+19*REF(ZJ,1)+18*REF(ZJ,2)+17*REF(ZJ,3)+16*REF(ZJ,4)+15*REF(ZJ,5)+14*REF(ZJ,6)+13*REF(ZJ,7)+12*REF(ZJ,8)+11*REF(ZJ,9)+10*REF(ZJ,10)+9*REF(ZJ,11)+8*REF(ZJ,12)+7*REF(ZJ,13)+6*REF(ZJ,14)+5*REF(ZJ,15)+4*REF(ZJ,16)+3*REF(ZJ,17)+2*REF(ZJ,18)+REF(ZJ,19))/210;

(顺手修了 QD 权重:原版漏了 REF(ZJ,19)、多写了 REF(ZJ,20),这里补回,影响极小但更规范)

HY:=CROSS(C,HYX) AND CROSS(C,QD) AND QD<HYX;

HY2:=CROSS(HYX,QD);

HY3:=CROSS(C,HYX) AND CROSS(C,QD) AND QD<HYX AND TJ;

MA5:=MA(C,5);MA10:=MA(C,10);MA20:=MA(C,20);MA30:=MA(C,30);

CS5:=CROSS(C,MA5);CS10:=CROSS(C,MA10);CS20:=CROSS(C,MA20);CS30:=CROSS(C,MA30);

CS_NUM:=CS5+CS10+CS20+CS30;

MAX_MA:=MAX(MAX(MA5,MA10),MAX(MA20,MA30));

MIN_MA:=MIN(MIN(MA5,MA10),MIN(MA20,MA30));

YYCDXNH:=CS_NUM>=3 AND MAX_MA/MIN_MA<=1.03 AND C>MA(C,60) AND MA20>REF(MA20,1);

主力起爆:((HY AND HY2) OR (HY AND HY3) OR (HY2 AND HY3) OR (HY AND HY2 AND HY3)) AND YYCDXNH;

你打开自己写的公式,搜一下有没有"OR"和"AND"挤在同一行的——如果有,先确认括号加对了没有。很多人以为自己在写"同时满足 A 或 B,且 C",实际跑的是"A 或 B 或(C 且 D)"。

把这条转给你身边也在手写公式的朋友——他可能写了三年,一直少一对括号。


相关阅读

联系客服
QQ:332879389
联系电话
13605084160