先把定义固定下来:涨速是单位时间内价格的变化率,分子是价格差,分母是这段价格差所跨的时间长度,两个都得写清楚。写通达信涨速公式源码时,口径对不上先查分母,同一个价格差,除以一分钟还是除以一根 K 线,得到的是两个数。行情列表里那一列、自己在副图上算出来的线、把式子抄到另一个周期的输出,只要有一处的分母不一样,读数就对不上。

下面按定义、两类取数、盘中与盘后的差别、周期换算、单位量纲、边界、逐根比对七步展开。函数名与行情字段以本机公式管理器的函数列表和实际返回为准。

一、定义:分子与分母各取什么

涨速写成一句算式,就是单位时间内的价格变化率。式子里只有两个量,价格差与这段价格差所跨的时间。分子决定「哪两个价」,分母决定「走了多久」,两处先固定,算出的数才有意义。

分子的取法有两种落点。一种取相邻两根的收盘价之差,用 C - REF(C,1),跨的时间是一根 K 线代表的时长;另一种取当根开盘到最新价之差,用 C - O,跨的是这一根内部的时长。两种分子在同一根上不相等,跳空开盘的根上差得最开。

分母跟着分子走。取 C - REF(C,1) 时,分母写一根 K 线代表的分钟数;取 C - O 时,分母写从开盘走到当前这一刻的分钟数。分子与分母得描述同一段时间,少了这个对应,涨速就谈不上量纲。

{ 分子与分母配对,涨速才有意义 }
DX := C - REF(C, 1);      { 分子:相邻两根收盘价差 }
{ 分母:一根 K 线代表的分钟数,日线写 240,60 分钟写 60 }
ZS : DX / 240;            { 比值口径,量纲是每根多少价格 }

二、两类取数:快照字段与 K 线自算

写通达信涨速公式源码时,取数只有两条路,来源不同,结果也不同。一条是读行情快照字段:盘中每一次刷新都带一个价与一个时间戳,客户端拿两次快照的价差除以时间差,得到的是盘口口径的涨速。另一条是由 K 线序列自己算:读本地保存的历史 K 线,用当根与前一根收盘价之差除以周期时长。

两条路的区别在数据来源。快照字段来自实时行情推送,分时数据在盘中逐笔累积;K 线序列来自本地保存的历史数据,日线与 60 分钟线的每一根都是打包好的定值。同一个时刻,快照口径给出一个会动的数,K 线口径给出的是还没收盘、会随后续刷新重算的数。

自算这一路要落到公式里,先在公式管理器新建一个「技术指标公式」,把输出挂到副图上看。副图上出现的是一条线,它由当前周期上每一根的收盘价差组成。把这条线切到 60 分钟周期,序列换成 60 分钟 K 线,输出跟着变。

{ 新建技术指标公式,挂副图看输出 }
DX : C - REF(C, 1);       { 每一根的收盘价差 }
ZS : DX / 240;            { 日线口径,分母写一根的分钟数 }

三、盘中与盘后不是同一条序列

盘中那一根 K 线还没走完,C 取的是最新价,分母取的时间也在往前走,涨速随每一次刷新变化。同一个式子,上午跑一次、下午再跑一次,分子分母都不同。收盘之后 C 定下来,分母不再增长,再把式子跑一遍,拿到的是一个不再变化的定值。

把两个时刻的输出当成同一个数去比,就会出错。差别不在公式,在取数的时间点:盘中取的是未完成的一根,盘后取的是完成的一根,做记录时把取数时刻一起写上。

{ 同一根 K 线,盘中与盘后 C 不同 }
TA : C;                   { 盘中是最新价,盘后是收盘价 }
DX : C - REF(C, 1);       { 分子随 C 变 }
ZS : DX / 240;            { 分母随时间增长 }
{ 收盘前跑一次,收盘后跑一次,两次输出不同 }

分时图上还有一处叠加:当天最末那一根分时 K 线也在随刷新变化,它之前的分时根已经固定,截图留证时连时刻一起记下。

四、周期换算:分母写分钟数还是周期根数

周期换算这一段是通达信涨速公式源码里容易踩空的地方。分母有两种写法,一种写时间,一种写根数,两者只在「一根代表多少分钟」上挂钩。日线一根代表 240 分钟,60 分钟线一根代表 60 分钟,分时一根代表 1 分钟。分母写死成根数,换周期之后含义跟着变,数值却不会自己跟着改。

