最近有一类公式非常火,叫"筹码选股"。它的逻辑听起来很高级:散户被套的 90% 成本线一旦被主力穿越,就可能涨。
听起来很有道理。但我把这类公式里最典型的一个版本做了 300 只股票、260 个交易日的全回测,结果让我心里凉了一截——
一、原版公式在做什么?
先拆三层:
第一层:定义两根 K 线和 4 个变量(G1=收盘,G2=最低,G3=开盘,G4=最高),再加两个永远不用的死变量 VAR1=30、VAR2=10。
第二层:算个"单日资金净额"——用成交量除以两日高低差,再乘以今天的涨幅,得到一个买盘强度的近似。
第三层:把从公司上市第一天开始的所有资金净额累加到一个叫 VAR7 的变量里,作为权重,再去模拟"90% 套牢成本线"。
最后是选股:两条 EMA 线交叉时,买。
复杂吧?我把它翻译成人话就一句:价格穿越 90% 散户成本时,买。问题是这"一句"里藏着一个 20 年的累加炸弹。
二、回测结果——出乎意料
用沪深 300 全部成分股,从 2025-09-22 跑到 2026-07-23(接近 10 个月),按原版逐日扫描,统计 20 日后的收益:
| 指标 | 原版(你正在用的) | 优化版(见下文) |
|---|---|---|
| 触发信号数 | 1404 个 | 1734 个 |
| 20 日平均收益 | +0.61% | +2.48% |
| 胜率 | 43.1% | 49.1% |
如果你是花钱买来的、当信号使的,原版胜率 43%——还不到一半,收益基本等于随机。
三、bug 在哪?一行代码偷走你三年收益
问题就藏在那两个累加变量里:
VAR7 等于 SUM(VAR6,0)
VAR8 等于 VAR7
(SUM 的第二个参数写 0,意思是"从开盘第一天开始全部累加",VAR7=VAR8 是个没有任何作用的死代码)
后面两条"筹码线"的分子分母里都乘了这个 VAR8:
筹码1 = EMA((价格差 × VAR8 ÷ 20 + 250)× 1.2 ÷ 5,3)
筹码2 = EMA((价格差反向 × VAR8 ÷ 20 + 250)× 1.2 ÷ 5,3)
分子分母里同一个数,约掉之后 VAR8 其实只对那个"250"产生微小扰动——本来它该是核心权重,结果变成了一个 5 位数上的小数点偏移。换句话说,公式号称"穿越 90% 成本",其实穿越的是约等于 250 的两根相近均线,跟成本线没半毛钱关系。
那为什么原作者要写 SUM 这个 0?基本只可能是——从网上复制粘错了。SUM(X,0)在通达信里几乎没有正确用法(要么写 5、10、20 表示窗口,要么别用)。
四、修复后,效果立竿见影
我把那条不该出现的累加去掉,把死变量清掉,重新跑:
G1 等于 CLOSE;G2 等于 LOW;G4 等于 HIGH。
COST90 用 CLOSE 的 60 日 EMA 替代,作为长期均线。
单日资金净额用两日高低差计算,不再累加。
两条筹码线分别算"价格高于/低于长期均线"的 EMA。
XG 等于 CROSS(筹码1,筹码2)。
(完整可复制版本见文末)
信号从 1404 个涨到 1734 个(说明之前累加还压掉了一些真实信号),胜率从 43% 升到 49%,20 日均收益从 0.61% 升到 2.48%——只是删一行的事。
五、给你的三个判断启发
公式里如果有 SUM 后面跟 0,先想想是不是写错了——0 表示"从开头累加",几乎都是 bug。
分子分母同时乘同一个常量,这个常量大概率是冗余或错误——一个有效权重不会在两端都用满。
号称"穿越 90% 成本"的公式,在没有真实筹码分布数据的前提下,可能只是两根均线。
优化版公式(可直接复制进通达信,先删除上次粘贴的同名公式):
G1:=CLOSE;G2:=LOW;G4:=HIGH;
COST90:=EMA(CLOSE,60);
VAR5:=SUM(VOL,2)/((HHV(G4,2)-LLV(G2,2))*100);
VAR6:=(G1-REF(G1,1))*VAR5;
筹码1:=EMA((G1-COST90)/20*1.2/5+5,3);
筹码2:=EMA((COST90-G1)/20*1.2/5+5,3);
XG:CROSS(筹码1,筹码2);
如果你身边有人在迷信"穿越 90% 成本线"这种公式——把这条转给他。他可能跑了一年,跑出一堆"信号",回放复盘才发现:那串数字从来就是错的。

