通达信只选板块公式这个说法,容易让人以为函数表里有一个专门的板块函数。实际情况不是这样:公式语言本身没有区分对象层级,作用范围是在公式之外指定的。同一段源码,把执行范围设成板块指数,它算的就是板块;设成全部品种,它算的就是全部品种。
本文把这个设定过程拆开讲:范围在哪一步指定、板块数据与个股数据的字段差在哪、核对时按什么顺序看。文中以通达信金融终端个人版的菜单与字段为准,券商定制版的入口名称可能有差异。全文只讲公式的作用范围与数据字段,不涉及任何标的的判断,也不给出方向性结论。
先要区分的是三件事:公式的语法、公式的执行范围、以及被执行的数据。语法决定这段代码能不能编译,执行范围决定它作用在哪些对象上,数据决定每个对象上算出什么。三者混在一起时,排查会找不到入手的位置。
一、作用范围在哪个环节设定
公式的编译与执行分成两个阶段。编译阶段只看语法,不关心对象是谁;执行阶段才把公式套到一批对象上。作用范围的指定发生在第二个阶段,可选的入口有两处。
| 入口 | 路径 | 作用范围 |
|---|---|---|
| 条件选股 | 功能 → 选股器 → 条件选股 | 由选股范围下拉框决定,可选板块或全部品种 |
| 板块分析 | 行情列表切换到板块页签后挂载指标 | 当前表格里的对象集合 |
| 副图挂载 | K 线图上的指标切换 | 当前图表对应的单一对象 |
「只选板块」在操作上就是在条件选股界面把范围下拉框设成板块,而不是在源码里加条件。这样设定的好处是同一段源码可以在两种范围下复用,不必维护两份写法。
范围与条件的分工可以这样理解:范围决定公式被应用到哪些对象上,条件决定每个对象是否被记为成立。两者组合起来才是完整的一次执行。把范围写进源码,等于把这两个环节绑在一起,之后想换一批对象就只能改代码。
{ 源码本身不含范围设定,两种范围共用一份 }
N: 20 (1, 250, 1)
均量:=MA(VOL,N);
放量:VOL>均量*1.5;
二、板块数据与个股数据的字段差异
板块指数与个股用的是同一套字段名(开盘、最高、最低、收盘、成交量、成交额),但每个字段的含义不完全等价。板块的成交量是成分股的合计,价格是按某种加权方式合成的指数点位。这带来三处需要注意的地方。
| 字段 | 个股上的含义 | 板块指数上的含义 |
|---|---|---|
| 收盘价 | 该品种的成交价 | 按权重合成的指数点位 |
| 成交量 | 该品种的成交量 | 成分股成交量合计 |
| 成交额 | 该品种的成交金额 | 成分股成交金额合计 |
第一项的差别最要紧。指数点位的水平数值取决于编制时的基准,把指数点位代入需要价格量纲的表达式(例如与某个价格阈值比较),结果没有可比性。依赖价格比率的表达式(例如涨跌幅度、均线关系)不受影响,因为基准在相除时被约掉了。
成交量的差别在核对时也要留意。板块的成交量是成分股合计,合计值会随成分数量的多少而变。两个成分数量相差较多的分类,直接比较成交量合计没有得到信息;换算成相对自身历史的倍数之后,才具备比较的基础。
三、一份可复用的核对清单
把通达信只选板块公式套用到一批板块之前,按下面的顺序逐项核对。顺序是从数据到条件再到结果,前一项不过关时后面的核对没有意义。
| 顺序 | 核对项 | 怎么确认 |
|---|---|---|
| 1 | 板块数据是否已在本地 | 行情列表切到板块页签,看是否有历史 K 线 |
| 2 | 板块清单是否包含需要的分类 | 对照板块管理界面里的分类列表 |
| 3 | 公式是否只用到相对关系 | 逐行检查,标记出比较价格水平数值的语句 |
| 4 | 参数是否已外露 | 公式管理器参数栏能看到 N 与阈值 |
| 5 | 范围下拉框是否设成板块 | 条件选股界面的范围一栏 |
| 6 | 结果清单能否逐项复核 | 抽一个对象手工核对一根 K 线的输出 |
第六项是整套核对里最容易被跳过的一步。查办法是随便取一个对象,把它的量价数据抄下来,按源码算一遍,与结果清单里的判断对照。对得上,前面的五步才算数;对不上,回到第三步重新检查表达式。
核对时建议固定一个对象反复用。固定对象的好处是数据不变,改动只有公式本身一处,问题定位路径短。每改一次源码就回到同一个对象上重算一遍,能较快看出改动带来的影响,也不必再追一遍数据是否发生了变化。
四、四个容易混淆的地方
下面四处是在使用通达信只选板块公式时容易被混为一谈的,逐条分清能省掉一轮无效排查。
- 板块与板块指数不是一回事。「板块」是对象的集合,「板块指数」是集合合成出来的单一序列。把公式挂在集合上,得到的是每个对象的判断;挂在指数上,得到的是合成序列上的判断。两者的结果数量不同。
- 自定义板块与系统分类是两套。自定义板块的成分由使用者维护,系统分类的成分随软件的板块数据更新。两套的成分会不一致,核对时要说明用的是哪一套。
- 成分变动会改写历史。按当前成分回看历史,得到的是换了成分之后的序列。这一点在核对早期区间时要留意。
- 范围设定不写进源码。同一段源码在不同范围下结果不同,源码本身看不出差别。分享公式时要把范围一并说明,否则对方复现不出同样的结果。
第三项与第四项合起来解释了一个现象:同一份源码,两个人跑出的结果不同。差别未必在代码上,可能在范围设定或成分版本上。
补充一点关于自定义板块的维护。自定义板块的成分需要手动增删,长期不维护之后,它与系统分类的差别会越来越大。核对之前先把自定义板块的成分清单导出一份,与系统分类对照,确认差在哪些对象上。这一步能避免把成分差异误当成公式差异。
清单式的内容容易读完就放下,留一个可执行的落点更有用。把上面六项核对顺序抄成一张表格,每次换一批对象时重填一次,填不满的位置就是这次要补的功课。
既然如此,核对通达信只选板块公式的落点就很清楚了:先确认范围是在公式之外设的,再确认算法没有依赖价格的水平数值,最后抽一个对象手工验算一遍。这三步走完,剩下的问题就只剩下数据本身了。
本文只讨论公式的作用范围设定与数据字段口径,不涉及具体标的的判断,也不构成对任何公式效果的承诺。站内还有 复盘方法与数据工具 里讲数据整理与清单核对的条目、公式编写与语法函数 里讲参数表与表达式的条目、公式安装与导入 里讲公式管理器入口的条目,可对照查看。
