普通的公式在挂载时才计算:打开哪个品种就算哪个品种,翻到下一根就重算一次。通达信扩展数据公式的思路反过来——把公式的输出按指定的品种范围先算一遍,把结果存下来,供其他公式读取。多了一个「存」的环节,就多出了几处需要单独管理的地方。
下面按「解决什么问题、怎么定义、计算范围、更新时点、怎么引用、取不到值怎么查、核对与记录」的顺序讲。全文只讲数据流的走向与排查路径,不涉及任何品种判断。文中菜单名称与引用写法以通达信金融终端的实际界面与函数说明为准。
一、扩展数据解决的是哪件事
当公式需要用到「某一段区间的计算结果」而不是「本根的计算结果」时,逐根实时计算会带来两个问题:一是计算量随品种数量增长,二是同一段结果被反复重算,每次都要重新走一遍数据。扩展数据把这类计算从「用时再算」改成「先算好存起来」。
{ 两种计算时机的差别 }
实时计算 —— 挂载时按当前品种算,换品种要重算
扩展数据 —— 按指定范围先算一遍并保存,其他公式直接读取结果
{ 前者每次都要付计算成本,后者多了一次数据更新的维护动作 }
这个改动带来一个直接含义:扩展数据的值在存储之后是一份快照,它不会随着你看图而自动重算。要看最新的结果,需要触发一次更新。这是使用这类功能时最需要记住的一点。
判断某个需求是否适合用扩展数据实现,看两点:计算结果是否需要被多个公式重复读取,以及计算本身是否每次都要重新走一遍数据。两点都成立时,先算好再读取的做法能省下重复计算。
二、怎么定义一条扩展数据
通达信扩展数据公式的定义需要交代三件事:叫什么名字、用哪条公式计算、以及结果保留多少位一类的显示属性。入口在客户端的数据管理相关菜单里,与公式管理器的位置不同。
| 定义项 | 作用 | 写错的后果 |
|---|---|---|
| 名称与编号 | 供后续引用识别 | 引用处找不到,取值为空 |
| 计算所用的公式 | 决定存下来的数值是什么 | 存成了另一个指标的结果 |
| 显示的位数 | 影响存储与显示的精度 | 位数过少,相邻取值被压成同一个数 |
计算所用的公式需要先写好并通过编译,才能被选进定义里。因此顺序是先有公式,再有扩展数据,而不是反过来。这一点在排查时有用:取不到值时先确认被引用的扩展数据是否绑定了一条能正常编译的公式。
三、计算范围
扩展数据按范围计算,范围可以是全部品种,也可以是指定的一组品种。范围决定了存储量,也决定了引用时能取到哪些品种的值。
{ 范围与取值的对应关系 }
范围设为全部品种 → 任何品种引用时都能取到值
范围设为指定一组 → 组外的品种引用时取到空值
{ 引用方取不到值,先看被引用的品种在不在计算范围里 }
范围放大之后的代价是更新耗时。品种数量增加,计算与写入的时间随之增加,更新频率需要相应调整。做法是先按实际需要确定范围,再决定多久更新一次,两者一起定下来,不要先把范围放到最大再考虑更新。
范围之外还有一个时间维度。扩展数据保存的是计算时点上的结果,同一个名称在不同更新轮次上得到的是两套数值。把轮次与数值放在一起看,才能判断两份结果能不能直接比较。
四、更新时点
更新动作有两种触发方式:手动触发与按设置定期触发。手动触发适合数据需要与自己的操作节奏对齐的用法;定期触发适合数据随时可用的用法。两种方式的选择标准是「读取方能否接受读到旧值」。
| 触发方式 | 适用情形 | 注意点 |
|---|---|---|
| 手动 | 读取前由自己控制时点 | 忘记触发会读到上一次的结果 |
| 定期 | 读取时点不固定 | 更新期间的数据变化不会即时反映 |
更新动作的执行时机与行情数据的补充时机相关。本地行情数据尚未补充完整时触发更新,算出来的结果与补充完整之后算出来的结果不同。做法是先完成数据补充,再触发扩展数据的更新,两步按顺序执行。
五、在公式里怎么引用
通达信扩展数据公式的引用分两步:确认被引用的名称或编号,再在公式里按相应的写法取值。具体的引用写法以公式编辑器内附的函数说明为准,不同版本对扩展数据可用的引用方式与取值形式存在差别。
{ 引用前的三项确认 }
① 名称对得上:定义时的名称与引用处书写的名称逐字符一致
② 范围含本品种:被引用的品种在计算范围之内
③ 已经更新过:至少完成过一次计算与写入
{ 三项都确认之后再查写法,能省掉一轮来回 }
取值形式也需要确认一次:引用到的是本根的数值,还是一整段序列,决定了它在公式里能怎么用。把它当作序列使用而实际只取到了本根的值,输出会是一条平直线;反过来把它当作单值使用,公式里会出现长度不一致的提示。
六、取不到值的排查顺序
引用返回空值时,按下面的顺序查。每一步只排除一种可能,顺序不要打乱。
- 定义是否存在。在数据管理界面里找到这条扩展数据,确认它还在。
- 绑定的公式是否编译通过。打开绑定的公式保存一次,看是否有提示。
- 范围是否包含当前品种。把范围扩大一格或临时改为全部品种,再看取值。
- 是否更新过。手动触发一次更新,看取值是否出现。
- 显示位数是否过少。把位数调大再看,确认不是数值被压平。
排查过程中每完成一步就记录一次结果,不要连续做两步再回看。取值同时依赖定义、范围与更新三个条件成立,中间跳步会把两个原因混在一起。
五步走完仍然取不到值,把引用语句单独输出到一个副图上观察。副图上为空说明数据侧确实没有值;副图上有值而原公式里看不到,说明取值形式与使用方式不匹配。
七、核对与记录
核对的做法是挑一个品种,把扩展数据里的数值与现场按同一条公式算一遍的结果对照。两者一致,说明计算口径与更新流程都正常;不一致时先看更新的时点,再看范围。
记录建议包含四项:扩展数据的名称、绑定的公式、计算范围与最近一次更新时间。这四项与 复盘方法与数据工具 一栏里关于数据整理的做法可以放在同一份台账里,与导出的表格互相对照。导入与导出环节的目录与文件名约定则见 公式安装与导入 一栏。
把上面的内容收一下:通达信扩展数据公式的用法可以归纳为一条判断顺序——先确认定义与范围,再确认更新时点,最后才看引用写法。多数取不到值的情形停在前两项,先查后两项会多花一轮时间。按这个顺序走,数据从「算好存起来」到「被公式取到」这条链路就是可以自己核对的。
文中功能入口、定义项与更新方式为通用描述;通达信不同版本与券商定制版对扩展数据功能的支持范围、菜单名称、可引用的取值形式与更新设置存在差异,具体的引用写法请以你所用版本数据管理界面与公式编辑器内函数说明的记载为准。
