通达信DRAWNULL怎么用?条件线断开、不画线与零值区别

DRAWNULL无效数与零值输出的原创流程示意,非软件截图
原创逻辑流程示意,非通达信客户端截图。

发布日期:2026年10月11日。本来只想在条件成立时显示一段线,为什么条件不成立时线却掉到了零附近?关键是没有数值可画与数值等于0不是一回事。DRAWNULL返回无效数;0仍是一个可参与数值计算的值。

适用环境:支持DRAWNULL的通达信技术指标编辑环境。定义依据用户红宝书,示例为原创手算模型,未在具体客户端实测。本文不提供手机与电脑跨版本通用保证,也不把绘图线当作交易指令。

一、DRAWNULL与0解决的是不同问题

COND:=CLOSE>OPEN;
SHOW:IF(COND,CLOSE,DRAWNULL);
ZERO:IF(COND,CLOSE,0);

两行都在COND成立时输出收盘价,但否则分支完全不同。SHOW在该位置返回无效数,不输出普通数值点;ZERO输出数字0。如果纵轴覆盖了零点,ZERO就可能改变显示尺度。连接样式、主图副图和客户端设置也会影响最终外观,不能只凭折线截图判断函数结果。

模型根 OPEN CLOSE CLOSE>OPEN SHOW分支 ZERO分支
1 10 11 真 11 11
2 11 10 假 无效数 0
3 10 10 假 无效数 0
4 10 12 真 12 12

表中的“无效数”是语义标签,不是要复制进公式的字符串。模型只核对分支值,不承诺无效位置两侧的线段一定以某种像素样式连接或断开。

二、相等时为什么也没有线

如果条件写成CLOSE>OPEN,平开平收时也不成立。类似地,CLOSE>REF(CLOSE,1)只包含严格上涨,不包含收盘价与上一根相等。不要把“否则”简单理解为“只在下跌时”。

RISE:=CLOSE>REF(CLOSE,1);
PRICE_WHEN_RISE:IF(RISE,CLOSE,DRAWNULL);

先单独核对RISE,再决定业务问题需要“严格大于”还是“大于等于”。不要为了让线连续就盲目更换比较符号。历史引用还受首根样本和有效数据范围影响,首个可计算位置要另行确认。

三、DRAWNULL不是条件为假的通用替代品

选股公式需要表达的是条件是否成立;绘图公式需要决定的是该位置输出什么。不要用SHOW>0这样的派生条件绕一圈,也不要假定无效数参与加减、统计、比较时等同于0。无效值如何传播需要对照相应函数说明和客户端表现,本文不作统一保证。

XG:CLOSE>OPEN;

这是与第一个绘图示例相对应的独立布尔条件,不是对绘图公式自动转换的承诺。公式类型和输出数量要求可对照主图、副图与选股公式区别。

四、按这个顺序排查不显示

  1. 在备份副本中保留一条最小输出,确认公式确实被当前图表调用。
  2. 先输出条件使用的原始数据,核对比较方向、相等值和历史引用位置。
  3. 条件为假时检查自己需要零值还是无效数,不根据外观直接改写逻辑。
  4. 分别核对绘图样式、纵轴范围和公式类型;数值正确但外观不同属于另一类问题。
  5. 记录客户端版本、图表周期和样本根号,避免拿不同周期的截图互相比较。

更多入口见通达信基础教程中心;条件分支可看IF嵌套与输出排错,历史位置可看REF引用对齐教程。

来源与限制

原始依据:通达信用户红宝书《通达信公式-全部函数.docx》的DRAWNULL与IF条目。本文没有测试无效数在全部统计函数中的传播行为,不作“无未来函数”、收益或买卖建议。