预警列表里公式那一列空着,第一反应是「公式没了」。这个判断站不住。预警项存的是对公式的一份引用,名字那一列读的是引用里的某个字段;字段读不到,列就空着,公式本体可能还在库里。通达信预警不显示公式名字,要分显示层与引用层两条线看。
下面的排查顺序按「先认字段、再分入口、再看字符、最后看迁移」排。文中描述的是通达信金融终端个人版的界面结构,本地预警与条件预警在不同版本里的入口位置与措辞有差异,以自己的软件为准。
一、名字空着不等于公式消失,先把两件事分开
那一列显示什么,取决于程序去哪个位置取值。取值这件事有两个环节:一是预警项里保存的引用还在不在,二是列表控件能不能把引用的名字渲染出来。前者失效,公式本体没有问题,预警也不会再触发;后者失效,公式是好的,预警可能照常工作,只是列表里看不到名字。
分开这两件事有一个直接的好处:处理方向不一样。引用失效要去修引用,显示问题改的是名字的写法或者列表的列宽,两者动的地方不是一处。用同一套办法去试两边,两边都修不好。
二、预警项引用的到底是哪个字段
排查通达信预警不显示公式名字,第一步是弄清预警项引用的是哪一层标识。一条公式在软件里不止一个名字:公式名是公式管理器里看到的那串短名,内部编号是程序分配的一串标识,公式描述是写公式时填在说明栏里的一段文字。预警条件保存的时候写进配置的是哪一层,决定了换版本、换机器之后还认不认这条公式。
在公式管理器里做一次改名,就能看出预警项认的是哪一层。改完之后回到预警列表,看那一列是跟着变了,还是变成空白,还是照旧显示旧名。跟着变,说明读的是公式名本身;变成空白,说明读的是内部编号那一层;照旧显示,说明预警项保存的是新建当时的快照名,这个时候要到预警设置里重新选一次公式。
改名这个动作本身也会带来麻烦。公式名与预警项里的名字对不上时,部分版本的预警项会显示成一串数字,因为按名字匹配失败之后,程序回退到了编号那一层。
三、条件预警与本地预警,两个入口取的字段不同
通达信预警不显示公式名字这一类现象,在两个入口上的表现并不相同。预警功能有两条入口:条件预警是从预警设置里新建一条条件,选出公式、设定条件与作用范围;本地预警是另一套列表,读的是本机上已经存在的预警项以及它们的状态。两个入口用的不是同一个列表控件,取值顺序也不一样。
从条件预警新建的条目,那一列拿的是新建时选中的公式的显示信息;本地预警列表读的是本地保存的记录。中途改过公式名、重新导入过公式库,两边就会对不上。判断自己在用哪个入口,看菜单路径:从预警设置一路点进去的是条件预警,从工具栏的预警图标直接拉出来的是本地预警那一套。
| 看到的现象 | 属于哪一层 | 处理方向 |
|---|---|---|
| 公式那一列空白,同一条公式挂在副图上显示正常 | 显示层 | 改公式名的写法,去掉空格与括号,或者把预警项删掉重建 |
| 那一列显示成一串数字,公式管理器里能搜到同名公式 | 显示层(匹配回退) | 在预警设置里重新选一次公式,让预警项指向当前的名字 |
| 点进预警项编辑,公式下拉框里选不到这条公式 | 引用层 | 公式没跟过来,先把公式导入或补齐,再重建这条预警项 |
| 公式在、预警项也在,点进去编辑就报错 | 引用层(指向了已不存在的旧对象) | 删掉这条预警项重建,不要反复点编辑 |
| 名字那一列正常,条件却不触发 | 计算层 | 不在本文范围,回到公式本身的条件与周期去查 |
四、公式名里的字符,以及换机器之后留下的空引用
名字里的字符是通达信预警不显示公式名字里比较隐蔽的一类成因。公式名不只是一串给人看的文字,它还要参与匹配。名字里的空格、半角括号、下划线、点号,在不同版本的列表控件里表现不一样:有的把空格后面的部分当成另一段信息截掉,有的把名字里的括号当成附加说明去解析,名字长于列宽时先截断,超出的部分看不到。
{ 名字写法的对照 }
ZY01 纯字母数字,短,列表里显示完整
ZY01 短均线上穿 带空格,部分版本只显示到空格前
ZY01(短均线上穿) 带半角括号,部分版本把括号内当说明
ZY01-短均线上穿 带连接符,显示不受影响
{ 一个参考写法:字母数字加短横线,控制在 8 个字符左右 }
ZY01-SHORT
换机器与升级带来的问题属于另一类。预警条件保存在本机的配置里,公式保存在公式库里,两者是分开的两份数据。用拷贝整个安装目录的方式搬家,两份会一起过去;只搬配置,或者在新机器上重新导了一遍公式但换了名字,预警项指向的还是旧名字,列里就空着。
判断办法很直接:打开预警设置,点进那条预警项,看公式下拉框里能不能选中一条同名公式。选不到,说明引用断了,重建这条预警项即可;能选中,说明引用是活的,问题落在名字的写法或者控件显示上,回到上一节的处理办法。
重建的时候有一个顺序上的注意点:先在公式管理器里把公式导入并确认名字,再回预警设置里新建条件。反过来做,预警项引用的还是那个已经失效的旧对象,名字同样出不来。
五、怎么区分显示问题与引用失效
分界线可以用一个动作划出来:把同一条公式挂到副图上。
{ 挂到副图的最小公式,先确认本体没问题 }
A1 := MA(CLOSE, 5);
A2 := MA(CLOSE, 20);
穿越: CROSS(A1, A2);
挂上去能画出线、能标出交叉的位置,说明公式本体的编译与计算都正常,预警里的空白属于显示问题或者引用问题,处理范围就在预警项与名字写法这两处。挂上去没有反应或者报错,说明公式本体有问题,这时先去解决编译,预警列表那一列跟着就好了。
还有一件事要单独确认:预警的计算周期。预警设置里可以指定用哪个周期去算,这个周期与副图上看到的周期不一致时,条件算出来的结果自然对不上,但那不属于名字显示的问题。两件事分开查,不要混在一次里改。
名字改完之后,列表不会立刻跟着变。退出预警界面再进一次,或者重启软件,控件的缓存被清掉,那一列才会按当前的名字重新读一遍。改完名字却不见变化时,先做这一步,再去怀疑引用。
走完这几步,通达信预警不显示公式名字的问题基本能落到某一层上。本文讨论的范围到这里为止:只处理预警项在列表里的显示与引用这两层,不涉及任何标的的判断,也不讨论预警条件本身该怎么设。公式能挂到副图、预警项能选到公式,名字那一列该显示的文字就会出现;至于条件算出来的结果与预期差在哪里,属于条件与周期的范畴,需要另开一条线去看。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 公式报错与卡顿排查 的条目,通达信选股公式与预警 里讲预警条件怎么设,通达信公式安装与导入 里讲公式怎么装进软件,可对照查看。
