通达信公式显示范围由两处决定:公式挂在哪个窗口,纵轴按什么量级铺刻度。同一段公式挂到主图和挂到副图,输出落在屏幕上的高度不一样;换一个量级更大的写法,纵轴上下限跟着换,几条输出之间的高低关系也跟着换。把这两处拆开看,图上那些忽隐忽现的文字、贴着水平线的振荡线、从半路才开始画的折线,就有了可以照着走的排查顺序。
下面按五件事讲:显示范围由什么决定,三种挂载位各自的坐标系,画线函数越出可视区之后的表现,坐标类型与量级差异带来的压平,最后是验证方法。口径以通达信金融终端个人版的图表窗口与公式管理器为准,公式管理器的入口位置与提示措辞在不同版本里可能有差异,以本地版本的实际显示为准。
一、通达信公式显示范围由挂载位与纵轴刻度共同决定
通达信公式显示范围的第一层决定因素是挂载位置。公式挂到主图,纵轴沿用 K 线的价格刻度;挂到副图,纵轴由该窗口内全部输出线的取值重新铺开。位置一换,同一段输出落在屏幕上的高度就换了基准,输出的形状没变,读出来的高低关系已经变了。
第二层决定因素是纵轴的自动缩放。窗口刷新时,会按当前可视区内所有输出线与价格序列的最大值、最小值把纵轴铺满。输出的量级变了,刻度上下限跟着变。把公式里的振幅参数调大之后,纵轴跨度随之拉宽,原来那段曲线在视觉上被压扁。这是坐标换算的结果,与公式的计算逻辑无关,改动参数之后先确认一下是不是这个原因。
还有一个容易被忽略的参与者:同一个窗口里所有输出线共用一条纵轴。窗口内有一条取值跨度较大的线,纵轴就按它铺开,取值量级小的那条线被挤到靠近某一条水平线的位置,看上去接近一条直线。判读之前先看这个窗口里是不是还挂着别的输出,能省掉一轮多余的排查。
二、主图、副图与独立窗口三种挂载位
挂载位在「公式管理器」(快捷入口 Ctrl+F)里改,也可以在图上右键选择公式。三种位置各有适用对象,选错位置的直接后果就是坐标系不匹配。
- 主图:纵轴与价格序列共用,适合把输出叠加在价格上的写法,例如均线、通道上下轨、按价格比例换算出来的线。
- 副图:独立纵轴,适合振荡类输出,例如差值、比值、离差类指标。取值不随价格量级走,形态才看得清。
- 独立窗口:与主图分成两块画布,纵轴互不影响,比副图更省主图空间,代价是同一根 K 上的对照要靠视觉来回切换。
挂载位一改,坐标系就换。把原本挂在副图上的振荡线挂到主图,价格刻度把这根线的振幅整个包住,线的形态被压平;反过来把价格线挂到副图,副图纵轴按价格铺开,K 线那套刻度失去了参照。同一份公式输出在两个窗口里的样子差别有多大,取决于量级差多少。主图副图指标里对两类窗口的分工有更细的对照,这一节只讲显示范围这一段。
三、画线函数越出可视区之后的表现
显示范围的边界落在可视区上。可视区是屏幕当前显示的那一段纵轴与横轴范围,超出这个范围的绘制内容不进入画面。这一条决定了几个画线函数在边界上的表现。
DRAWTEXT 与 DRAWICON 都带一个定位参数,文字或图标按这个定位参数落在纵轴的某个高度上。定位高度落在可视区之外,这一次绘制被跳过,画面上看不到内容;把纵轴缩放或切换坐标类型,让这个高度回到区内,内容重新出现。看到文字时有时无,先查定位参数是不是贴着纵轴的上下沿。
COND:=CLOSE < MA(CLOSE,20); DRAWTEXT(COND, LOW*0.98, 'BELOW'); DRAWICON(COND, LOW*0.95, 1);
上面两行的定位参数乘了一个系数,把锚点压到价格下方。系数继续放大,锚点离开可视区,内容就不再渲染;把系数收回来,内容回来。系数本身不参与条件判断,它只影响落点,所以改系数不会改变信号出现的根数,只会改变画面上能不能看见。
取历史值的 REF 在数据起点附近另有一种表现。REF(X,N) 取 N 根之前的那一个值,可视区左侧还没走到那么远的历史时,这个位置取不到值,该点按无效值处理,折线在那里断开,线从第一个有效数据的起点才开始画。把图往左拖、或者把加载的数据补长,断点位置随之向右移动,这是数据长度的边界,不是公式写错了。
四、坐标类型与量级差异:线被压平的两处成因
纵轴的坐标类型分普通坐标与对数坐标。普通坐标按数值等距铺刻度,相同的数值差对应相同的屏幕高度;对数坐标按比例铺刻度,相同的涨跌幅对应相同的高度。同一段输出在两种坐标下的视觉斜率不同,纵轴标注也跟着换。切换坐标类型的入口在图的纵轴区域,切换之后先看纵轴标注,把坐标变化当成公式变化的判断会带偏后面几步。
压平的第一处成因是挂载位。取值量级小的输出和价格共用纵轴,价格把刻度撑开,小量级的线被压到接近水平。处理办法是把这条输出拆到副图,让副图按它自己的取值范围重新铺刻度,形态立刻恢复。
第二处成因是同一窗口内多条输出的量级不一致。一条线的取值在个位数,另一条在两位数,共用纵轴时小量级那条贴着底边走。处理办法是归一化:把量级小的输出按比例映射到与主输出接近的区间,再放进同一个窗口。下面给一段可用的写法。
MA20:=MA(CLOSE,20);
RATIO:=CLOSE/MA20;
RANGE_C:=HHV(HIGH,60)-LLV(LOW,60);
NORM:=MA20+(RATIO-1)*RANGE_C; { 把比值型输出映射到价格区间 }
DRAWBAND(MA20,NORM);
归一化之后,两条输出落在同一个纵向区间里,形态可以并排对照。代价是纵轴刻度不再直接读得出原始数值,要读原始值还得回到副图看。这一段取舍按用途定,不做统一口径。
| 现象 | 含义 | 处理 |
|---|---|---|
| 文字或图标忽隐忽现 | 定位参数落在可视区之外,这一次绘制被跳过 | 调回定位系数的量级,或缩放纵轴后复核 |
| 线从某一点开始才画出来 | REF 取历史值时越出数据起点,前段按无效值处理 | 补长加载的数据,或把取值根数调小 |
| 振荡线贴着一条水平线 | 与价格或大跨度输出共用纵轴,被刻度压平 | 拆到副图,或按上面的写法归一化 |
| 换坐标类型后斜率变了 | 普通坐标与对数坐标的刻度铺法不同 | 先看纵轴标注,确认是坐标变化而不是公式变化 |
| 同一公式在主图与副图表现不同 | 两个窗口的纵轴来源不同 | 按输出的量级选择挂载位 |
这张表按现象倒推成因,用得上的前提是每次只改一处。同时换挂载位又换坐标类型,改完之后对不上原因,排查的路就分岔了。
五、下一步要做的事
下一步动作是按最近一次没看懂的图走一遍检查顺序:先看这条输出挂在哪里,再把这个窗口里其余输出临时去掉,看纵轴刻度有没有变,然后把纵轴往下拖,确认内容是不是因为超出可视区而没画出来,最后把坐标类型切一遍,对照纵轴标注的变化。四处查完仍对不上,再回到公式本身核对取值根数与条件。
上面这套顺序只针对通达信公式显示范围的成因排查,不改动公式的计算逻辑。要改输出写法,可以先在公式管理器里用「测试公式」按钮过一遍语法,再挂回图上复核,改动前后的输出根数记下来,便于下一次对照。指标原理与参数里讲输出的量级与参数之间的关系,与这里讲的显示范围互相补充。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信公式编写教程 的其余条目,从赋值与逻辑运算讲到循环与注释,可对照查看。
