通达信涨停板公式要说的第一件事是它到底在算什么:它把涨停价的计算规则写成一句可以判断成立或不成立的表达式。搞清这一步,后面那些信号失真就都落在同一个地方——涨停价算得对不对,而不是判断符号写得对不对。
下面按”机制 → 写法 → 失真来源 → 自查清单”讲。函数名(ZTPRICE、DTPRICE)与语法以通达信金融终端个人版为准,涨跌幅限制比例属于交易所规则,会随板块与规则调整变化,本文只讲它在公式里怎么用,不涉及对具体标的的判断。
一、涨停价是一个计算结果,不是一个标记
行情数据里没有”这个价格是不是涨停价”这样的字段,只有成交价。公式要判断涨停,得自己把涨停价算出来。通达信提供了现成的函数:
ZTPRICE(REF(CLOSE,1), 比例) ← 返回涨停价
DTPRICE(REF(CLOSE,1), 比例) ← 返回跌停价
{ 参考写法:收盘价达到涨停价 }
涨停 := C >= ZTPRICE(REF(C,1), 0.1);
这两个函数做的是同一件事:拿前一个周期的收盘价,乘上 1 + 比例,再按交易所的取整规则处理到分位。所以公式判断的准确性,取决于两个输入对不对——前收盘价对不对、比例对不对。后面所有的失真场景,都能归到这两个输入上。
C >= REF(C,1) * 1.1。手写乘法少了取整这一步,成交价与理论值差一分钱的时候,条件就不成立。用 ZTPRICE 让软件自己处理取整,能直接消掉这一类误差。二、三种写法,含义各不相同
通达信涨停板公式的写法分歧,集中在用哪个价格参与比较上。同一个条件配不同的价格字段,得到的是三件不同的事,这一点在动手写之前要先想清。
| 写法 | 含义 | 对应的事实 |
|---|---|---|
C >= ZTPRICE(REF(C,1), 0.1) |
收盘价达到涨停价 | 收盘时封在涨停价上,这一根 K 线收在涨停位置 |
H >= ZTPRICE(REF(C,1), 0.1) |
最高价达到涨停价 | 当根 K 线内曾触及涨停价,收盘可能已经打开 |
O = C AND C >= ZTPRICE(REF(C,1), 0.1) |
开盘与收盘都是涨停价 | 全天在涨停价上成交,K 线呈一字形态 |
三条表达式的输出并不互相包含:用最高价判断的那一条,成立的位置比用收盘价判断的多;一字形态是前两条的子集。写公式时先确定自己要的是哪一件事,再选价格字段,不要拿 H 的判断结果当成”收在涨停”来用。
三、比例参数写死,是失真最集中的地方
通达信涨停板公式失真最集中的一处就在这个比例参数上。涨跌幅限制比例由标的所属板块与状态决定,不是一个全市场统一的数。比例写成 0.1 的时候,公式只对比例等于 0.1 的那一类标的是对的;比例不同的那几类,算出来的”涨停价”根本不是涨停价。
这个问题没有一劳永逸的写法。可行的做法是分开处理:按标的分类各写一条公式,或者在公式里对比例做分层判断,把不同比例档位的分支写清楚。把比例统一写死再指望它覆盖全部标的,得到的是一份混着正确与错误信号的清单。
{ 分层写法示意:不同档位分开判断 }
比例 := IF(属于第一档, 0.1, IF(属于第二档, 0.2, 0.05));
涨停 := C >= ZTPRICE(REF(C,1), 比例);
← 档位怎么分要照你软件里能取到的属性字段来定,
这里只演示参数的传递方式
REF(C,1) 用的是当前公式的复权口径:在复权价上算,除权除息那一天的前收盘价已经被调整过,ZTPRICE 算出来的值与当日真实的涨停价不是同一个数。要判断真实涨停,公式要在不复权口径下算。四、误判场景清单
下面这些场景都会让通达信涨停板公式的输出与事实不一致。它们的共同点是公式没有写错,是它的前提在特定条件下不成立。
| 场景 | 公式哪里失效了 | 表现 |
|---|---|---|
| 标的的比例档位与写死的参数不同 | 比例输入错 | 整份清单里混入不成立的信号 |
| 除权除息日 | 前收盘价被复权调整 | 这一天附近的判断偏离事实 |
| 停牌前后 | 停牌期间没有 K 线,REF(C,1) 取到的是停牌前那一根 |
复牌当天的比较参照错位 |
| 新股上市初期 | 上市初期无涨跌幅限制或限制不同,比例假设不成立 | 这一段出现与事实不符的判断 |
| 用错了价格字段 | H 与 C 混用 |
把”盘中触及”当成”收盘封住” |
| K 线根数不足 | REF(C,1) 取不到值 |
图上最左侧一段没有输出 |
复权口径怎么切:图表上的复权方式决定了公式读到的价格。把图表切到不复权,同一个公式的输出会跟着变——这不是公式的问题,是它读到的数变了。要判断真实的涨停价,公式要在不复权口径下运行;要在长周期上看价格的连续性,复权口径更合适,但这时候它判断的已经不是当日真实的涨停价。两种口径各有用途,先明确这一次要的是哪一个,再选图表的复权设置。
五、未来函数:让历史看起来很顺的那种写法
有一类函数在计算当前这一根 K 线时,会读到它之后的数据。用了这类函数,公式在历史区间上回看的方向上会表现得很顺,但在当时那一刻算不出同样的结果。判断方法是在公式里加一条提示当前 K 线位置的输出,看信号是否只在特定位置出现:
{ 判断当前是不是最后一根 K 线 }
是最后一根 := ISLASTBAR;
{ 把信号与这个判断一起输出,看两者是否同步 }
信号: 涨停, COLORRED;
末端: 是最后一根, COLORGRAY;
← 信号只在末端这一根才出现,说明公式依赖了
只有在数据结束时才知道的信息
另一条相关的检查是往回取数据的写法。公式结尾用 REF 或多根 K 线的极值去做比较,本身不算未来函数;只有在取数的方向上越过了当前 K 线,才会读到之后的数据。检查的方向是:把它挂在副图上,往历史区间拉远一点,看信号会不会随着区间变长而改变位置。
六、上线前的自查清单
- 确认用的是哪个价格字段:
C、H、O三选一,先在纸上写清要判断的是”收盘封住”还是”盘中触及” - 确认比例档位:参数有没有按标的分类分开写,写死的档位覆盖了哪一类
- 确认复权口径:公式挂载的图表用的是复权还是不复权,判断真实涨停要在不复权下算
- 挑一段含除权与停牌的历史区间:把公式挂上去逐段看,边界处有没有偏离事实的输出
- 查未来函数:把信号与
ISLASTBAR一起输出,看两者是否同步出现 - 把结果当清单位置看,不当结论看:表达式输出的是满足条件的位置,条件成立与当时能否成交之间还有价格与时间差
本文讲的是公式语法、参数取值与失真场景,只作技术研究口径,不构成对任何标的的判断。公式输出的位置需要自己在历史行情上逐段核对;参数与条件的取值不同,输出的清单也会不同,这属于公式的设定,不属于行情的结论。
站内还有 量价形态与信号拆解 的其他条目,指标回测与风险验证 里讲信号验证的口径,选股公式与预警 里讲条件表达式与预警的设置方法,可对照查看。
