通达信画线公式报错,先要分清它落在哪一期。公式管理器里的红字属于编译期,说的是语句本身写不通;图上画不出线、线条走向不对、图标没出现,属于显示期,说的是语句通过了但结果没落到画面上。这两期的成因、能拿到的信息、要改的位置都不一样。

下面按”分期 → 对照提示 → 验证”的顺序讲。函数名、参数位与界面路径以通达信金融终端个人版为准;文中涉及的目录名与文件名(T0002、gs_bak)来自通达信技术部公开的公式备份与恢复说明。券商定制版的菜单名称可能不同,提示措辞各版本也有差异,以你软件里实际显示的为准。

一、为什么分期是第一步

编译期报错有个特点:它给你行号。公式管理器在编辑器里把出错的语句标红,红字里带一个”第几行”的位置信息。你顺着行号跳过去,看到的就是要改的那句。

显示期没有行号。编译通过之后,公式变成一个可以挂载的指标,挂在主图、副图或条件选股器上都可能不按预期画。这时候编辑器里一切正常,红字也没有,可看的信息只剩”哪一类宿主、哪个周期、哪个位置没有画出来”。

把这两期混着查,会出现两种典型的白费功夫:拿着显示期的现象去翻源码找语法错,翻不出来;拿着编译期的行号去调主图叠加设置,也调不出东西。

一句话分界:编辑器里点”测试公式”还有红字,就是编译期;红字清空、标注清空,挂到界面上才出问题,就是显示期。这个”测试公式”按钮在公式管理器的编辑窗口上方,是分期的分水岭。

二、绘图类函数的参数位,先背熟五个

画线相关的报错,指向的函数集中在少数几个。它们的参数位是固定的,少一位、错一位都会报”操作数与函数参数不匹配”。先把下面这五个的参数顺序记住,后面看提示会顺得多。

DRAWLINE(COND1, PRICE1, COND2, PRICE2, EXPAND)
  起点条件, 起点价, 终点条件, 终点价, 是否向右延伸

DRAWKLINE(H, O, L, C)
  最高, 开盘, 最低, 收盘   ← 顺序不能按常规的 OHLC 写

PLOYLINE(COND, PRICE)
  画线条件, 画线价格   ← 只画满足条件的那几段

STICKLINE(COND, PRICE1, PRICE2, WIDTH, EMPTY)
  条件, 上端价, 下端价, 线宽, 是否空心

DRAWICON(COND, PRICE, TYPE)
  条件, 画图标的位置, 图标编号

这五个里面有两个位置容易写反。一是 DRAWKLINE,它的顺序是最高价在前、开盘价在后,跟习惯上的”开高低收”不同;二是 DRAWLINE 的第五个参数,它是”是否向右延伸”的开关,写 1 表示延伸到最后,写 0 表示只画到第二个条件成立的位置。

还有一类报错和参数无关:把 DRAWICON、STICKLINE、DRAWLINE 这些绘图语句写进了条件选股公式。条件选股只认最后一行做逻辑输出的结果,不认绘图动作,于是编译期直接报输出过多或画线超限。处理办法是把绘图语句整段删掉,只留判断那一行。

三、编译期提示逐条对照

下表左边是你看到的提示(措辞为大意,不同版本与语言版本有差别),中间是它实际指向的问题,右边是要动手改的地方。处理通达信画线公式报错时按这个顺序从上往下试,改起来从快到慢。

提示原文(大意) 它指向什么 改法
句末缺少分号
语法错误
语句没有用英文分号收尾,或者混进了全角标点 逐行看行尾;确认输入法是半角状态,逐个把全角逗号、括号换成半角
操作数与函数参数
不匹配
括号里的参数个数与函数定义不符 按上一节的参数位逐个核对,DRAWLINE 要写满五位
变量 XXX 未定义
未定义的标识符
用了一个没赋值的名字,或者函数名拼错 中间量先用 := 赋值再引用;核对函数名拼写
输出语句过多
画线超限
把副图源码粘进了条件选股 删掉全部绘图语句,只保留最后一行逻辑输出
无效的函数引用
未知函数
函数不在当前版本里,或者来自别的软件 对照本版本的函数列表;换一份适配当前版本的源码
五彩K线公式
必须使用 K 线绘制语句
公式类型选成了五彩K线,但源码里没有对应的绘制语句 在公式管理器里改公式类型,或者补上 DRAWKLINE

