一条指标从数据到图上显示出来,中间要经过三个环节:数据进入公式、公式计算出数值、数值被画到某个位置。这三个环节各自会出故障,而故障的表现都是「图上不对」——把通达信指标三层结构分开看,才能判断问题出在哪一层,而不是反复改公式源码。

下面按「三层各是什么、数据从哪来、计算怎么做、显示在哪、怎么定位、边界」的顺序讲。全文只讲指标的构造与排查路径,不涉及任何品种判断,也不评价数值的含义。文中菜单与目录以通达信金融终端为参照。

一、三层各是什么

三层结构的第一层是数据层,负责把行情与财务数据准备到可以被公式读取的状态;第二层是计算层,负责按公式的定义逐根算出结果;第三层是呈现层,负责把结果放到主图、副图或列表里。三层的分工是清楚的,但在使用中容易被合并成一个动作。

{ 通达信指标三层结构 }
数据层 —— 行情序列、财务数据,按周期与品种准备
计算层 —— 公式引擎逐根计算,每个输出变量是一条序列
呈现层 —— 主图叠加、副图、条件选股列表、排序结果
{ 上一层不成立,下一层没有输入;下一层出错,上一层看不出来 }

依赖方向是单向的:数据层到计算层,再到呈现层。反向不成立——呈现层上看到的现象,需要回到前两层去找原因。这一点决定了排查的顺序:从数据层开始,逐层往后查。

二、数据层:数值从哪里来

数据层的输入分两类。一类是行情数据,按品种与周期组成序列,提供开盘、最高、最低、收盘与成交量额这些字段;另一类是财务与板块数据,按报告期或按品种所属关系提供,取值频率与行情序列不同。

行情数据存在本地,需要有足够的长度才能支撑公式计算。公式里用到 N 周期的函数,本地就必须有 N 根以上的数据,否则前几根上取不到值。核对办法是把公式挂上去之后看左端:如果空白的根数大约等于 N,说明是数据长度的问题,而不是公式写错。

现象 数据层的可能原因 核对方式
左端若干根为空 本地数据不够 N 根 看空白根数与 N 是否接近
某一品种整条为空 该品种的行情数据缺失 换一个品种挂同一公式对照
换周期后前段为空 该周期数据尚未补充 补数据后重新挂载,看空白是否消失

财务类数据的取值频率与行情不同,同一份财务数值在多根 K 线上是重复的。把财务数据与行情数据相乘或相除之前,先确认两者在时间轴上的对齐方式,否则得到的结果在时间上会出现错位。

三、计算层:逐根算出的是序列

公式引擎的处理方式是按根推进:从序列的第一根开始,把公式里的每一句依次算一遍,得到这一根上各个输出变量的值,然后推进到下一根。整个过程完成后,每个输出变量都是一条与 K 线等长的序列。

{ 计算层的三个特点 }
① 逐根推进 —— 第 i 根只用到第 i 根及更早的数据
② 输出是序列 —— 一个变量对应一整列值,不是一个数
③ 引用即平移 —— 往前引用 N 根,就是把序列整体错位 N 行
{ 这三点决定了周期与参数改动之后结果会整体变化 }

理解第二点之后,写法上的疑问会消解在这里。公式里写一个条件,得到的是每一根上的成立与否,而不是「这个条件在图上成立过一次」。要把成立的位置标出来,需要再经过一层判断,把连续成立的多根压成一个位置。这一步在条件选股与图上标注里的写法不同,混用会让输出看起来有多条重复记录。

第三点与参数的关系也值得说明。平移引用取的是序列上相对的位置,参数改大之后窗口变宽,参与计算的样本整体变化,输出的数值跟着变。这类变化是计算定义的一部分,不是误差。相关口径可以对照 指标原理与参数 一栏里关于取样与参数的说明。

四、呈现层:结果被画到哪里

呈现层决定结果出现在什么位置。同一个输出变量,挂到副图上是一条独立的曲线,挂到主图上就会与 K 线共用坐标;放进条件选股,它变成一张符合条件的记录列表,而不再是一条曲线。

承载位置 坐标与量纲 输出形态
副图 独立坐标,按数值范围自动缩放 曲线、柱线、标注
主图叠加 与价格共用坐标 需要与价格同量纲,否则被压缩
条件选股列表 无坐标 符合条件的记录,一根对应一条

主图叠加这一行的限制最容易被忽略。把成交量或换手率这类量纲与价格无关的数值直接叠加到主图,数值被压缩到坐标底部,曲线看起来是一条平线,容易被当成公式算错了。核对办法是把同一个输出先挂到副图上看数值范围,确认范围之后再决定放在哪里。

新建公式时先把承载位置想好:需要与价格对照的放主图,需要看数值变化的放副图,需要导出记录的走条件选股。位置定错之后,改公式源码解决不了显示问题。

五、按三层定位一次故障

把三层拆开之后,定位的路径就是逐层排除。每一层只回答一个问题:这一层的输入在不在、输出对不对、显示位置合不合适。

  1. 换一个品种或换一个周期挂同一公式。结果跟着变,说明问题在数据层。
  2. 把公式里的中间变量逐个输出到副图,看从哪一个变量开始不对。到某一步不对,问题在计算层的这一句。
  3. 中间变量都对而最终显示不对,检查承载位置与坐标量纲。
  4. 三层都正常而结果与预期不符,回到公式定义本身,核对取的是哪一段区间。

这套顺序的价值在于把可改的地方收窄。数据层的问题改公式无效,呈现层的问题补数据无效,先把层定下来,改动才有方向。用这种方式定位过一次之后,同类现象的排查时间会明显缩短。

这种分层定位的方式也适合处理「换一台机器表现就不一样」这类现象。两台机器的软件版本、本地数据长度与显示设置中只要有一项不同,差异就落在对应的那一层。把两台机器的这三项分别记下来对照,比在公式源码里逐句找要快。

六、边界与一次核对

三层结构的说法描述的是数据流动的路径,不是软件内部模块的划分。把这条路径当作排查的框架来用是有效的,把它当作实现细节来推断则可能出错——不同版本在数据准备与显示环节的具体处理方式并不公开一致。

核对的做法很简单:新建一个公式,只输出收盘价,挂到副图上;再在公式里加上一句取最高价的语句并输出,观察两条线是否同时出现且数值合理。两条线都正常,说明三层链路完整,可以把注意力放到具体逻辑上。

通读一遍上面的内容可以看出,通达信指标三层结构的作用是给排查提供一个固定的起点。用不上这个框架的时候不必刻意套用,一旦图上出现解释不通的现象,按三层顺序查一遍,多数情况能在前两步把范围收住。公式的写法可以参考 公式编写教程 一栏,安装与挂载的位置可以对照 公式安装与导入 一栏。

文中关于数据、计算与显示三层路径的描述为便于排查而作的归纳,不表示软件内部的模块划分;通达信不同版本与券商定制版在数据补充方式、可用字段与显示坐标处理上可能存在差异,请以你所用版本的实际表现与公式编辑器内的函数说明为准。

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