
最近有一类公式非常火,叫"筹码选股"。它的逻辑听起来很高级:散户被套的 90% 成本线一旦被主力穿越,就可能涨。
听起来很有道理。但我把这类公式里最典型的一个版本做了 300 只股票、260 个交易日的全回测,结果让我心里凉了一截——
一、原版公式在做什么?
{=== 参数定义 ===}
G1:=CLOSE; G2:=LOW; G3:=OPEN; G4:=HIGH;
VAR1:=30; VAR2:=10;
VAR3:=VOL/10000*G1/100;
VAR4:=REF(G1,1);
{=== 两日资金净额(简化衡量买盘强度)==='}
VAR5:=SUM(VOL,2)/((HHV(G4,2)-LLV(G2,2))*100);
VAR6:=(G1-VAR4)*VAR5;
{=== ⚠️ 关键:从上市第一天开始累加 ===}
VAR7:=SUM(VAR6,0);
VAR8:=VAR7;
{=== 两条"筹码线" ===}
筹码1:=EMA(((G1*VAR8-REF(COST(90),1)*VAR8)/20+250)*1.2/5,3),COLORMAGENTA;
筹码2:=EMA(((REF(COST(90),1)*VAR8-G1*VAR8)/20+250)*1.2/5,3),COLORCYAN;
{=== 选股 ===}
XG:CROSS(筹码1,筹码2);公式看起来复杂,核心就一句话:价格穿越 90% 散户成本时,买。
二、回测结果——出乎意料
我用沪深 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)` 在通达信里的含义是"从上市第一天开始累加,全部包含"。这条累加链就是一根从公司 IPO 那天一直串到今天的资金流水总和。
公式后面两条"筹码线"分子里都乘了 `VAR8`:
筹码1:=EMA(((C - 90%成本)*VAR8/20 + 250)*1.2/5, 3); 筹码2:=EMA(((90%成本 - C)*VAR8/20 + 250)*1.2/5, 3);
分子分母里 `VAR8` 是同一个数,约掉之后`VAR8`其实只影响 `250` 那一项的微小扰动——本来它该是核心权重,结果变成了一个 5 位数的小数点偏移。换句话说,公式号称穿越 90% 成本,其实穿越的是约等于 250 的两根相似均线,根本不是成本线。
四、修复后,效果立竿见影
我把那条不该出现的累加去掉,把死变量清掉,重新跑:
{=== 去累加、去死代码 ===}
G1:=CLOSE; G2:=LOW; G4:=HIGH;
{=== 直接算价格 vs 长期均线(替代 90% 成本) ===}
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);信号从 1404 个涨到 1734 个(说明之前累加还压掉了一些真实信号),胜率从 43% 升到 49%,20 日均收益从 0.61% 升到 2.48%。
五、给你的三个判断启发
公式里如果有
SUM(x,0),先想想是不是写错了——0 表示"从开头累加",几乎都是 bug。分子分母同时乘同一个常量,这个常量大概率是冗余或错误。
号称"穿越 90% 成本"的公式,在没有真实筹码分布数据的前提下,可能只是两根均线。
如果你身边有人在迷信"穿越 90% 成本线"这种公式——把这条转给他。他可能跑了一年,跑出一堆"信号",翻倍复盘才发现:那串数字从来就是错的。
