通达信不画线公式这个说法,指的是一类需求:算出来的中间量要参与后续判断,但不想让它以线条形式出现在图上。常见的处理方式是算完之后再想办法把线藏起来,结果要么藏不干净,要么把数值本身改坏了。正确顺序是反过来——在算之前就说清楚这条不画。

下面按「输出与中间量的区别 — 不画的两种实现思路 — 三条路径的写法 — 验证」展开。文中函数名与语法按通达信 PC 版的公式系统常见写法描述,不同版本与券商定制版在函数签名与绘图行为上存在差异,请以你所用客户端帮助文档为准。

一、冒号与等号:从源头决定画不画

通达信公式里,语句用冒号还是等号,决定了这个量会不会画到图上。这是控制显隐的第一层,也是成本最低的一层。

{冒号:输出线,会画到图上}
参考线:MA(CLOSE,20);

{等号:中间变量,不画线}
原始值:=MA(CLOSE,20);

上面两条算的是同一个值,差别只在符号。用等号声明的量只参与后续计算,不出现在图上。这是通达信里实现「算而不画」的基本方式。

符号 是否绘图 能否被后续语句引用 典型用途
冒号 画 能 最终要展示的线
等号 不画 能 中间计算量
冒号加等号组合 按版本约定 能 需要按版本确认

第三行的写法在不同版本上的行为可能不同,写之前先在编辑器里测一次,看它有没有画线。

二、通达信不画线公式的第二种实现:图形层面的抑制

有些量必须用冒号输出,例如需要它出现在图例里、或需要它在数据窗口中可查询。这时用等号就达不到目的,只能从图形层面处理。

图形层面的处理有三条路径,适用条件不同。

路径一:把值的区段处理成无效值

{思路:在不想显示的区段上,把值替换成空值}
原始线:EMA(CLOSE,20);

{只在条件成立处保留原值,其余位置给空}
展示线:IF(条件,原始线,空值);

{注意:不同版本对空值的写法与接受方式不同}

这条路径的代价是数值被改动了。原来那条线的取值在这条语句之后就不再完整,任何依赖它做后续计算的语句都会受影响。用它之前要确认后面没有别的语句引用这条线。

路径二:把线宽设为不可见

部分版本提供线宽参数,把宽度设为零或不画线的值,可以让线不显示。这条路径不改数值,但依赖版本是否支持该参数。

路径三:改用不带绘制的函数

把绘图类函数换成纯计算类函数,只取数值不绘制。这条路径同样不改数值,但需要确认后续逻辑是否依赖该函数的绘图属性。

三条路径里,只有路径一改动数值。判断该走哪条的标准很简单:这条线后面还有没有被别的语句引用。有引用就只能走路径二或路径三;没有引用才可以用路径一。走错的表现是图上线不见了,同时另一条本该正常的线也跟着变了形。

三、常见的写错顺序

错误顺序是:先按正常方式把线画出来,发现图面太乱,再回头去处理显隐。这样做的直接后果是源码里同时存在两种意图的表达,读起来互相矛盾。

{错误的写法:先画后藏,数值已被处理过}
主:EMA(CLOSE,20);
藏起来的主:IF(条件,主,空值);

{后面若还有语句引用 主,取到的是处理前的值}
{若引用 藏起来的主,在条件不成立处会取到空值,结果不可用}

正确顺序是在写每一行之前先判断这个量的用途:要展示的用冒号,只参与计算且不需要在图例中出现的用等号,需要出现在图例但不能画线的走图形层面处理。这个判断在写之前做,成本最低。

四、需要出现在图例里但不画线的一种折中

有一种需求同时要求两件事:这条量要在数据窗口里能查到值,但不能在图上画出线。这个需求在通达信里有一个折中方向:把值输出成一条水平参考线之外的单点标记,或者把该量挂在一个不遮挡行情的副图坐标上,再配合不画线设置。

{折中思路}
{把值输出到副图,图面上不占主图位置}
{再按版本支持的方式抑制线条绘制}
量值:计算表达式;

{验证:图面上看不到线,数据窗口里能查到该量的取值}

这类折中写法依赖具体版本的能力,落地之前先在编辑器里测一遍。测试的判据是两个:图面上是否真的看不到线,数据窗口里是否真的能查到值。

