通达信公式排查的第一步不是打开代码,是先看症状。同一句”公式出问题了”,落在不同的症状上,要查的层完全不同:编译不通过查语句,装完不显示查挂载,跑通了结果不对查口径,用起来卡查计算量。分类这一步做错,后面的时间都花在了一个本来就正常的层上。
下面把症状分成四类,每类给出入口和第一步动作。文中提到的提示原文为大意,不同版本的措辞会有差异;菜单与目录(公式管理器、T0002、gs_bak)以通达信金融终端个人版为准,券商定制版可能不同。全文只讲操作与语法,不涉及具体标的的判断。
一、先按症状分类,再决定看哪一层
这张表是全文的骨架。对着自己的现象找到那一行,直接跳到对应的章节,不要从头往下读。
| 症状 | 问题所在层 | 第一个要看的入口 |
|---|---|---|
| 点测试公式弹红字,存不下来 | 编译期,语句本身 | 公式编辑器里被标红的那一行 |
| 公式能存,挂到图上没有输出 | 加载期,挂载与属性 | 公式属性里的 主图叠加 勾选状态 |
| 图上有东西,但数值或形态与预期不符 | 结果期,数据口径 | 复权设置与数据下载范围 |
| 条件选股返回空列表 | 结果期,条件是否成立 | 把输出改成中间量看有没有值 |
| 切换公式、翻页明显变慢 | 运行期,计算量 | 公式里的循环类语句与引用层数 |
| 公式名在列表里找不到 | 文件层,不在公式本身 | 安装目录下的 T0002 与 gs_bak |
最后一行的处理路径与前五行分开,这一处也是通达信公式排查时容易走错的地方:列表里还有这个名字,说明公式文件与记录都在,问题出在后面的层;列表里根本找不到,才轮到文件层。拿文件层的手段去处理加载层的问题,方向从一开始就是偏的。
二、编译期:红字指向的是语句,不是原因
公式管理器的编译提示包含两段信息:一段说明问题类型,一段指出位置。位置指向的语句会在编辑器里被标注出来,先跳到那一行。
提示原文(大意) 它在说什么 先查什么 ────────────────────────────────────────────────────────── 变量 XXX 未定义 用了没有赋值的名字 上面是否漏了 := 定义 操作数与函数参数不匹配 括号里参数个数不对 MA/REF/HHV/LLV 是否缺周期 句末缺少分号 行尾少了英文分号 上一行的行尾,不是标红那行 定义重复 两条语句用了同一个名字 语句名是否撞车 无效的函数引用 函数不在当前版本里 函数名拼写与版本 输出语句过多 选股公式里混进了绘图语句 删除 DRAWICON 一类语句 参数缺失 源码声明了参数但没填表 编辑器上方的参数表
其中”句末缺少分号”这一条要特别注意标红的位置。分号漏在上一行末尾时,编译器读到下一句才发现前面那句没有结束,所以提示与标注都落在下一行。判断方法很简单:把标红那一行连同它上面一行一起看。
中文标点引起的失败不会单独提示。全角的分号、逗号、括号在编辑器里与半角形状接近,肉眼不容易分辨,从网页或文档里复制源码时它们会跟着进来。处理顺序是先粘到纯文本编辑器里做一次批量替换,再贴进公式编辑器。
三、加载期:公式在,界面上没东西
通达信公式排查落到加载期这一类,要按挂载位置分开看,因为三处的关键设置项不重叠。
- 主图:技术指标默认画在副图。要画在 K 线上,必须在公式属性里勾上
主图叠加,勾完重新加载一次公式界面才会重画。勾了还是没有,看输出值是不是只有0和1这类条件值——主图纵轴是价格,这种值会被压在坐标轴底端。处理办法是把输出换算到价格区间,例如用DRAWTEXT(条件, L*0.99, '标记')或STICKLINE画在 K 线下方。 - 副图:副图纵轴按输出的最小值与最大值自动缩放。输出是一个常数,或者所有值彼此相等时,上下界被压成同一个值,线画在边框上看不出来。验证方法是在编辑器里临时输出一个中间量,看它的取值范围。
- 条件选股器:返回空列表不等于公式坏了。见下一节。
四、结果期:跑通了但结论对不上
提示消失、测试通过,只说明语法没问题。结果对不上时没有红字可看,要按口径逐项排。
- 周期是否一致:日线上调好的条件放到分钟周期上,参与比较的每一根 K 线含义都变了。跨周期引用要写清周期后缀,格式是指标名.语句名#周期,例如
"MACD.DIF#WEEK"(12,26,9)。 - 复权是否一致:公式在什么复权设置下调的,就在同一设置下看。切换复权方式后,价格数值与除权日附近的涨幅都会变。
- 数据是否下载齐:参与计算的数据来自本地。补数据入口在系统菜单里:系统 → 盘后数据下载。引用 K 线根数不足时(长周期均线、次新股、长期停牌品种),结果算不出来也不报错。
- 除数是否可能为零:涨幅、比率这类计算在新股首日、复牌当日可能取不到前收价。用
DIV(REF(C,1),1)这类写法处理,或者先判断分母不为零。 - 函数是否在当前版本里:函数随版本增加。官方更新记录里,V7.62(更新日期 2022-09-30)写明加入
SUMBARSX函数、修正IFC函数。更早的版本遇到这两个函数会落在未知函数这一条上。
五、运行期:卡顿与响应变慢
通达信公式排查到运行期,方向从”对不对”转成”算得动算不动”。切换品种、切换周期、翻页变慢,与公式的计算量有关,与机器配置的关系要排在后面看。
- 逐根循环类语句:公式里带有对每一根 K 线单独计算的写法时,计算量随笔数增加。把循环改成整体运算的形式,速度差别是可感知的。
- 指标引用层数:公式引用另一个公式、被引用的公式又引用第三个,每多一层就要多算一遍。层数深时,页面刷新与切换都会变慢。
- 跨周期引用:引用其它周期的数据需要在本地做周期换算,引用越多越明显。
- 绘图语句数量:绘图类输出每条都要单独渲染。把不需要的输出注释掉,只留当前在用的几条。
判断是公式导致还是软件本身的原因,方法是用同样一段区间切换到一个系统自带指标再翻一次页。自带指标也慢,方向就不在公式上。
T0002 和 gs_bak。每一句对应一个入口,从入口进去再往下查,比从头通读源码快。本文讲的是公式语法、菜单操作与目录位置,不涉及具体标的的判断。站内还有 报错与卡顿排查 的其他条目,公式安装与导入 里讲公式管理器的操作路径,主图副图指标 里讲挂载与输出的细节,可对照查看。
