把一份公式挂到周线周期上,容易误以为它算的还是日线上的那一套数,只是把图拉长了一点。实际不是。通达信周K线公式面对的是一个重新汇总出来的序列:每一根代表一周,周内的开高低收由这一周的交易数据合并而成。更要紧的是,最后那一根周 K 在周内还没走完,它上面挂着的四个价格都是可变值。下面从序列形态、未走完那一根、复权、周期切换、显示与核对六个方面拆开说。
一、周线周期上的序列是周序列
周期决定了 X 的含义。在日线上,C 是当日收盘价;切到周线,同一个 C 是本周的收盘价。函数没有变,输入的口径变了。
一根周 K 的四个价格按固定的规则汇总:开盘价取这一周第一个交易日的开盘价,收盘价取这一周最后一个交易日的收盘价,最高价与最低价分别取这一周所有交易日里的最高与最低。成交量按周累计。这些规则是周期的定义,与公式写得好不好无关。
| 项 | 日线周期上的含义 | 周线周期上的含义 |
|---|---|---|
| 开盘价 | 当日开盘 | 本周第一个交易日的开盘 |
| 最高价 | 当日最高 | 本周内出现过的最高价 |
| 成交量 | 当日成交量 | 本周各交易日成交量之和 |
| 窗口长度 | 若干交易日 | 若干周 |
{同一段源码,挂到周线上之后每一行读的都是周序列}
WKMA:MA(C,5);
{取上一周的收盘价:在周线上,它是上一次汇总出来的固定值}
PREVC:REF(C,1);
{本周内的最高与最低:周内未走完时,这两个值还在变}
WKHIGH:HHV(H,1);
要注意 HHV(H,1) 这一行。窗口长度为 1,在日线上它等于当根的最高价,在周线上它等于「本周至今的最高价」。同一个数字落在不同的周期上,含义完全不同。本文只讨论在周线周期上直接挂载公式的取值问题,跨周期引用另一个周期的数据是另一套写法,这里不展开。
二、周内未走完的那一根:四个价格怎么取
这是通达信周K线公式最需要分清的一处。周内最后一根没有走完,它上面的四个价格是动态的。
开盘价在这一周的第一个交易日就固定下来,此后不变。最高价与最低价是「本周至今」的极值,盘中出现新高的那一刻它们就变。收盘价取的是当前最新价,直到这一周最后一个交易日收盘才固定。成交量是本周至今的累计值。
于是同一份公式在同一周内不同时间运行,会给出不同的结果。这不是公式不稳定,是输入本身就是流变的。判断问题时先看变化的是哪一项:如果变化的是开盘价,说明汇总规则被读错了;如果变化的只有高、低、收与量,属于正常现象。
REF(C,1) 读的是上一周的收盘价,那一周已经走完,数值固定;C 读的是本周,本周没走完就还会变。需要稳定输入时,把窗口整体往前挪一根。另一件事是最后那一根之外的历史根。除了除权造成的整体调整,历史周的四个价格都是固定的,公式在历史根上的输出不会随刷新而变化。所以核对时用历史根做基准,比用当根可靠。
三、复权与除权周的衔接
复权设置改变的是价格序列的取值,不改变周期的汇总规则。同一份公式在不复权与在复权两种设置下,读到的 C 是两套数值。
除权发生在一周之内时,这一周的汇总结果会把除权前与除权后的价格放在同一根里,形成一处跳空。前复权按最新价格基准对历史序列整体重算,除权周之前的历史根会被改写,用 REF 往回取到的数值也会随之变化。
通达信周K线公式在复权上的表现与日线一致,只是幅度更容易看出来。核对办法是把复权设置前后各跑一次,看跳空位置是否移动。如果历史根上一段连续的取值整体变了而形状没变,说明复权在起作用,与公式无关。如果只有除权那一根变形,那是汇总规则遇到除权的正常表现。
涉及复权口径本身的设置项在数据管理或界面设置里,不同版本的入口位置有差异,以你所用客户端的帮助文档为准。站内 复盘方法与数据工具 里另有文章讲这类数据设置的核对顺序。
四、周期切换之后公式的表现
从日线切到周线,公式重新计算,不是在日线结果上做抽样。三件事会跟着变。
第一是窗口的含义。源码里的窗口长度参数在周线上按周计数,参数没有改而覆盖的时间跨度变成原来的若干倍。核对方法是切回日线再切回周线,看同一根历史周 K 上的读数是否一致,一致说明只是周期变了,公式逻辑没动。
第二是历史根的数量。同一段历史在周线上汇总出来的根数明显少于日线,取极值类函数的窗口在周线上更容易顶到数据起点,前面若干根会留空。数据长度类的判据在换周期后要重新核一遍阈值。
第三是数据起点。周线的第一根由该周已有的交易日汇总而成,如果数据集从周中间开始,第一根周 K 是不完整的。核对历史极值时要避开这根,否则会取到一个偏窄窗口里的值。
{数据总长度在周线上会明显变小,窗口容易顶到起点}
LEN:BARSCOUNT(C);
LONGENOUGH: LEN > 60;
{历史根上读数固定,可以做为比对基准}
BASE:REF(C,1);
五、主图挂载后的坐标与标签
公式挂到主图上之后,坐标轴按当前周期内出现的价格区间自适应。周线的价格区间比日线宽,同样的坐标高度下,指标线的起伏看起来会被压平一些,这是显示层的表现,不是取值变了。
横轴标签从日期变成周,一根周 K 对应一个周序号。观察窗口里同时显示多少根由缩放决定,缩放只改可见根数,不改公式的取数窗口。这一点在周线上更容易被误读,因为一根就代表一周,看起来根数少了,容易以为公式被截断了。
主图上手工画的线存在本地的画线记录里,与公式无关。切换周期之后这些线仍然在记录里,但它们对应的价格是切换前记下的,在周线上看起来位置会偏。要对照公式输出,先清掉手工画线,只看公式画出来的那一层。
指标窗口的挂载位置与窗口数量按本机客户端的常见形态设置,不同版本与券商定制版在界面结构上有差异,具体入口请以你所用客户端的帮助文档为准。相关排版规则站内 主图副图指标 里有更细的对照。
六、逐根核对的验证方法
周线的取值对不对,用一根历史周 K 就能验到底。按下面的顺序走。
- 挑一根已经走完的历史周 K,记下它的四个价格与成交量。
- 切到日线周期,把这一周内所有交易日的日线数据调出来,手工取这一周第一个交易日的开盘、最后一个交易日的收盘、全周的最高与最低,以及成交量之和。
- 把手工算出来的五个数与周线上那根周 K 的读数逐一对照。五项全部相等,说明周期汇总规则读数正确。
- 在周线上把公式的输出与手工算出的极值放在同一个窗口,看两条线在历史根上是否重合。
- 把光标停在周内最后一根上,观察刷新前后的变化。变化只出现在高、低、收与量上,说明读数正常。
- 改变复权设置重跑一次,确认除权周的跳空位置随设置移动,而其它历史根的相对形状不变。
这六步走完,取值、汇总规则、除权处理、未走完那一根的表现就各自被验过一遍。之后再把公式用在更长的时间跨度上,心里有底。
需要记住的分界是这一点:凡是读到「当根」的写法,在周线上读的都是本周至今的流变值;凡是读到「上一根」的写法,读到的都是已经固定下来的汇总值。核对通达信周K线公式的输出时,先判断这个数是哪一类的,再看它是不是符合预期,比直接怀疑公式写错了要省事。本文只作技术研究口径,不涉及也不构成对任何标的的判断。