五、验证通达信不画线公式的四个动作

  1. 看图面:该量对应的线条是否完全不出现,不留下残留的线头或孤立的点。
  2. 看数据窗口:若该量需要可查询,确认它的取值正常,没有被处理成空值。
  3. 看后续语句:凡引用了这条量的语句,取值是否仍与预期一致。
  4. 看切换效果:改变参数或切换周期后,线与不线的状态是否保持。

第三项是这一套里最关键的一项。数值被改坏的写法,图面上看不出问题,只在后续计算结果上表现出来。

验证项 通过的表现 不通过说明
线条不出现 图面上找不到该量的线 抑制写法没生效或位置不对
取值正常 数据窗口里取值完整 数值被无效值处理过
后续不受影响 引用了它的语句结果不变 该项被改动的写法影响了后续
状态保持 换参数、换周期后仍不画 抑制写法只在部分条件下生效

六、参数与周期的两处影响

第一处是参数变化。以条件驱动的抑制写法,条件本身若依赖窗口长度,改窗口会改变被抑制的区段,图面效果跟着变。核对时把窗口调大调小各看一次。

第二处是周期切换。同一个抑制条件在日线与分钟图上的行为不同,因为每根代表的时间不同。跨周期使用时,抑制的区段会整体重新分布,需要重新确认。

{周期切换的核对方式}
1. 在日线图上确认抑制效果
2. 切到 60 分钟图,再看一次
3. 比较两处被抑制的区段占全图的比例
4. 若比例差别明显,说明条件依赖的数据密度不同
{处理方向:把条件改成与周期无关的写法,或接受差异}

通达信不画线公式的核心就是把显隐意图提前表达出来。写之前先分清这条量要不要展示、要不要可查询、后面有没有被引用,三个问题答完,写法自然确定。

七、显隐控制与其他显示问题分开看

图面上出现异常时,要区分是显隐控制没生效,还是别的显示设置引起的问题。两类问题的表现有时很像。

表现 属于哪一类 处理方向
整条线不出现 显隐控制生效 符合预期的不用处理
线条只出现一小段 抑制条件在部分区段不成立 检查条件的成立范围
线出现但颜色异常 颜色设置或图形参数 检查颜色相关设置
线出现但与另一条重叠 坐标范围或数值区间 检查两条线的量级是否一致
切换周期后突然出现 抑制条件依赖数据密度 把条件改成与周期无关的写法

前三行与显隐控制直接相关,后两行属于其他显示设置。把它们分开之后,排查范围会缩小一半。

八、把显隐意图写进注释

不画线的语句在源码里没有明显标记,几个月后回看,会看不出这条量为什么用等号而不是冒号。补一行注释可以解决这个问题。

{注释写法}
{中间量:参与下方判断,不单独作图}
参考量:=MA(CLOSE,20);

{展示线:需在图例中出现,因此用冒号}
最终线:参考量*系数;

{此处若改为冒号,图面会多出一条线,除非确需展示否则不要动}

注释的内容不用长,说明这条量为什么这样声明即可。改动源码时,注释能避免把等号误改成冒号。

九、什么时候应该反过来做

有一类情况需要把原本不画的量改成画出来。典型场景是排查问题:某条中间量的取值不符合预期,需要把它单独显示出来观察。这时把它临时改成冒号,确认之后改回等号。

{临时显示的写法}
调试用:中间量;      {临时改成冒号,观察取值}
{确认后改回}
中间量:=计算表达式;

临时显示的写法要记得改回。留在源码里的调试输出线,会让后续使用者无法判断这条线是设计内的还是遗留的。这与注释的作用是同一件事的两面。

相关语法可以对照 通达信公式编写教程 一栏;图面显示类问题的其他排查方向见 主图副图指标 一栏;抑制写法改动数值后引发的异常定位见 报错与卡顿排查 一栏。

判断自己写法对不对,有一个成本很低的检查:把该量临时改回冒号,看图上出现的是什么形状。形状与你预期一致,说明数值没被改坏,抑制只是没生效;形状与预期不同,说明数值在之前就被处理过了。

文中函数名与语法按通达信 PC 版公式系统的常见写法描述;不同版本与券商定制版在符号约定、空值写法与参数支持上存在差异,具体请以你所用客户端帮助文档为准。本文只讨论公式语法与显示机制,不构成任何投资建议。

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