通达信副图指标公式挂到窗口上,副图一多,屏幕就被切成好几段:上方一段价格、中间一段量、下面再叠两段指标,每段分到的高度越来越窄。窗口之间的坐标各管各的,同一组数值在两个副图里占的纵向比例不一样,把两条曲线上下对照时,眼睛要先在刻度上找一遍基准。挤只是表面现象,跨公式取数取不到、输出为空看不出原因,才是后面几节要处理的地方。下面按挂载关系、窗口调整、坐标类型、跨公式取数、空值处理、数量取舍六处往下讲。
一、副图窗口与输出线的对应关系
副图窗口的挂载单位是公式,不是输出线。一个公式里写了几条输出语句,它们都落进同一个副图窗口,纵向共用一块区域;窗口的个数取决于挂了几条公式,跟一个公式画了几条线没有关系。把两条独立的指标合进同一个公式,窗口数才会减一。
区分输出与中间量靠赋值符。赋值符有两种::= 把结果存下来,不画线;: 是输出,会在窗口里占一条线。写公式时把过程量统一用 :=,只让需要看的量走 :,窗口里的线条数就只由后一类决定。
{同一个公式里的三条输出语句,纵向共用一块副图区域}
DIFF := CLOSE - REF(CLOSE,1); {中间量,用 := 不画线}
快线 : EMA(CLOSE,12); {输出线一}
慢线 : EMA(CLOSE,26); {输出线二}
差值 : 快线 - 慢线, NODRAW; {算出数值,用 NODRAW 抑制画线}
这三条输出语句写在一个公式里,副图上只多出快线与慢线两条可见线,差值这条因为带了 NODRAW 只留数值。它们占的是同一个窗口的纵向空间,不会各自另开一个副图。反过来,把这三条线拆成三个公式挂上去,副图就多出两段,每段分到的高度被一路压下来。
二、窗口顺序与高度的调整
副图窗口按挂载顺序从上往下排,先挂上去的排在顶部。要改高度,把指针移到两段副图之间的横向分界线上,指针变成上下箭头后按住拖动,上下两段此消彼长,屏幕分给副图的总高度不变。分界线拖到贴边时,其中一段会被压成一条窄带,曲线读数就失去意义,这时要减的是窗口个数。
在同一块副图区域上点右键,会弹出一组跟该窗口有关的菜单项,含有删除当前指标、修改指标参数、更换指标、窗口个数一类。菜单名称在不同版本里可能略有差异,以本机为准,不要照搬某一版截图里的名称去找。段数多到拖不动时,先把窗口个数改小,再逐段调高度。
拖动改的是显示高度,不改公式的计算结果。同一个指标在不同高度下画出的曲线形状一致,只是纵向被拉伸或压缩,读数要对着刻度看,不能按曲线的陡缓估数值。分界线的位置跟着当前这张图保存,换到另一只标的的图上,要按该图自身的设置重新确认一次。
三、坐标类型的显示差异
窗口排好之后,通达信副图指标公式各自还能选坐标类型。右键点副图区域,可以在普通、对数、百分比、自动几种之间切换。它们改变的是纵向刻度的映射方式,不改公式算出来的数值。
普通坐标是线性映射,刻度等距,读数值量级方便。对数坐标把纵向间距按数值比例压缩,跨度大的数值不会把曲线挤在底部。百分比坐标以窗口内起点为基准,显示相对起点的变化幅度,同一段涨跌在百分比坐标与线性坐标下的纵向高度不同。自动坐标由软件按窗口内数值范围取上下界。
同一组数值换坐标类型,曲线形状会变,数值不变。要在两个副图之间做对照,先把两边坐标类型设成一致,否则纵向映射不同,比出来的高低差没有意义。数值统一回刻度或数据窗口读。
四、跨公式取数为什么取不到值
通达信副图指标公式之间的变量各管各的。在一个公式里定义的变量名,只在它自己内部有效,写进另一个公式就变成未定义,编译会报错或者直接取不到值。同一屏挂了两个副图,不等于两个公式的变量互通,这属于两件事:窗口是显示层的分段,变量是公式层的名字。
要取别的指标的值,用字符串引用写法:把目标公式名与线名用引号包起来,中间用点连接,写成 "公式名.线名" 的形式。取到的是那条输出线的数值,前提是目标公式已经存在、并且那条线的名字与写法一致。另一种办法是扩展数据:先把数值写入扩展数据序号,再用取数函数按序号读回来,适合一小组数值需要在多个公式之间来回用的场景。
{跨公式取数的可编译写法}
{直接写 MACD.DIF 会被当成未定义变量,取不到值}
线一 : "MACD.DIF"; {字符串引用,取目标公式的输出线}
线二 : "MACD.DEA"; {同上,取另一条线}
柱差 : 线一 - 线二, NODRAW; {中间量,只取数值不画线}
上穿 : CROSS(柱差, 0); {输出线,条件成立处为 1}
外部 : EXTDATA(1), NODRAW; {按序号读取扩展数据,不画线}
引用里的引号是源码的一部分,写成不带引号的 MACD.DIF 会被当成变量名解析,结果是未定义。被引用的公式要已经保存在本机的公式目录里,源公式删掉后引用处随之失效。扩展数据要先在扩展数据管理里建好序号并写入,序号对不上同样取不到值。
五、输出为空与不画线的几种情形
公式挂上去看不到线,先分清是没算出值,还是算出了值但不画。返回无效值、加了抑制画线的修饰、条件分支不成立、历史数据根数不够,这四种都会让某一段不显示线条,机制各不相同。
DRAWNULL 是一个无效返回值。条件不成立的分支返回它时,对应位置不画点,曲线在该处断开。抑制画线的修饰加在输出语句后面,数值照算,只是不在窗口里画线,用来把只做计算用的量留在公式里。条件写法里用条件函数取不同分支,某一支不满足时同样不产生可画的值。取历史数据的函数在数据根数不足时返回无效值,窗口开头一段没有线属于正常。
{不画线的几种来源}
无效值 : IF(CLOSE > OPEN, CLOSE, DRAWNULL); {条件不成立处返回无效值,断开}
只取值 : MA(CLOSE,20), NODRAW; {算出数值但不画线}
断点 : IF(BARSCOUNT(CLOSE) < 60, DRAWNULL, CLOSE); {数据不足的前段留空}
遇到空白段,先看公式里有没有这几类写法,再看该日数据是否已经更新到本地,不要一上来就重装或重建公式。核对的办法是打开数据窗口,看那一列有没有数值,有值而不画线就回到公式找抑制写法,没值就往数据更新上查。
六、窗口与输出线的取舍
窗口数和每条窗口里的线条数要一起控制。一个副图里的数值量纲差得多时,纵向刻度很难同时照顾两头,把量纲接近、波动范围接近的指标并进一个公式,用不同颜色区分输出线;量纲差得远的留在各自窗口。
合并的写法是把几条输出语句放进同一个公式,颜色在公式管理器的修改界面里逐条设,线型与颜色常量以本机的函数说明为准。合并之后注意线名不要重复,跨公式引用时靠的就是这个名字。名字改了,别处按老名字写的引用会失效,这一点在合并前后各核对一次。
这一步改的是通达信副图指标公式的写法,改完要在公式管理器里点一次测试公式,确认编译通过再挂回副图。窗口高度与坐标类型属于显示设置,跟着当前图保存,换到别的图上需要重新确认。
挂图之前把下面几项过一遍,它们对应的是通达信副图指标公式从挂载到显示的几个环节:
- 窗口个数等于挂载的公式个数,不是输出线的条数;要减少窗口,合并公式而不是删线
- 需要画出来的量用
:,只做计算或供引用的量用:=或者加 NODRAW - 取别的指标的值,写
"公式名.线名"字符串引用,或者走扩展数据序号;不带引号的点号写法会被当成未定义变量 - 副图空白先查
DRAWNULL、NODRAW、条件分支与历史数据根数,再查数据有没有更新到本地 - 两图对照前把坐标类型设成一致,数值回刻度或数据窗口读
- 改完公式先点测试公式,再拖分界线调高度、设颜色与线型
- 右键菜单项名称按本机版本核对,不要照搬别版的名称
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 指标原理与参数 的条目,通达信主图副图指标 里讲挂载与输出渲染,通达信公式编写教程 里讲赋值符与函数引用,可对照查看。
