尾盘战法选股公式:我回测时遇到一只票,让我停下来了

这公式在某社区被推,说是"均线蓄力 + 尾盘突破"双逻辑,胜率高。

我跑回测的时候,遇到一只股票:均线多头排列成立、MACD 在零轴上方、20日涨幅不到15%——所有条件全绿,公式出了信号。

第二天,跌停了。

我回去把源码一行一行拆开,发现这个公式的问题根本不在参数,而在一个结构性的矛盾——两种战法套在同一个 OR 里面,逻辑强度根本不在一个量级。

说清楚那只让我停下来的票:它当天4日均线上穿20日均线,20日均线上穿62日均线,MACD 在零轴上金叉,20日涨幅只有 12%——完全符合公式里所有"看起来对"的条件。信号出来之后我盯了一晚上,觉得稳了。

第二天低开,三个点的时候我没走,想等反弹。结果一路往下,封了跌停板。

我当时第一反应是:是我买点选得不对吗?后来我把前后十几只满足条件的票全部回溯了一遍,发现问题不是"这一只买错了"——是公式本身有一个结构性的问题,它允许两种完全不同的信号逻辑混在一起,其中一种根本不需要放量确认就出信号。

一、先把公式拆开,看看它到底在干什么

最终输出只有这一行:

尾盘战法:(JCXH OR TQXH) AND MACDGZ AND DWQD;

三个条件并列:JCXH(均线蓄力) TQXH(尾盘放量突破),叠 MACDGZ 和 DWQD 两道过滤。我把两个子路径的核心变量整理出来之后,发现了一个有意思的问题——

路径需要放量(FLQR)?需要突破10日高点(JGTP)?描述的场景
JCXH(均线蓄力)不需要 ✗不需要 ✗均线形态到位就出信号
TQXH(尾盘放量突破)需要 ✓需要 ✓放量 + 突破10日最高价

两个路径用 OR 叠加,结果就是:走 JCXH 路径的信号,根本不需要放量确认,也不需要突破任何价位,只要均线形态对上了就出。

这就好比你开了一道门,一半钥匙带指纹锁,一半钥匙是万能钥匙,然后你说"双重保险"。

二、让我停下来的那只票,走的就是 JCXH 路径

均线多头排列成立、MACD 在零轴上方——JCXH 路径直接出信号,FLQR 和 JGTP 两个条件完全没参与。

而 TQXH 路径要求放量 1.5 倍 + 收盘突破 10 日最高价,这两个条件虽然更严格,但在同一个公式里被 JCXH 的弱路径稀释掉了。

三、还有一个隐蔽的笔误:62日均线约束自相矛盾

JCXH 和 TQXH 共用这两个条件:

CQJXPW:=ABS(SLOPE(LSERJX,3))<0.19;

CQXLZQ:=SLOPE(LSERJX,3)>REF(SLOPE(LSERJX,3),1);

→ 62日均线斜率 |值| < 0.19(几乎走平)同时 斜率 > 前一期(刚抬头)

作者的真实意图应该是判断"62日均线从下跌转为走平",想捕捉行情从下降趋势进入横盘整理的节点。但这两个条件硬放在一起,只有在斜率刚好在 0 附近且刚刚转正时才能同时满足——窗口极窄,导致整个约束链几乎卡死。

正确的逻辑是"斜率由负转正",而不是"斜率接近零且大于前一期"。

四、MACDGZ 这一层,对 JCXH 路径完全没意义

JCXH 路径里已经有 ZQQSXS(20日线向上)和 CQXLZQ(62日线抬头),这两个条件成立时,DIF>0 必然成立。

最后再加 MACDGZ:=DIF>0 OR CROSS(DIF,DEA) 这一层,对 JCXH 来说只有 DIF>0 那条分支有意义,OR CROSS(DIF,DEA) 那条支路完全成了废代码——它在 JCXH 路径里永远不会走到。

五、DWQD 这一层过滤,方向可能帮倒忙

"20日涨幅 < 20%"的本意是"还没涨太多,空间还在"。但这个逻辑配合均线多头路径,反而会在真正的启动点把信号拦掉:

  • 均线多头排列成立 → 行情已经走出中期趋势

  • 20日涨幅还不到 20% → 均线刚发散,资金刚进场,还没加速

  • 加 DWQD<20 → 保护的是还没涨的,这类票往往趋势刚走好但还没确认

真正"涨太多"的票反而被 DWQD 拦在门外——拦的是对的,但拦错了阶段。

六、变量存活表:哪些行真的在干活?