最后一条要单独说。通达信把公式按技术指标、条件选股、五彩K线、交易系统分成不同类型,类型不是备注,它决定了公式允许做哪些动作。把一个纯逻辑的指标放进五彩K线类型,或者把带一堆绘图语句的副图公式放进条件选股类型,都属于”类型与内容对不上”,改类型比改源码省事。公式类型在新建公式时选,已建好的公式可以在公式管理器里右键改属性。

四、显示期:公式在,线不在

编译通过、挂上去却看不到线,这类通达信画线公式报错先按下面四条依次排除。四条的顺序是从”最容易确认”到”最费时间”。

4.1 主图叠加没勾

技术指标默认画在副图上。画线类公式大多需要在 K 线图上叠加,这就得在公式属性里勾上”主图叠加”。没勾的时候,公式是被正常加载的,只是画在了坐标系完全不同的副图里,看起来像没画出来。公式属性在公式管理器里对公式右键打开,也可以从编辑窗口上方的属性入口进。

4.2 周期与画线区间不匹配

条件成立的位置在别的周期上。写在一个周期里的条件,换到另一个周期算,参与比较的每一根 K 线的含义都不一样了。跨周期引用要写清周期后缀,格式是指标名.语句名#周期:

"MACD.DIF#WEEK"(12,26,9);   ← 在日线周期里引用周线的 DIF
"KDJ.K#MIN30"(9,3,3);       ← 引用 30 分钟周期的 K 值

另外,DRAWLINE 只在两个条件都成立时才画线。如果第二个条件在你查看的这段区间里没有成立过,这根线就不存在,画面上什么都没有。把区间往后拉一段,或者把第二个条件放宽,能确认是不是这个原因。

4.3 分时周期依赖的数据没下载

分时图上用的画线公式依赖 1 分钟周期数据。本地没有下载分时数据时,公式能加载,但取不到足够的 K 线,画出来是空的。补数据在系统菜单里:系统 → 盘后数据下载,把 1 分钟、5 分钟勾上做一次补充下载,重启软件再看。这一步和公式本身无关,改源码是白改。

4.4 源码里用到了当前版本没有的函数

函数是随版本增加的。通达信官方更新记录里写明过各版本新增与修正的函数,例如 V7.62 这一版(更新日期 2022-09-30)加入 SUMBARSX 函数、修正 IFC 函数的问题。在更早的版本上用这几个函数,就会落进”未知函数”,编译期报错、显示期空白都可能出现。遇到这种名字,先确认它是不是别的软件的函数——比如以 XT 结尾的一批写法来自同花顺与文华,通达信这边没有对应实现。

加密公式包(后缀 .tne)导入后在公式管理器里看不到源码,也不允许修改。这类文件如果报错,只能换回未加密的 .tn6 或直接拿源码重建,不是操作上的问题,是文件格式本身的限制。

五、改完怎么验证,以及验证的边界

验证分三步,缺一步都可能把问题带到下一步去。

  1. 在编辑器里点”测试公式”:看两件事,红字是否清空、编辑器里的红色标注是否全部消失。红字没了但标注还在,说明还有没处理完的地方。
  2. 挂到目标宿主上看一次:指标类挂到 K 线图上看线条、图标、文字是否按预期出现;条件选股类跑一次条件选股,看结果是否正常返回、有没有报错。宿主选错是显示期问题里出现频率较高的一类,编译期查不出来。
  3. 换一个周期再看一次:同一个公式在第一处画出来了,换个周期没画出来,指向的就是周期与画线区间的问题,不是语法问题。
整体顺序收一下:先点”测试公式”分清编译期还是显示期 → 编译期的按第三节的表逐条对照,先改标点与参数位这类格式问题,再改函数与类型这类结构问题 → 显示期的按第四节四条排除,先看主图叠加勾没勾,再看周期、数据、函数版本 → 最后在真实界面上确认一次。顺序反了,会在正确的地方找不到错误。

本文讲的是软件目录、函数参数与菜单操作,不涉及具体标的的判断。画线公式画出来的是条件成立的位置,条件本身可以重叠、可以连续成立,落在线上的位置与实际能成交的位置不是一回事,这部分差异只能自己在历史行情上逐段比对,公式不承担这个判断。

站内还有 报错与卡顿排查 的其他条目,公式编写教程 里讲函数与语法的基础写法,主图副图指标 里有用画线类公式的挂载说明,可对照查看。动手改源码之前,先把 T0002 目录整体复制一份留底,改坏了才回得去。

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