通达信区间统计公式里真正决定结果的是区间的起止定义,算式本身只有几行。区间换一种取法,同一段行情的涨跌幅、振幅与量能读数都会变,这是两份复盘记录对不上的一处常见来源。先把起止定死,再去算那几个量,顺序反了会反复返工。
下面按与逐根统计的差别、起止的三种取法、常统计的量、客户端自带入口、公式写法、口径不一致的情形与记录模板七层讲。文中菜单名与函数名为通达信客户端的通用描述,不同版本与券商定制版对区间入口的位置、可读出的统计项与字段单位存在差别,请以你所用客户端的实际界面与帮助文档为准。
一、区间统计与逐根统计是两件事
通达信区间统计公式与逐根统计的区别先落在输出形态上:逐根统计是每一根 K 线各自算一次,输出的是一条与K线等长的序列,图上每个位置都有自己的值。区间统计是把一段范围内的数据汇总成一个或几个数,输出的是针对这一段的结果,不随光标移动。
| 对比项 | 逐根统计 | 区间统计 |
|---|---|---|
| 输出形态 | 与K线等长的序列 | 针对区间的一组数 |
| 随光标变化 | 不随光标变化,随根位置变化 | 随区间范围变化 |
| 适合回答的问题 | 当前这根处于什么状态 | 这一段整体发生了什么 |
两类统计在复盘里承担的职责不同。逐根统计用来找位置,区间统计用来给一段行情做摘要。把区间统计的结果当成逐根判据写进公式,会出现一个区间只对应一个数、图上却画出一条水平线的情形,读起来会误导。
二、区间的起止有三种取法
第一种是按日期取,在图上选定起点与终点,起止是两根具体的 K 线。这种取法最直观,适合已经发生的一段历史,缺点是换一段行情就要重新选。
第二种是按条件取,起止由某个条件第一次或最后一次成立的位置决定。这种取法可以写成公式,条件一变区间就跟着变,适合把同一套统计反复用在不同的标的上。
第三种是按固定长度取,从当前往回数若干根。这种取法写起来最短,问题是随着新数据加入,区间整体向前滑动,同一段行情的统计值会逐日变化,不适合写进需要长期对比的记录。
{ 条件式起止的写法:用 BARSLAST 定位条件最近一次成立的位置 }
起点距离:=BARSLAST(起始条件);
{ 起点距离是「条件成立那一根到当前的根数」 }
{ 用它作为窗口长度,交给区间统计函数 }
区间最高:=HHV(H, 起点距离+1);
区间最低:=LLV(L, 起点距离+1);
{ 加 1 是为了把条件成立的那一根也算进区间 }
第二个写法里的加一是最容易漏的地方。窗口长度是根数,介于起止之间共有多少根需要按实际情况核对:起止各算一根时,窗口长度为两端的距离加一。漏掉这一项,区间会少算一根,这一根恰好是起点或最新一根时,误差最明显。
三、复盘里常统计的几个量
| 统计量 | 计算依赖 | 需要一并记录的口径 |
|---|---|---|
| 区间涨跌幅 | 末根收盘与首根收盘的比值 | 用的是收盘价还是区间开票价 |
| 区间振幅 | 区间最高与最低的差值 | 分母取首根收盘还是区间中价 |
| 区间长度 | 首尾两端的距离 | 两端各算一根还是只算其中一端 |
| 量能累计 | 区间内成交量或成交额的累加 | 单位是手还是股,是个股还是成交额 |
| 换手累计 | 成交量与流通股本的关系 | 流通股本的来源与单位 |
第三列是这张表的重点。同一个「区间涨跌幅」,用末根收盘比首根收盘与用末根收盘比首根开盘,得到的数值不同;同一个「区间振幅」,分母取首根收盘与取区间中价,得到的数值也不同。名字相同而口径不同,是两份记录对不上的第二处来源。
四、客户端自带的区间统计入口
部分版本在K线图上提供区间统计入口:在图上选出一段范围之后,可以从菜单里读出与该范围相关的一组数值。入口名称与可读出的统计项在不同版本之间存在差异,个别版本把它放在工具栏或图表的右键菜单里。
用自带入口的好处是口径由客户端给定,不必自己定义;代价是它的口径固定,未必与你的记录模板一致。可行的做法是先看一遍它给出了哪些项、各项用的是哪个价格,再决定是直接采用还是用公式自己算一套。两者混用会让记录里的数字来自两套口径。
五、用公式自己算的一套写法
下面这段写法把通达信区间统计公式的口径全部显式写出来,便于逐项核对与替换。
{ 一段可复用的区间统计,参数写在最前面 }
起点距离:=BARSLAST(起始条件);
根数:=起点距离+1;
{ 首尾两根的收盘 }
首收:=REF(C, 起点距离);
{ 汇总项 }
区间涨幅:=(C/首收-1)*100;
区间高:=HHV(H, 根数);
区间低:=LLV(L, 根数);
区间振幅:=(区间高-区间低)/首收*100;
量能累计:=SUM(V, 根数);
{ 区间长度与根数在这里是同一个量,便于核对 }
这段写法的特点是所有口径都显式写在算式里:分母用的是首根收盘,涨跌幅用的是末根收盘,区间长度按两端各算一根。换一个口径只改对应那一行,其余行不动,改动范围可控。
需要注意起点距离为零的情形。条件在最新一根上成立时,起点距离为零,根数为一,区间退化成单根,振幅与涨幅都变成当根内部的量,数值会显得异常。判定时给根数加一个下限,避免把单根当成区间。
六、三种口径不一致的情形
第一种是复权口径不一致。区间跨越除权日时,用不复权数据算区间涨跌幅会包含除权带来的价格跳变,用前复权数据算则不包含。两次统计如果用了不同的复权设置,差值就是那一次除权的幅度。
第二种是数据长度不一致。分钟级别的区间统计如果起点早于客户端保留的最早数据,起点会被推到有数据的第一根,区间长度实际变短。核对办法是把区间长度与实际数据长度对照一次。
第三种是停牌期间的计入方式。停牌期间没有成交,但有日期推进,按日期取区间与按根数取区间在这一点上处理不同。用日期取时,停牌段被计入区间长度但不贡献量能;用根数取时,两者都不计入。
三种情形有一个共同的排查入口:把区间长度单独输出一次,与预期对比。长度对不上,说明起止定位与实际取数不一致;长度对得上而数值对不上,问题就落在复权设置或单位换算上。先分长度、再分数值,比同时怀疑多个环节更快。
七、记录模板与下一步
一条可复核的区间记录包含五项:起点与终点的确定方式、区间长度、涨跌幅与振幅及其分母口径、量能累计及其单位、取数所用的复权设置。五项写全,别人按同一套条件重算一遍,得到的数应当一致。
{ 记录模板的字段顺序 }
起止方式 : 条件式 / 日期式 / 定长式
区间长度 : 根数
涨跌幅 : 数值 (分母 = 首根收盘)
振幅 : 数值 (分母 = 首根收盘)
量能累计 : 数值 (单位 = 手)
复权设置 : 前复权 / 不复权
下一步可以把这套模板先用在最近三段行情上做一次自查,核对通达信区间统计公式的输出与预期是否一致:如果同一段行情用条件式起止与日期式起止算出来的结果差得比较多,说明条件式定位到的起止与你的预期不同,需要先确认条件成立的位置,再谈统计值。这套字段与逐根统计的结果放在一起看,才能把一段行情的位置与整体摘要对上,逐根口径的写法见 通达信公式编写教程 一栏;形态段落如何切分,见 量价形态与信号拆解 一栏。
文中菜单名、函数名与字段单位为通达信客户端的通用描述;不同版本与券商定制版对区间入口位置、可读出的统计项、复权默认设置与字段单位存在差异,具体请以你所用客户端的实际界面、帮助文档与实际输出为准。本文只讨论公式写法与统计口径,不构成任何投资建议。
