通达信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;
这是与第一个绘图示例相对应的独立布尔条件,不是对绘图公式自动转换的承诺。公式类型和输出数量要求可对照主图、副图与选股公式区别。
四、按这个顺序排查不显示
- 在备份副本中保留一条最小输出,确认公式确实被当前图表调用。
- 先输出条件使用的原始数据,核对比较方向、相等值和历史引用位置。
- 条件为假时检查自己需要零值还是无效数,不根据外观直接改写逻辑。
- 分别核对绘图样式、纵轴范围和公式类型;数值正确但外观不同属于另一类问题。
- 记录客户端版本、图表周期和样本根号,避免拿不同周期的截图互相比较。
更多入口见通达信基础教程中心;条件分支可看IF嵌套与输出排错,历史位置可看REF引用对齐教程。
来源与限制
原始依据:通达信用户红宝书《通达信公式-全部函数.docx》的DRAWNULL与IF条目。本文没有测试无效数在全部统计函数中的传播行为,不作“无未来函数”、收益或买卖建议。




