通达信公式排查的第一步不是打开代码,是先看症状。同一句”公式出问题了”,落在不同的症状上,要查的层完全不同:编译不通过查语句,装完不显示查挂载,跑通了结果不对查口径,用起来卡查计算量。分类这一步做错,后面的时间都花在了一个本来就正常的层上。

下面把症状分成四类,每类给出入口和第一步动作。文中提到的提示原文为大意,不同版本的措辞会有差异;菜单与目录(公式管理器、T0002、gs_bak)以通达信金融终端个人版为准,券商定制版可能不同。全文只讲操作与语法,不涉及具体标的的判断。

一、先按症状分类,再决定看哪一层

这张表是全文的骨架。对着自己的现象找到那一行,直接跳到对应的章节,不要从头往下读。

症状 问题所在层 第一个要看的入口
点测试公式弹红字,存不下来 编译期,语句本身 公式编辑器里被标红的那一行
公式能存,挂到图上没有输出 加载期,挂载与属性 公式属性里的 主图叠加 勾选状态
图上有东西,但数值或形态与预期不符 结果期,数据口径 复权设置与数据下载范围
条件选股返回空列表 结果期,条件是否成立 把输出改成中间量看有没有值
切换公式、翻页明显变慢 运行期,计算量 公式里的循环类语句与引用层数
公式名在列表里找不到 文件层,不在公式本身 安装目录下的 T0002 与 gs_bak

最后一行的处理路径与前五行分开,这一处也是通达信公式排查时容易走错的地方:列表里还有这个名字,说明公式文件与记录都在,问题出在后面的层;列表里根本找不到,才轮到文件层。拿文件层的手段去处理加载层的问题,方向从一开始就是偏的。

二、编译期:红字指向的是语句,不是原因

公式管理器的编译提示包含两段信息:一段说明问题类型,一段指出位置。位置指向的语句会在编辑器里被标注出来,先跳到那一行。

提示原文(大意)        它在说什么                  先查什么
──────────────────────────────────────────────────────────
变量 XXX 未定义         用了没有赋值的名字          上面是否漏了 := 定义
操作数与函数参数不匹配   括号里参数个数不对          MA/REF/HHV/LLV 是否缺周期
句末缺少分号           行尾少了英文分号            上一行的行尾,不是标红那行
定义重复               两条语句用了同一个名字       语句名是否撞车
无效的函数引用         函数不在当前版本里           函数名拼写与版本
输出语句过多           选股公式里混进了绘图语句     删除 DRAWICON 一类语句
参数缺失               源码声明了参数但没填表       编辑器上方的参数表

其中”句末缺少分号”这一条要特别注意标红的位置。分号漏在上一行末尾时,编译器读到下一句才发现前面那句没有结束,所以提示与标注都落在下一行。判断方法很简单:把标红那一行连同它上面一行一起看。

中文标点引起的失败不会单独提示。全角的分号、逗号、括号在编辑器里与半角形状接近,肉眼不容易分辨,从网页或文档里复制源码时它们会跟着进来。处理顺序是先粘到纯文本编辑器里做一次批量替换,再贴进公式编辑器。

三、加载期:公式在,界面上没东西

通达信公式排查落到加载期这一类,要按挂载位置分开看,因为三处的关键设置项不重叠。

  • 主图:技术指标默认画在副图。要画在 K 线上,必须在公式属性里勾上 主图叠加,勾完重新加载一次公式界面才会重画。勾了还是没有,看输出值是不是只有 0 和 1 这类条件值——主图纵轴是价格,这种值会被压在坐标轴底端。处理办法是把输出换算到价格区间,例如用 DRAWTEXT(条件, L*0.99, '标记') 或 STICKLINE 画在 K 线下方。
  • 副图:副图纵轴按输出的最小值与最大值自动缩放。输出是一个常数,或者所有值彼此相等时,上下界被压成同一个值,线画在边框上看不出来。验证方法是在编辑器里临时输出一个中间量,看它的取值范围。
  • 条件选股器:返回空列表不等于公式坏了。见下一节。
先做一次测试公式,再去看挂载。测试通过说明公式本身能跑,剩下的都在挂载与设置里;测试不通过,就还没到挂载这一层。这个先后关系搞清楚,能避免对着一个本来就编译不过的公式反复调整属性。

四、结果期:跑通了但结论对不上

提示消失、测试通过,只说明语法没问题。结果对不上时没有红字可看,要按口径逐项排。

  1. 周期是否一致:日线上调好的条件放到分钟周期上,参与比较的每一根 K 线含义都变了。跨周期引用要写清周期后缀,格式是指标名.语句名#周期,例如 "MACD.DIF#WEEK"(12,26,9)。
  2. 复权是否一致:公式在什么复权设置下调的,就在同一设置下看。切换复权方式后,价格数值与除权日附近的涨幅都会变。
  3. 数据是否下载齐:参与计算的数据来自本地。补数据入口在系统菜单里:系统 → 盘后数据下载。引用 K 线根数不足时(长周期均线、次新股、长期停牌品种),结果算不出来也不报错。
  4. 除数是否可能为零:涨幅、比率这类计算在新股首日、复牌当日可能取不到前收价。用 DIV(REF(C,1),1) 这类写法处理,或者先判断分母不为零。
  5. 函数是否在当前版本里:函数随版本增加。官方更新记录里,V7.62(更新日期 2022-09-30)写明加入 SUMBARSX 函数、修正 IFC 函数。更早的版本遇到这两个函数会落在未知函数这一条上。

五、运行期:卡顿与响应变慢

通达信公式排查到运行期,方向从”对不对”转成”算得动算不动”。切换品种、切换周期、翻页变慢,与公式的计算量有关,与机器配置的关系要排在后面看。

  • 逐根循环类语句:公式里带有对每一根 K 线单独计算的写法时,计算量随笔数增加。把循环改成整体运算的形式,速度差别是可感知的。
  • 指标引用层数:公式引用另一个公式、被引用的公式又引用第三个,每多一层就要多算一遍。层数深时,页面刷新与切换都会变慢。
  • 跨周期引用:引用其它周期的数据需要在本地做周期换算,引用越多越明显。
  • 绘图语句数量:绘图类输出每条都要单独渲染。把不需要的输出注释掉,只留当前在用的几条。

判断是公式导致还是软件本身的原因,方法是用同样一段区间切换到一个系统自带指标再翻一次页。自带指标也慢,方向就不在公式上。

把上面五节收成一句可执行的话:编译不通过看标红那一行的上一行,装了不显示先看主图叠加这个勾,结果不对先看周期与复权,选股为空先看条件为什么没成立,跑起来卡先看循环与引用层数,列表里找不到才去翻 T0002 和 gs_bak。每一句对应一个入口,从入口进去再往下查,比从头通读源码快。

本文讲的是公式语法、菜单操作与目录位置,不涉及具体标的的判断。站内还有 报错与卡顿排查 的其他条目,公式安装与导入 里讲公式管理器的操作路径,主图副图指标 里讲挂载与输出的细节,可对照查看。

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