看一个具体情形:式子里把分母写成 1,意思是相邻两根之间的变化率。在日线上它衡量隔一天的变化,在 60 分钟线上衡量隔一小时的变化,在分时上衡量隔一分钟的变化。同一个 1,三种周期下对应的时间跨度不同,输出不能横向代入。

{ 分母写根数,换周期就换含义 }
{ 写法 A:分母按根数 }
A : (C - REF(C, 1)) / 1;

{ 写法 B:分母按分钟数,换周期时要一起改 }
B : (C - REF(C, 1)) / 240;   { 日线按 240 分钟 }

{ 写法 C:把周期时长做成参数,换周期只改参数 }
P := 240;                    { 日线填 240,60 分钟填 60,分时填 1 }
Cc : (C - REF(C, 1)) / P;

把日线的写法直接搬到 60 分钟周期上,分母还是 240,分子却换成了 60 分钟 K 线的收盘价差,输出跟着缩小一个量级,量的已经不是同一件事。分时、60 分钟、日线三种口径各管各的,不能互相代入,跨周期横比之前先把分母统一到该周期的分钟数。

五、单位与量纲:三种写法分开标注

同一个涨速可以写成三种形式,含义各不同。第一种是比值,量纲是每根多少价格,适合在同一周期内横比;第二种是每分比值,把价格差除以分钟数,量纲统一为每分钟多少价格,适合跨周期比较;第三种是百分比,把比值再乘一个换算系数写成分数形式,便于阅读。

写法 算式 量纲 适用
比值 (C – REF(C,1)) / 1 每根多少价格 同一周期内横比
每分比值 (C – REF(C,1)) / 分钟数 每分钟多少价格 跨周期比较
百分比 比值乘换算系数 分数形式 阅读与展示

三种写法不能混用同一个字段名。表里把量纲单列一栏,就是让读表的人知道这一列数比的是每根、每分钟还是分数。单位栏省掉,两个量纲不同的数会被当成同一件事去比。

六、边界:首根、复牌与集合竞价段

开盘首根的 REF(C,1) 取的是上一交易日最后一根的收盘价,中间跨过一个整夜,这一根的涨速含了隔夜跳空。把它与盘中其它根摆在一起看,数值偏大,原因在分母与参照跨了非交易时段,不在行情当天走得快。

停牌复牌的首根也有同类问题。停牌期间不生成 K 线,复牌首根的 REF(C,1) 接的是停牌前那一根的收盘价,中间隔过的交易日不计入分母,跳空的部分整根写进这一根,核对时按交易日历确认这根之前有没有缺失的交易日。

集合竞价段的取值与连续竞价段不同。开盘前的撮合数据与开盘后逐笔推送的字段,在有些行情源里分开给出,在有些行情源里合成一笔。这一段的涨速以本机行情接口实际返回的字段为准,不要照搬别处的口径。

{ 三条边界,用注释标出即可 }
{ 当日首根:REF(C,1) 跨了一整夜,含隔夜跳空 }
{ 复牌首根:REF(C,1) 跨过一个或多个交易日 }
{ 集合竞价段:字段以本机行情接口返回为准 }

七、逐根比对验证法

验证一条涨速写得到底对不对,办法是拿几根 K 线逐根手算,再与公式输出对照。步骤按下面走。

  1. 在公式管理器新建一个「技术指标公式」,把待验证的式子写成一支输出,挂到副图上。
  2. 在 K 线图上选一段包含跳空、停牌、首根三类情形的区间,记下行情列表里同一根显示的数。
  3. 光标停在某一根上,读出它的 C 与 REF(C,1),两个价相减得到分子。
  4. 确认当前周期,写出分母应当取的分钟数:日线 240,60 分钟 60,分时 1。
  5. 手算分子除以分母,与副图上这一根的输出对齐;对不上就回到分母那一栏查周期换算。
  6. 把副图输出与行情列表那一列对比,两者不等时先确认列表用的是哪一类取数口径。

比对时一次只改一个量。先固定分母,逐根核分子;分子对上了再换周期,核分母的换算。两处一起改,对不上时分不清是哪一处出的问题。

保留一份记录:周期、分母取值、取数时刻、对照的三根原始价。下一次换周期时拿同一张表再跑一遍,这一条通达信涨速公式源码在不同口径下的输出边界就显示出来了。

站内还有 公式编写教程 的条目,讲怎么新建一支公式并挂到图上;指标原理与参数 讲取数与分母的口径;公式报错与卡顿排查 讲输出与预期不符时怎么定位,可对照查看。

本文只作技术研究口径,不涉及也不构成对任何标的的判断。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。