变量含义最终去向状态死因
ESRJX / LSERJX20日线 / 62日均线→ ZQQSXS / CQXLZQ活 ✓
CQJXPW62日均线走平→ JCXH / TQXH矛盾笔误 ✗ABS(<0.19) 与"刚抬头"无法同时成立
ZRS / ZQCSZQ均线位置 + 金叉开口→ JCXH活 ✓
DNJS1 / DNQW4日线企稳 + 拐头→ JCXH活 ✓
JGTP收盘突破10日高点→ TQXH(JCXH不要求)路径不一致 ✗OR把不需要JGTP的JCXH也放进了信号池
FLQR放量1.5倍→ TQXH(JCXH不要求)路径不一致 ✗同上,JCXH路径完全绕过了放量条件
MACDGZ(CROSS支路)MACD刚金叉→ 仅对TQXH有意义冗余过滤 ✗JCXH里DIF>0已隐含成立,OR支路永不触发
DWQD20日涨幅<20%→ 统一过滤方向存疑 ✗均线多头+未加速≠风险,可能是起涨点

七、适用环境

宽幅震荡市 ✓ 均线多头趋势后的回踩确认 ✓ 单边熊市 ✗ 弱势窄幅整理 ✗

JCXH 路径适合均线多头后的回踩蓄力买点,但前提是叠加放量确认;TQXH 路径适合尾盘放量突破确认。原版把两个完全不同场景套在一起,实操中建议二选一,不要并联使用。

八、修复版源码

针对四个问题全部修复:修斜率笔误 → JCXH 补放量确认 → 去掉冗余 MACD 支路 → 去掉方向存疑的 DWQD。

{=== 均线参数 ===}

ESRJX:=MA(C,20);

LSERJX:=MA(C,62);

{=== 趋势条件 ===}

ZQQSXS:=SLOPE(ESRJX,3)>0;

{修复:斜率由负转正(去掉ABS走平约束,它与"刚抬头"矛盾)}

CQXLZQ:=SLOPE(LSERJX,3)>0 AND SLOPE(LSERJX,3)>REF(SLOPE(LSERJX,3),1);

ZQCSZQ:=COUNT(CROSS(ESRJX,LSERJX),20)>=1 OR (ESRJX>LSERJX AND ESRJX-LSERJX>REF(ESRJX-LSERJX,1));

SJRJX:=MA(C,4);

ZRS:=REF(SJRJX,4)>ESRJX;

JL10:=ABS(SJRJX-MA(C,10));

DNQW:=REF(SJRJX>ESRJX,3) AND REF(JL10,2)>REF(JL10,1) AND JL10>REF(JL10,1) AND SLOPE(SJRJX,2)<0 AND SLOPE(SJRJX,2)>REF(SLOPE(SJRJX,2),1);

{=== 放量 + 突破(统一要求,TQXH原本就有,JCXH原本没有)===}

JGTP:=C>O AND C>REF(HHV(H,10),1);

FLQR:=VOL>REF(VOL,1)*1.5;

{=== MACD 零轴确认 ===}

DIF:=EMA(C,12)-EMA(C,26);

DEA:=EMA(DIF,9);

{修复:去掉对JCXH无效的CROSS支路,只保留DIF>0}

MACDGZ:=DIF>0;

{=== 信号:两条路径统一加放量确认,去掉DWQD ===}

JCXH:=ZQQSXS AND CQXLZQ AND ZQCSZQ AND DNQW AND FLQR;

TQXH:=ZQQSXS AND CQXLZQ AND DNQW AND JGTP AND FLQR;

尾盘战法:(JCXH OR TQXH) AND MACDGZ;

九、实战操作建议

  • 用法:下午 14:30 之后筛选。JCXH 路径当天放量确认(量比≥1.5),次日关注开盘是否延续;TQXH 路径当天必须是放量+突破,次日高开延续概率更高。两个路径信号同时出现时,视为同一信号,不叠加仓位。

  • 止损:收盘跌破 4 日均线减半,跌破 20 日均线清仓。

  • 环境判断:大盘站稳 20 日均线时 JCXH 路径胜率更高;大盘横盘时 TQXH 路径更有效。

  • 单票仓位:≤ 5%。

十、三条启发

启发一:OR 不是双保险,是信号稀释。 当两个逻辑强度不同的路径用 OR 并联,弱的那条会把强的拉低。如果要融合两种战法,用 AND 才叫双保险,用 OR 只是把信号池混在一起——你根本不知道端上来的是哪个版本。

启发二:修参数之前,先修逻辑矛盾。 "斜率几乎为零"和"斜率刚抬头"描述的是两个完全不同的市场阶段,硬塞在一起会让整个条件链失效。数学上它们不是互斥的,但在有物理含义的公式里,这种矛盾会让信号几乎消失。

启发三:不报错的死代码,比报错更会骗人。 JCXH 路径里 DIF>0 已经隐含成立,但 OR CROSS 那条支路永远不会触发,它在代码里安静地躺着,通达信不会报错,你也不会发现——直到你遇到那只跌停的票,你才会回头问:为什么所有条件都绿了,还是赔了?


相关阅读

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