通达信涨幅公式为什么和行情栏不同?昨收、开盘与百分比基准排查

发布日期:2026年10月16日。同一根K线,公式算出约2.86%,行情栏却接近8%,未必是公式坏了。先确认分母用的是前一周期收盘价,还是当前周期开盘价;再确认结果是0.08这种比例,还是8这种以百分数表示的值。比较基准不同,结果本来就不同。
适用范围:本文讨论通达信周期行情字段的原创计算模型,依据官方红宝书,未做客户端实测。默认字段有效且口径一致;不将样本等同真实证券行情,不给个股买卖建议,也不把某个百分比当成通用涨停规则。
一、前收基准与开盘基准回答两个问题
以前一根收盘价为基准,描述当前收盘相对前一根收盘的变化;以本根开盘价为基准,描述本根开盘至收盘的变化。后者也常用于解释K线实体方向,但不能自动替代行情栏的涨跌幅定义。
| 原创样本 | 数值 | 计算结果 |
|---|---|---|
| 前一根收盘 | 10 | 前收基准 |
| 当前开盘 | 10.5 | 开盘基准 |
| 当前收盘 | 10.8 | 当前比较值 |
| (10.8/10-1)*100 | 8 | 相对前收变化8% |
| (10.8/10.5-1)*100 | 约2.857143 | 开盘至收盘变化约2.857143% |
两项都使用当前收盘10.8,却回答不同问题。不能为了凑到行情栏显示值而随意切换分母;应先明确目标字段的定义,再核对公式。
二、把两个基准分别输出,避免变量名误导
PREVC:=REF(CLOSE,1);
OKP:=PREVC>0;
SAFEPC:=IF(OKP,PREVC,1);
OKO:=OPEN>0;
SAFEO:=IF(OKO,OPEN,1);
PCTPREV:IF(OKP,(CLOSE/SAFEPC-1)*100,DRAWNULL);
PCTOPEN:IF(OKO,(CLOSE/SAFEO-1)*100,DRAWNULL);
这是一份多输出技术指标学习示例,假设使用正常正价格市场且输入有效。先构造安全除数,再把不能使用的基准显示为无效;首段缺少上一根时,不能仅凭一个大于0的比较就声称已经补齐历史。本例没有定义各客户端对缺失输入的全部传播方式。
变量PREVC只是上一计算周期的收盘。日线上通常指前一根可用日K线,不一定是日历昨天;5分钟图上则是上一根5分钟K线,不能继续叫“昨日收盘”。名称不会自动改变REF的周期单位。
三、0.08与8之间差的是尺度
CLOSE/PREVC-1得到比例;再乘100得到以百分数表示的数值。本例前者约0.08,后者约8。若阈值也用百分数尺度,比较8与5才是在同一尺度;若保留比例,就应比较0.08与0.05。这里5仅用于演示尺度,并非选股建议。
不要把已经乘100的结果再乘一次,也不要把8直接当成800%的数学比例。显示两位小数可能掩盖原值差异,临界值附近应保留足够精度并写清大于还是大于等于,而不是根据屏幕上四舍五入后的数字改条件。
四、与行情栏对照前还要核对四种口径
- 时点:未结束K线的CLOSE可能随行情变化。公式采样时刻应与行情栏一致,事后收盘值不能直接重建盘中结果。
- 周期:日线、周线、分钟线的前一根不同。先固定目标周期,不混用上一分钟收盘和当日日线基准。
- 复权:官方CLOSE条目说明复权状态下序列为复权后数据;若行情栏使用另一参考价格,不能假设双方天然相等。
- 品种与字段:官方DYNAINFO(3)对期货和期权列出昨结算价语义,不能把它替换进所有市场后仍统一叫昨收。
特别是在除权除息或转增附近,简单用前一根收盘推算的值可能与行情采用的参考口径不同。官方ZTPRICE条目也提示复权或分红转增带来的价格差异。因此(C/REF(C,1)-1)*100只是指定序列的相对变化,不是所有品种行情栏的通用还原公式。
五、排错时保存最小对照表
逐根记录品种、周期、K线日期、采样时间、复权方式、CLOSE、OPEN、REF(CLOSE,1)、两个计算结果,以及行情栏字段的原名与参考值。先用完整有效样本验证算术,再检查不能对齐的时点和字段。不要只保存最后的百分数,缺少分子分母就难以分辨是公式、数据还是口径问题。
普通涨幅百分比也不能单独识别涨停。不同市场、证券状态和价格规则需要各自核实;本文不把约10%直接标成涨停,不从涨幅大小推导后续收益。
来源与相关教程
原始依据:通达信用户红宝书《通达信公式-全部函数.docx》的CLOSE、OPEN、REF、IF、DRAWNULL、DYNAINFO(3)与ZTPRICE条目。相关:教程中心、REF周期与字段对齐、计算精度与显示舍入、即时现价与历史收盘。不承诺跨版本兼容、行情栏完全一致或投资收益。




