通达信涨幅指标公式的算式只有一个形状:差值除以基准,再乘 100。(CLOSE-REF(CLOSE,1))/REF(CLOSE,1)*100 这一行里,减法与除法都没有商量的余地,真正要定下来的是分母写谁。
下面把四类基准的算式与含义摆开,再讲分母的边界、跨周期与除权带来的口径差别,最后给一套能上手的验证办法。语法以通达信金融终端个人版为准,用 Ctrl+F 打开公式管理器可以新建与查看公式,不同版本的入口位置与提示文字可能有差异。
一、算式只有一个形状,变的是分母
涨幅在计算上是一件事:拿当前值与一个参照值相减,再除以这个参照值。减法部分说明「差了多少」,除法部分说明「相对于谁差的」。同一段行情里,差值可以是一样的,分母换了,输出的数值就换了。
| 基准 | 算式 | 含义 | 什么时候用 |
|---|---|---|---|
| 前一根收盘价 | (CLOSE-REF(CLOSE,1))/REF(CLOSE,1)*100 | 与上一根收盘比,逐根连续 | 描述一根接一根的变化过程 |
| 当根开盘价 | (CLOSE-OPEN)/OPEN*100 | 与本根开盘比,只看当根内部 | 描述这一根 K 线本身走了多远 |
| 区间首根收盘价 | (CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100 | 与 N 根之前比,跨若干根 | 描述一段区间里的累计变化 |
| 区间均价 | (CLOSE-MA(CLOSE,N))/MA(CLOSE,N)*100 | 与 N 根均价水平比 | 描述当前价在区间中的相对位置 |
四个基准放在一起看,通达信涨幅指标公式里真正变的只有分母这一处,分子跟着分母一起改。前两根的输出是逐根的,后两根的输出是相对的,把它们画在同一条副图上,两条线的数值不能直接比大小,因为参照的起点不是同一个。
二、分母取不到值时:先判断再取
分母有两类边界。一类是分母等于 0,除法在计算上走不通;另一类是最左侧取不到值,第一根 K 线没有上一根,REF 取不出东西。这两类都要在写公式的时候先想到,而不是等它把结果带偏了再回头找。
{ 最直接的写法 }
涨幅: (CLOSE - REF(CLOSE,1)) / REF(CLOSE,1) * 100;
{ 分母为 0 时给一个替代值:先判断再取 }
涨幅: IF(REF(CLOSE,1) = 0, 0, (CLOSE - REF(CLOSE,1)) / REF(CLOSE,1) * 100);
{ 用 MAX 把分母垫起来 }
涨幅: (CLOSE - REF(CLOSE,1)) / MAX(REF(CLOSE,1), 0.001) * 100;
两段保护的思路不一样。IF 是先判断再取,分母真正为 0 的那一根走另一条路,输出被替换成你给的数,其余各根算出来的值与直接写法一致。MAX 是把分母抬到一个下限,代价是所有取值都被改动过一点,垫底值取得越小,改动越小。
写 IF 的时候要把替代值想清楚,因为输出里会多出一个不来自计算的数,画到副图上就是一根没有意义的柱子。写 MAX 的时候要知道它不区分「分母为 0」与「分母很小」,只按大小取。两类边界在不同版本里的处理也可能有差异,以官方版本说明为准。
三、跨周期:日线口径与周线口径不是换算关系
把通达信涨幅指标公式挂到周线上,同一个算式还在,参照物却换了。周线的一根 K 线代表一周,它的上一根是上一周的最后一根,中间隔着的不是一天。
{ 算式不变,参照物随周期变 }
涨幅: (CLOSE - REF(CLOSE,1)) / REF(CLOSE,1) * 100;
{ 挂在周线上:CLOSE 是本周最后一根的收盘价
REF(CLOSE,1) 是上一周最后一根的收盘价
两者之间隔着一周,不是隔一天 }
所以周线上的数值不是把日线数值相加或平均得出来的,两个周期各自按各自的 K 线序列算。同一段行情在两个周期上给出不同的数属于正常,把日线的结果换算过去再与周线的结果比对,这个做法本身就不成立。
四、除权与复权:跳变来自数据口径
除权日前后,价格序列本身不连续,但在不复权口径下,REF 取到的上一根收盘价与当根收盘价分处断点两侧。同一根算式在这一点上会给出一个幅度明显的跳变。
{ 除权日附近,价格序列在断点两侧 }
涨幅: (CLOSE - REF(CLOSE,1)) / REF(CLOSE,1) * 100;
{ 这个跳变来自数据口径,不是除法写错
换成另一种复权口径,序列被接上,同一个位置的值会变 }
这一点在核对数值之前要先确认:两边的复权设置是不是同一种口径。口径不同,历史段的数值会整体重算,画面上的曲线形状也会跟着变。软件里复权设置项在不同版本的入口位置与措辞可能有差异,以官方版本说明为准。
五、输出与验证:小数位、正负号与逐位对照
通达信涨幅指标公式算出来的数值,本身是一个「倍数乘 100」的数。界面上的颜色、小数位、有没有百分号,都属于显示层的处理,改的是看着像什么,不是数本身是多少。把显示改成带符号的写法,只影响观感。
{ 数值与显示分开写 }
涨幅: (CLOSE - REF(CLOSE,1)) / REF(CLOSE,1) * 100, COLORRED;
{ 涨跌幅分档是公开交易规则里的数值,这里只用来说明量级
10 交易所主要板块的档位
5 风险警示类标的的档位
20 部分板块的档位
这些数来自交易规则,公式本身不判断分档 }
验证的办法是逐位对照。在图上找一根数值已知的 K 线,把公式输出与它摆在一起,一位一位地核小数位。核不上时先看小数位设置,再看复权口径,最后才去看公式里的括号。括号配对出问题时,函数不会静默算错,公式管理器里会直接给出提示,不同版本的提示文字可能不同。
把「基准怎么选」归纳成几条可套用的判断:
- 要看的是逐根连续变化,分母取前一根收盘价。
- 要看的是这一根 K 线自身走了多远,分母取当根开盘价。
- 要看的是若干根里的累计变化,分母取区间首根的收盘价。
- 要看的是当前价在区间中的相对位置,分母取区间均价。
- 分母可能出现 0 或取不到值时,先把这两种情形单独写出来,再决定用 IF 还是 MAX。
这几条对照着读,选基准这件事就变成查表。选定之后不要中途换基准,同一条副图上的两种基准之间不能直接比大小,因为参照的起点不是同一个。从通达信涨幅指标公式的角度看,写对的关键始终在分母那一处,其余都是它的延伸。
本文讲的是比值的基准选择与写法,跨周期与复权设置属于数据口径,不同口径对应不同的数值,不属于行情的结论。本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信指标原理与参数 的条目,公式回测与风险 里讲数值口径怎么固定,复盘方法 里讲怎么把输出与图上对照,可对照查看。
