通达信公式除零怎么办?分母保护、无效值与异常结果排查

公式分母与有效数据标记的原创流程示意,非软件截图
原创分式检查示意,非通达信客户端截图。

发布日期:2026年10月16日。公式结果突然变成异常大值、空值或停止计算,先把分式拆成分子和分母。分母为零时,数学上没有普通除法结果;实际客户端怎样提示或传播异常,需要现场记录,不能先假设一定返回0或某个固定值。

适用环境:支持IF、DRAWNULL及普通行情字段的通达信公式编辑环境。本文依据官方红宝书,为原创数值模型,未做客户端实测。重点是建立分母保护和有效性记录,不保证修复任意加密指标或全部版本。

一、区间位置公式为什么会遇到零分母

考虑学习模型(CLOSE-LOW)/(HIGH-LOW):分子表示收盘离最低价的距离,分母表示本根高低价区间。输入OHLC合法且HIGH>LOW时,可得到区间内的位置比例。如果HIGH=LOW,区间长度为0,不能继续把结果解释为普通比例。

H/L/C 分子 分母 应如何理解
12/8/10 2 4 比例0.5
10/10/10 0 0 零区间,比例未定义
10/8/10 2 2 比例1
9/10/10 0 -1 最高低于最低,先查原始数据

第二行不能随意标成“位置0”,否则它会与收盘真正位于最低点的有效样本混在一起。第四行也不能直接对分母取绝对值掩盖异常,应该先核对是否混入其他根、其他品种或不同口径字段。

二、先让除数安全,再决定输出是否有效

DATAOK:=HIGH>=LOW AND HIGH>=OPEN AND HIGH>=CLOSE
        AND LOW<=OPEN AND LOW<=CLOSE;
DEN:=HIGH-LOW;
OKR:=DATAOK AND DEN>0;
SAFED:=IF(OKR,DEN,1);
RAWPOS:=(CLOSE-LOW)/SAFED;
POSLINE:IF(OKR,RAWPOS,DRAWNULL);

在字段有效的前提下,SAFED在合法正区间取真实分母,其余取常量1。被替换位置的RAWPOS只是中间占位结果,不具备原区间比例的含义;最终POSLINE通过OKR将它与有效结果分开。1不是估计出来的真实区间,不应把占位结果用于统计或筛选。

这段代码避免把除法直接放在可能为零的原始分母上,也不依赖“IF未选中分支必然不计算”的短路假设。官方基本IF条目说明返回值,未给出全部客户端和表达式的短路保证。本例同时不解决缺失字段传播、行情来源真实性或所有精度问题。

三、为何不统一给分母加一个很小的数

把分母一律写成DEN+0.000001会改动所有正常样本,且不能保证原分母恰好为负的同样小数时仍安全。用MAX(DEN,小数)也会把合法负分母变为正值。是否允许负数,取决于具体指标定义,不能把本篇只接受正区间的方法套到所有有正负方向的比率。

本例中最关键的是区间是否严格为正,所以在有效位置保留原分母,在无效位置另作标记。若业务需要“过小也无效”,必须另外说明阈值单位、数据精度和依据,不把任意常量包装成通用标准。

四、绘图无效与选股为假分开处理

若用于筛选,需要明确要求输入有效,而不是用绘图线的空值去猜真假。以下是独立的单输出学习示例,0.5只是演示阈值:

DATAOK:=HIGH>=LOW AND HIGH>=OPEN AND HIGH>=CLOSE
        AND LOW<=OPEN AND LOW<=CLOSE;
DEN:=HIGH-LOW;
OKR:=DATAOK AND DEN>0;
SAFED:=IF(OKR,DEN,1);
RAWPOS:=(CLOSE-LOW)/SAFED;
XG:OKR AND RAWPOS>0.5;

这样零区间不会因占位比值而成为有效命中。大于0.5不含恰好0.5;是否包含边界应来自实际问题定义。本文没有验证这一筛选条件的市场表现,也没有把它作为投资策略。

五、保存哪些信息才能复现异常

  1. 备份公式,固定品种、周期、复权和异常K线日期,保留完整错误提示。
  2. 在技术指标诊断副本中分别观察OPEN、HIGH、LOW、CLOSE、DEN与OKR,不直接覆盖原公式。
  3. 先区分零区间、负区间、缺失数据和小正区间,再决定跳过、显示无效或单独分类。
  4. 用上表合成数字核对数学关系,再在目标客户端验证实际保存、编译和显示。
  5. 继续检查公式的其他分式;只保护一个分母不能证明完整公式没有异常或未来数据依赖。

来源与相关教程

原始依据:通达信用户红宝书《通达信公式-全部函数.docx》的除号、IF、DRAWNULL和行情字段条目。相关:教程中心、IF分支与返回值、无效数与零值区别、OHLC实体与影线检查。不承诺特定版本兼容、信号稳定或收益。