通达信主图公式源码里容易被绕过的一处,不是画线函数叫什么名字,而是输出的数值落在什么量级。主图与 K 线共用同一套坐标轴,公式输出多大,直接决定 K 线在图上还剩多少可见高度。量纲没对齐,后面画线、上色、标注都做对了,读图的人看到的仍然是错的。
下面按量纲约束、画线组织、颜色与线型、标注位置、加载后的验证五层来写,每层给一段可运行的写法与对应的观察点。全文只讨论公式语言的写法与显示口径,不涉及任何标的的判断,也不评价任何指标的效果。
一、主图公式先受量纲约束
主图和 K 线在同一个价格轴上。输出值落在价格量级的公式,比如均线、通道上下轨、成本线,能与 K 线并排显示;输出值远高于价格的公式,会把坐标轴的刻度拉长,K 线被压成一条细带;输出值接近 0 的公式,线条贴在轴的底部,看不出任何形态。
坐标轴的范围由图上所有可见线条共同决定,公式多输出一条高值线,压缩的是同一张图上的全部 K 线。这一点在调试时容易忽略:单看线的走势没问题,整张图的形态已经没法读了。
{ 均值类输出:与价格同量级,可直接叠加 }
MA20:MA(CLOSE,20);
{ 比例类量若直接输出,量级与价格差若干个数量级 }
{ 需要先换算到价格量级再画 }
R1:=VOL/MA(VOL,20)*CLOSE;
{ 条件不成立处断开线条,避免连成一条直线 }
{ DRAWNULL 表示该位置不绘制 }
COND:=CLOSE>MA(CLOSE,20);
L1:IF(COND,MA(CLOSE,20),DRAWNULL);
二、画线类写法怎么组织
主图上常用的绘制分四类:连续线条用 DRAWLINE、POLYLINE,柱状标记用 STICKLINE,图标用 DRAWICON,文字用 DRAWTEXT。四类的第一个参数都有人位置或条件的含义,位置参数写错时公式不报错,只是画到了别处。
组织顺序上,把取值计算与绘制分成两段:前一段只做赋值,后一段只做输出。这样改绘制样式时不会碰到计算部分。
{ 第一段:只赋值,用双冒号,不产生输出线 }
N:=20;
UP:=MA(CLOSE,N)+2*STD(CLOSE,N);
DN:=MA(CLOSE,N)-2*STD(CLOSE,N);
{ 第二段:输出与绘制,用单冒号或绘制函数 }
通道上轨:UP,COLORGRAY;
通道下轨:DN,COLORGRAY;
STICKLINE(CLOSE>UP,HIGH,MAX(CLOSE,OPEN),1,0),COLORRED;
单冒号与双冒号的差别在这里体现得最直接:用单冒号写中间变量,公式会自动为每个中间量画一条线,主图上很快会多出几条没有意义的曲线,并且它们和 K 线争夺同一段坐标高度。
三、颜色与线型的参数
颜色按常量名写,常见的有 COLORRED、COLORGREEN、COLORBLUE、COLORYELLOW、COLORWHITE、COLORCYAN、COLORMAGENTA、COLORGRAY 等;也支持用 COLOR 后接六位十六进制值指定颜色。线宽用 LINETHICK 后接数字控制,取值越大线条越粗。
| 参数 | 作用位置 | 写错时的表现 |
|---|---|---|
| 颜色常量名 | 语句末尾,逗号之后 | 写成语句中间的标识符时被当作变量名,编译停在未知标识符 |
| 十六进制颜色值 | COLOR 之后 |
位数不对时颜色与预期不符,但不报错 |
| 线宽值 | LINETHICK 之后 |
值偏大时线条盖住 K 线本体 |
线宽是主图上需要克制的一处。K 线本体在图上占的宽度有限,一条粗线从上方压过去,开盘价与收盘价的位置就看不清了。判断办法是看被线覆盖的那几根 K 线,是否还能分辨出实体与影线。
四、信号标注的位置控制
文字与图标的落点由位置参数决定。以价格轴为基准时,标注会随坐标缩放移动,缩放之后相对 K 线的高度会变,但文字的显示大小不变。这一点决定了标注与 K 线的相对位置不是固定的,需要留出余量。
{ 在K线上方留出偏移量,减少与影线重叠 }
T1:=CROSS(CLOSE,MA(CLOSE,20));
DRAWTEXT(T1,HIGH*1.02,'上穿'),COLORRED;
{ 同一根K线上多点触发时先做去重 }
{ 用距上次条件的间隔做限制,避免标注叠在一起 }
B1:=BARSLAST(T1);
DRAWICON(T1 AND B1>=10,LOW*0.98,1);
去重条件的位置容易放错。写在绘制函数的第一个参数里,条件才同时约束绘制与计数;写在别处,计数与实际绘制的根数会对不上。
五、主图与副图不能随意互换
两处差异决定了它们不能互换。一处是坐标轴:主图与 K 线共用一个价格轴,副图有自己独立的量纲轴,同一条输出线挂在两个位置,读到的含义不同。另一处是输出量纲要求:主图要求输出落在价格量级,副图对量纲没有这个要求。
把副图公式挂到主图上,量纲不匹配,结果是 K 线被压扁;把主图公式挂到副图上,输出线画在副图自己的坐标系里,与 K 线的高低关系不再对应。判断一个公式属于哪一类,看它的输出量级是否与价格可比即可,不必看源码出自哪里。
六、加载之后怎么验证
通达信主图公式源码改完之后,按下面的顺序在图上核一遍,每一项都能直接看出来,不需要额外工具。
- K 线在图高里占的比例是否足够。被压成细带说明图上存在量级偏离的输出线。
- 每条线是否都落在价格区间内。贴在图表底部或顶部之外的线,量纲没换算。
- 标注文字与图标是否与 K 线实体重叠。重叠说明偏移量给小了。
- 把图放大与缩小各做一次,看标注与 K 线的相对位置是否可接受。
- 切换周期(日线、周线、分钟线)各看一次。跨周期引用写得不完整时,换周期后会出现空值或直接的直线。
- 把图拉到本地数据的最左端,看输出是空值还是 0。数据不足时返回 0 的写法,会在图的左侧拉出一条水平线。
- 公式管理器里核对这一条挂在哪个分支下,确认类型与内容匹配。
通达信主图公式源码的写法可以很自由,输出值落在价格量级是后面所有工作能成立的前提。站内 主图副图与视觉呈现 一栏讲挂载位置与显示设置,公式编写与语法函数 一栏讲函数写法,指标原理与参数优化 一栏讲指标构造,可对照查看。
文中函数名、颜色常量与菜单路径以通达信金融终端个人版为参照;不同版本与券商定制版的函数列表可能存在差异,请以你所用版本「帮助 → 关于」显示的版本号与公式编辑器内的函数说明为准。本文只讨论公式写法与显示口径,不构成对任何公式效果的说明。
