预警列表里公式那一列空着,第一反应是「公式没了」。这个判断站不住。预警项存的是对公式的一份引用,名字那一列读的是引用里的某个字段;字段读不到,列就空着,公式本体可能还在库里。通达信预警不显示公式名字,要分显示层与引用层两条线看。

下面的排查顺序按「先认字段、再分入口、再看字符、最后看迁移」排。文中描述的是通达信金融终端个人版的界面结构,本地预警与条件预警在不同版本里的入口位置与措辞有差异,以自己的软件为准。

一、名字空着不等于公式消失,先把两件事分开

那一列显示什么,取决于程序去哪个位置取值。取值这件事有两个环节:一是预警项里保存的引用还在不在,二是列表控件能不能把引用的名字渲染出来。前者失效,公式本体没有问题,预警也不会再触发;后者失效,公式是好的,预警可能照常工作,只是列表里看不到名字。

分开这两件事有一个直接的好处:处理方向不一样。引用失效要去修引用,显示问题改的是名字的写法或者列表的列宽,两者动的地方不是一处。用同一套办法去试两边,两边都修不好。

顺手记一个判断:把预警列表的列拖宽一点,或者把鼠标停在那一格上。列宽不够造成的截断会跟着变化,而引用失效不会因为拖宽就冒出内容。

二、预警项引用的到底是哪个字段

排查通达信预警不显示公式名字,第一步是弄清预警项引用的是哪一层标识。一条公式在软件里不止一个名字:公式名是公式管理器里看到的那串短名,内部编号是程序分配的一串标识,公式描述是写公式时填在说明栏里的一段文字。预警条件保存的时候写进配置的是哪一层,决定了换版本、换机器之后还认不认这条公式。

在公式管理器里做一次改名,就能看出预警项认的是哪一层。改完之后回到预警列表,看那一列是跟着变了,还是变成空白,还是照旧显示旧名。跟着变,说明读的是公式名本身;变成空白,说明读的是内部编号那一层;照旧显示,说明预警项保存的是新建当时的快照名,这个时候要到预警设置里重新选一次公式。

改名这个动作本身也会带来麻烦。公式名与预警项里的名字对不上时,部分版本的预警项会显示成一串数字,因为按名字匹配失败之后,程序回退到了编号那一层。

三、条件预警与本地预警,两个入口取的字段不同

通达信预警不显示公式名字这一类现象,在两个入口上的表现并不相同。预警功能有两条入口:条件预警是从预警设置里新建一条条件,选出公式、设定条件与作用范围;本地预警是另一套列表,读的是本机上已经存在的预警项以及它们的状态。两个入口用的不是同一个列表控件,取值顺序也不一样。

从条件预警新建的条目,那一列拿的是新建时选中的公式的显示信息;本地预警列表读的是本地保存的记录。中途改过公式名、重新导入过公式库,两边就会对不上。判断自己在用哪个入口,看菜单路径:从预警设置一路点进去的是条件预警,从工具栏的预警图标直接拉出来的是本地预警那一套。

看到的现象 属于哪一层 处理方向
公式那一列空白,同一条公式挂在副图上显示正常 显示层 改公式名的写法,去掉空格与括号,或者把预警项删掉重建
那一列显示成一串数字,公式管理器里能搜到同名公式 显示层(匹配回退) 在预警设置里重新选一次公式,让预警项指向当前的名字
点进预警项编辑,公式下拉框里选不到这条公式 引用层 公式没跟过来,先把公式导入或补齐,再重建这条预警项
公式在、预警项也在,点进去编辑就报错 引用层(指向了已不存在的旧对象) 删掉这条预警项重建,不要反复点编辑
名字那一列正常,条件却不触发 计算层 不在本文范围,回到公式本身的条件与周期去查

四、公式名里的字符,以及换机器之后留下的空引用

名字里的字符是通达信预警不显示公式名字里比较隐蔽的一类成因。公式名不只是一串给人看的文字,它还要参与匹配。名字里的空格、半角括号、下划线、点号,在不同版本的列表控件里表现不一样:有的把空格后面的部分当成另一段信息截掉,有的把名字里的括号当成附加说明去解析,名字长于列宽时先截断,超出的部分看不到。

{ 名字写法的对照 }
ZY01                 纯字母数字,短,列表里显示完整
ZY01 短均线上穿        带空格,部分版本只显示到空格前
ZY01(短均线上穿)      带半角括号,部分版本把括号内当说明
ZY01-短均线上穿        带连接符,显示不受影响

{ 一个参考写法:字母数字加短横线,控制在 8 个字符左右 }
ZY01-SHORT

换机器与升级带来的问题属于另一类。预警条件保存在本机的配置里,公式保存在公式库里,两者是分开的两份数据。用拷贝整个安装目录的方式搬家,两份会一起过去;只搬配置,或者在新机器上重新导了一遍公式但换了名字,预警项指向的还是旧名字,列里就空着。

判断办法很直接:打开预警设置,点进那条预警项,看公式下拉框里能不能选中一条同名公式。选不到,说明引用断了,重建这条预警项即可;能选中,说明引用是活的,问题落在名字的写法或者控件显示上,回到上一节的处理办法。

重建的时候有一个顺序上的注意点:先在公式管理器里把公式导入并确认名字,再回预警设置里新建条件。反过来做,预警项引用的还是那个已经失效的旧对象,名字同样出不来。

五、怎么区分显示问题与引用失效

分界线可以用一个动作划出来:把同一条公式挂到副图上。

{ 挂到副图的最小公式,先确认本体没问题 }
A1 := MA(CLOSE, 5);
A2 := MA(CLOSE, 20);
穿越: CROSS(A1, A2);

挂上去能画出线、能标出交叉的位置,说明公式本体的编译与计算都正常,预警里的空白属于显示问题或者引用问题,处理范围就在预警项与名字写法这两处。挂上去没有反应或者报错,说明公式本体有问题,这时先去解决编译,预警列表那一列跟着就好了。

还有一件事要单独确认:预警的计算周期。预警设置里可以指定用哪个周期去算,这个周期与副图上看到的周期不一致时,条件算出来的结果自然对不上,但那不属于名字显示的问题。两件事分开查,不要混在一次里改。

名字改完之后,列表不会立刻跟着变。退出预警界面再进一次,或者重启软件,控件的缓存被清掉,那一列才会按当前的名字重新读一遍。改完名字却不见变化时,先做这一步,再去怀疑引用。

走完这几步,通达信预警不显示公式名字的问题基本能落到某一层上。本文讨论的范围到这里为止:只处理预警项在列表里的显示与引用这两层,不涉及任何标的的判断,也不讨论预警条件本身该怎么设。公式能挂到副图、预警项能选到公式,名字那一列该显示的文字就会出现;至于条件算出来的结果与预期差在哪里,属于条件与周期的范畴,需要另开一条线去看。

本文只作技术研究口径,不涉及也不构成对任何标的的判断。

站内还有 公式报错与卡顿排查 的条目,通达信选股公式与预警 里讲预警条件怎么设,通达信公式安装与导入 里讲公式怎么装进软件,可对照查看。

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