想让主图在某一段行情里换一层底色,翻遍函数列表也找不到叫「背景」的那一项。通达信主图背景公式不是靠某个专门函数完成的,它拿绘图函数去铺一块颜色区域,让这块区域落在 K 线周围。可行的写法有两条:一是用填充带把两条数值边界之间的整片区域涂满,二是用固定宽度的竖条在指定条件下排成一排。
下面按函数缺位这件事、两种写法的参数、坐标依赖、画上去看不见的几种情形、以及改完怎么核对来写。颜色与宽度的取值以本机公式编辑器里的函数说明为准,挂载位置以主图右键菜单里的叠加设置项为准。
一、主图上没有现成的背景函数
主图的绘制分两层:系统按开高低收画 K 线,指标公式往这一层上面再画东西。公式里能调用的绘图函数都是往图上「加」元素,没有一个是改画布底色的。所谓背景,是往 K 线上下一段区域内填充颜色,把它当作底色来用。
这件事决定了两个后果。第一,填充出来的色块也是图上的一个元素,会与 K 线争位置,压在上面的关系由绘制顺序决定。第二,色块的边界是数值,不是像素,主图纵轴一缩放,色块跟着变。
还有一层区别要分清:主图上原本就有背景色,那一层是在系统设置的外观项里改的,与公式无关。通达信主图背景公式画出来的色块盖在那一层上面,两处同时改会让颜色叠加,看不出是哪一层在起作用。排查颜色问题时,先确认是不是只动了一处。
另外要分清它与 K 线上色的差别。K 线上色是把 K 线本体换成另一种颜色,色块只落在实体与影线的范围里;背景填充涂的是两条边界之间的整片区域,范围比单根 K 线宽得多,两者可以同时存在。
二、写法一:用填充带包住两条边界
填充带的函数接收四个参数:一条上边界、一种颜色、一条下边界、另一种颜色。两条边界都是数值表达式,取什么值,色块就落在哪一段。
{ 用均线作为色块的两条边界 }
MA5 := MA(C, 5);
MA20 := MA(C, 20);
FILL: DRAWBAND(MA5, RGB(255,220,220), MA20, RGB(220,240,255));
{ 上边界与下边界都是价格口径,色块夹在两条线之间 }
两条边界的口径要一致。都取价格,色块就贴着价格区间走;一条取价格、一条取固定数值,两条线不在同一尺度上,色块会被拉到很远的地方,在图上只看到一片盖住半屏的颜色。
边界表达式的选择决定了色块的含义。用两条均线,色块表示两条均线之间的关系;用 K 线的上下轨,色块表示价格是否触及某个区间;用常量,色块就是固定的一条横带。
三、写法二:用竖条排成色块
另一条路是拿画竖条的绘图函数来铺。这个函数接收条件、起始价、结束价、宽度与空心标志,宽度给得足够大,相邻几根画出来就拼成一片。
{ 关键区间用宽竖条铺色 }
COND := MA(C, 5) > MA(C, 20);
MARK: STICKLINE(COND, 0, 1, 8, 0);
{ 起始价与结束价给成固定区间,宽度 8 画成粗条 }
这种写法的边界不是价格,而是绘制时给的起止价。起止价给固定值,色块就固定在图上某个区段;给成随价格变化的表达式,色块跟着价格走。宽度参数是相对的,写 8 画出来的是一排竖条,不是连续的一片,相邻根之间会留缝。
两条路的差别在可控性上。填充带给出的是连续区域,边界由数值决定;竖条拼出来的是断续的块,边界由宽度与起止价共同决定。要连续的一段底色,选前者;要按条件开关的色块,选后者。
四、为什么画上去看不见
公式写完了,图上却没有色块,先按下面三种情形查。
| 情形 | 表现 | 怎么确认 |
|---|---|---|
| 公式类型选错 | 在主图叠加列表里找不到这一支 | 公式管理器里看这支公式归在哪个分类下 |
| 输出线条数超出主图可容纳条数 | 提示叠加失败,或只画出前几条 | 数一下公式里以冒号输出的变量有几个 |
| 没在图上挂载 | 编译通过,主图没有任何变化 | 主图右键菜单的叠加设置里看有没有选中它 |
第一种情形与画法无关,是公式分类的问题。主图叠加只接受归在技术指标下的公式,归在条件选股或其它分类下的调不出来。第二种与输出条数有关,主图能同时叠加的线条数是有限的,超出部分不显示,色块的输出语句排在被截掉的那一段里,就等于没画。
第三种是挂载。编译通过表示语法没问题,但公式要出现在图上,还要在主图右键菜单里把它选为叠加对象。改完公式之后,如果这一支已经在叠加列表里,重新调用一次让它重画。
五、坐标依赖带来的偏移
色块的位置由边界数值与主图纵轴共同决定。主图纵轴取的是价格范围,边界给的是价格,两者同尺度,色块落在哪一段就由数值说了算。
换了一种刻度,结论跟着变。把纵轴从普通刻度改成对数刻度,同一个价格区间在图上占的高度不再是等比的,固定的色块看起来会被压扁或拉长。这不是公式算错了,是刻度换了,边界值没换。
{ 边界随价格变化的写法 }
BASE := REF(MA(C, 20), 1);
UP := BASE * 1.05;
DOWN := BASE * 0.95;
FILL: DRAWBAND(UP, RGB(255,225,225), DOWN, RGB(225,240,255));
{ 边界按上一根的均线成比例给出,随价格整体移动 }
边界写成随价格变化的比例式,色块会跟着价格整体平移,不会因为行情涨跌而跑到图外。边界写成固定数值,行情走远之后色块就留在原地,看上去像是消失了一块。改通达信主图背景公式的边界时,先确认它是跟着价格走的,还是钉在某个不动的位置上。
两条边界的顺序也要固定。函数按参数位置区分上下边界,把上下写反,色块仍然会画出来,但取的是两种颜色,深浅关系跟着颠倒。看颜色猜顺序不稳妥,把两个边界表达式与函数参数位置逐个对上再写。
色块的视觉厚度由两条边界的间距决定,与颜色无关。间距极小的两条边界画出来是一条细线,看起来像是画错了;间距跨过整个价格区间,色块就是一整片。设置边界之前,先在副图上把这两条表达式各自画一遍,看它们之间的间距落在什么范围,再决定要不要拿它们当作填充的下上沿。
六、改完怎么核对
核对看三处,顺序固定。
先看编译。公式管理器里点「测试公式」,输出区给出每个以冒号输出的变量的取值,色块对应的那一条有没有值,在这一步就能看出来。
再看挂载。确认公式归在技术指标分类下,并且已经在主图右键菜单的叠加设置里被选中。这一步过了,主图上应当出现颜色区域。
最后看边界。把色块的两条边界单独画到副图上,与主图上的色块上下沿对照,两者的位置一致,说明边界的口径与主图纵轴是同一套。
通达信主图背景公式铺的是一块颜色区域,它不参与任何信号计算,输出值只是边界数值。色块画得对不对,看的是边界与挂载这两件事,与公式的判定逻辑无关。
站内还有 通达信主图副图与视觉呈现 的条目,通达信公式编写教程 讲绘图函数的参数,通达信信号拆解 讲把条件拆成判断段,可对照查看。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
