通达信主图公式未通过这个提示,出现在公式保存或挂载的那一刻。它的含义很窄:软件在校验这条公式时没让它过。原因可能是语法、可能是绘图调用、可能是参数声明,也可能是这条公式被放在了不合适的分支下。提示本身不区分这些情况,所以顺序比猜测重要。
下面把校验会拦的四类问题按顺序排一遍,每类给出判断方式与处理方向。文中函数名、菜单名与提示文案按通达信 PC 版的常见形态描述,不同版本与券商定制版在这些细节上存在差异,请以你所用客户端帮助文档与实际提示为准。
一、先分清提示出现在哪个动作上
同一个「未通过」的字样,出现在三个不同动作上,指向的原因不同。
| 出现位置 | 含义 | 优先排查方向 |
|---|---|---|
| 点测试时 | 公式本体没通过语法校验 | 语法与函数签名 |
| 点确定保存时 | 校验通过但保存条件不满足 | 名称、分支、权限 |
| 挂载到主图时 | 公式能存但不符合主图要求 | 绘图类型与输出数量 |
第一类出现次数最多,也是最容易通过逐行核对解决的。第二类与第三类容易被误当成语法问题,在源码上反复改,而实际要动的是分支选择或输出设置。
二、语法层面的四类常见原因
按发生频率由高到排列,逐项核。
括号与引号不配对
{不配对示例:少一个右括号}
原:MA(CLOSE,20;
改:MA(CLOSE,20);
{引号不配对:函数参数里的文字串缺少成对引号}
{中文引号与英文引号不可混用}
这类问题的报错位置常常指向下一行。原因是编译器读到下一句才发现上一句没有结束。判断办法是看报错行的上一行末尾,而不是报错行本身。
标点用了全角
{全角逗号:}
快:EMA(CLOSE,12); {全角逗号}
{半角逗号:}
快:EMA(CLOSE,12); {半角逗号}
{全角括号同理,肉眼不易分辨,需逐字核对}
从网页或聊天工具复制源码时容易带入全角标点。判断办法是把报错行整行重敲一遍,重敲之后通过的,说明原处有全角字符。
变量名与内置名冲突
{把内置字段名当作自定义变量名,会与系统定义冲突}
CLOSE:=MA(CLOSE,20); {错误:占用内置名}
{改成不冲突的名字}
均价:=MA(CLOSE,20);
这类错误在部分版本上表现为直接报错,在另一些版本上表现为取值异常。判断方式是查一遍自定义变量名,确认没有与内置字段名、函数名重复。
参数声明与实际使用不一致
{声明了参数 N,语句里却写死了 20}
参数声明:N = 20
语句里:均线:=MA(CLOSE,20); {没用到 N}
{改后:语句引用参数}
均线:=MA(CLOSE,N);
这种写法有时能通过校验,有时不能,取决于版本。即便通过了,后续调整参数也不生效,属于隐藏问题。核对方式是查每个声明过的参数在语句里有没有被引用。
三、绘图调用引起的未通过
主图公式对绘图调用有额外要求,这是它区别于副图公式的地方。同一条公式放在副图能过,挂到主图可能就不过。
{主图的绘图调用要注意位置基准}
{绘图函数的位置参数若取自非价格字段,可能不符合主图要求}
{处理方向:把位置参数改为价格类字段或价格派生量}
{示意:位置参数用价格字段}
{绘图函数按版本文档的参数顺序填写,位置项取价格}
位置值:CLOSE;
{绘图调用以 位置值 作为位置输入}
另一类问题是输出线的数量。主图上输出过多条线会让图面无法辨认,部分版本在挂载时会给出提示。处理方式是只保留必要的输出,其余改成不画线的中间量。
四、分支与名称引起的未通过
公式管理器按分支组织公式,不同分支对公式类型有约定。把技术指标公式放进条件类分支,或者把条件类公式放进指标分支,都可能在保存或挂载时被拦下。
| 公式类型 | 应放分支 | 放错的后果 |
|---|---|---|
| 技术指标(画线类) | 指标分支 | 可保存但挂载行为不符预期 |
| 条件类(输出真假) | 条件类分支 | 主图挂载被拦 |
| 绘图辅助类 | 指标分支下的子类 | 保存时提示类型不符 |
| 仅计算、无输出线 | 视版本约定 | 可能被判为无有效输出 |
第四行这类公式要特别留意:一条公式若全部用等号声明、没有任何冒号输出,部分版本会判为无有效输出而拦下。处理办法是至少保留一条输出线,或改放到合适的分支。
五、按顺序排查的处理清单
- 确认提示出现在哪个动作上:测试、保存还是挂载。
- 查括号与引号是否成对,重点看报错行的上一行。
- 查标点是否全角,方法是对报错行整行重敲。
- 查自定义变量名是否与内置名重复。
- 查声明过的参数在语句里是否被引用。
- 查绘图调用的位置参数是否取自价格类字段。
- 查输出线条数是否过多,是否需要精简。
- 查公式所在分支与公式类型是否匹配。
这八项按发生频率排的序,前四项覆盖了多数情况。逐项做完仍不过的,把公式拆成两半分别测试,用二分法定位到具体语句。
{二分法定位}
1. 把公式前半段单独测试,看是否能过
2. 过的说明问题在后半段,反之在前半段
3. 对有问题的那一半再拆一半
4. 重复到定位到具体语句
{注意:拆分时保留参数声明,否则会因为缺少声明报新错}
六、通过之后的确认动作
校验通过只说明语法没问题,不说明公式算的是你要的东西。挂上主图后按下面几项确认。
七、把校验与运行分开看
校验通过之后的公式,仍可能在运行阶段出问题。两类问题的表现不同,处理手段也不同。
| 阶段 | 提示形态 | 处理手段 |
|---|---|---|
| 校验阶段 | 语法类提示,公式无法保存 | 按语法逐项排查 |
| 运行阶段 | 能保存、能挂载,但取值或图形不符预期 | 逐层输出变量核对 |
| 显示阶段 | 数值正确但图形呈现异常 | 检查绘图参数与坐标设置 |
第二行是这三类里最难处理的,因为它没有任何提示。定位方式是把公式拆层输出,与手工复算的结果比对。
{运行阶段的逐层核对}
第一层:把取数字段单独输出,确认量级正常
第二层:把中间计算量输出,取一根手工复算比对
第三层:把条件输出成 0/1 线,数清成立的根数
第四层:看最终绘图,与设计意图逐项核对
八、跨版本使用时的额外注意项
一条在自己的客户端上通过校验的公式,换到另一个版本或券商定制版上,可能被重新拦下。原因是不同版本支持的函数集合与语法约定不完全一致。
{跨版本前先确认的三件事}
1. 公式里用到的函数在目标版本里是否存在
2. 函数的参数个数与顺序是否一致
3. 该版本对主图公式的输出条数是否有限制
第一项与第二项的确认方式都是查目标版本的帮助文档。第三项需要在目标环境里实测一次。
九、校验通过不等于可以长期使用
客户端升级之后,原本通过的公式可能因为函数变更或校验规则调整而不再通过。这类变化未必主动提示,表现为某次升级后公式挂载失败。
{升级后的核对动作}
1. 逐个打开常用的自编公式,确认仍能通过测试
2. 重点检查用到了较多函数的公式
3. 出问题的公式对照升级说明,确认是哪个函数有变化
4. 记录下来,避免下次升级重复排查
第 4 项能显著降低升级带来的重复劳动。记录内容只需要公式名、出问题的函数名与处理方式三项。
{确认项}
1. 线条出现在预期位置,不遮挡关键价格区域
2. 线条数量与设计一致,没有意外的多余输出
3. 取值量级与字段定义相符
4. 切换周期后行为保持一致
5. 调整参数后效果按预期变化
第 4 项与第 5 项是与「未通过」相邻但不同类的问题:公式能跑,只是跑出来的东西在换周期或改参数时不符合预期。相关语法可以对照 通达信公式编写教程 一栏;主图与副图的挂载差异见 主图副图指标 一栏;其他类型的编译与运行提示见 报错与卡顿排查 一栏。
通达信主图公式未通过的处理,核心是把「提示不给位置」这件事接受下来,改用固定顺序逐项排查。上面八项按顺序走一遍,一般在第四项之前就能定位。定位不到时用二分法拆公式,不需要重新理解整段源码。
文中函数名、菜单名与提示文案按通达信 PC 版的常见形态描述;不同版本与券商定制版在校验规则、分支设置与提示措辞上存在差异,具体请以你所用客户端帮助文档与实际提示为准。本文只讨论公式校验机制与排查顺序,不构成任何投资建议。
