条件已经用代码算出来了,接下来要把它落到图上:在 K 线旁边画一段实体柱、在下方补一行字、或者打一个图标,这时候通达信公式绘图函数该从哪一个下手,三个参数里的位置又该填价格还是指标值?答案不在函数的数量,而在每个函数认哪几个参数、位置参数跟哪一个窗口的坐标对齐。把这两件事理清,画线、标记与文字就能分开处理,也不再出现代码能编译、图上什么都不显示的情况。
下面按「三类函数的分工、参数逐条拆开、位置参数的坐标系、常见坑与排查顺序、一个条件该配哪个函数」的顺序讲,全部落到函数名与参数上。函数名与参数顺序以通达信公式编辑器内附的函数说明为准,本机版本不同时,参数取值与颜色常量名以本机为准。
一、三类绘图函数各管一件事
把一个条件画到图上,用到的输出语句按图上出现的形态分成三类,各管一件事。
DRAWTEXT写文字:条件成立时在指定位置显示一段文本,文本用引号包住。STICKLINE画实体柱:条件成立时在上界与下界之间填充一段柱体,画成实心还是空心由末位参数决定。DRAWICON打图标:条件成立时在指定位置显示一个按编号取用的小图标。DRAWNUMBER标数值:条件成立时把数值按位输出成数字,用来在图上直接读出具体读数。
这几类语句在公式里都占一条输出,形态不同只影响图上怎么画,不影响条件算出来的值。形态选错时编译照样通过,只是图上不出现想要的东西,所以先按形态把函数对上,再去调参数。
本篇以 DRAWTEXT 与 STICKLINE 为主,DRAWICON 只作对照;图标编号表与图标设置本身在站内另一篇里已展开,不重复。
二、三个函数的参数逐条拆开
把通达信公式绘图函数的参数逐条摊开,会发现前两个参数语义相近,差别集中在位置与后面的修饰上。
DRAWTEXT(COND,PRICE,TEXT)
第一个参数 COND 是条件,写成结果取 0 或 1 的判定表达式,判定成立的那一根 K 线上才画图元。第二个参数 PRICE 是位置,写图元要落在哪一个坐标上,量纲由所在窗口决定。第三个参数 TEXT 是要显示的文字,用引号包住;引号里可以放中文与数字,数值与文字拼接的写法以本机函数说明为准。
STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY)
COND 与上面同义,控制这一段柱体画不画。PRICE1 与 PRICE2 是柱体的上下界,两点决定这一段的起止与方向;两点取同一个值时柱体没有高度,退化成一条水平线。WIDTH 是柱体宽度,写正整数,按像素还是按价格的最小变动单位计,以本机函数说明为准。EMPTY 是空心与实心的开关,0 与 1 分别对应一种填充方式,两个取值的对应关系以本机函数说明为准。
方向写反不会报错。把 PRICE1 与 PRICE2 的先后调换,柱体从 K 线下方翻到上方,条件本身不受影响,只是读数习惯变了。
DRAWICON(COND,PRICE,TYPE)
COND 是条件,PRICE 是位置,TYPE 是图标编号。编号与图标的对照表由本机图标库决定,不同版本里可能略有差异,不要凭记忆写编号,先在图标列表里核对。
条件参数为什么必须是判定
三个函数的第一个参数要的都是判定,不是数值本身。把颜色编号、位置系数或者别的常数写进 COND,编译能过,但条件落在恒真或恒假上,图元要么铺满整段 K 线,要么一处不出现。要确认条件写对没有,把同一个表达式先挂到副图上当一条输出线,看它在哪几根 K 线上取到成立值。
{ 绘图函数示例:三种函数各一条,条件与位置都写在参数里 }
DRAWTEXT(C > REF(C,1), L*0.98, '条件成立');
DRAWICON(C > REF(C,1), L*0.97, 1);
STICKLINE(C > REF(C,1), O, C, 8, 0);
{ 同一根 K 线上可以叠多条;哪一条先写,显示顺序就按写的先后走 }
三、位置参数的坐标系:主图写价格,副图写指标值
位置参数的量纲跟着所在窗口走,这一步弄错,条件成立也标不出来。
- 主图与 K 线共用一套价格坐标,
PRICE就写价格量纲,例如L、H、C、O,或者它们的表达式。 - 副图是指标窗口,坐标是这条指标的取值区间,
PRICE就写指标值量纲,例如 0、50、100,或者指标线自身的读数。 - 同一条语句从主图搬到副图,写进去的数值对不上该窗口的坐标范围,图元落到可视区之外,缩放也找不回来。
- 想让标注贴住 K 线下沿又不压住柱体,位置用
L*0.98这类相对表达式,系数取多少按本机显示效果调。
主图与副图的切换靠公式的挂载位置,同一个公式挂在哪一个窗口,就按那一个窗口的坐标画,位置参数的数值不跟着自动换算。
{ 同一条件放在两个窗口:位置参数的写法不同 }
主图 —— DRAWTEXT(COND, L*0.98, '条件成立');
副图 —— DRAWTEXT(COND, 0, '条件成立');
{ 位置参数的量纲跟窗口走,数值不自动换算 }
四、常见坑与排查顺序
通达信公式绘图函数编译通过、图上却什么都不出现时,往下查的次序落在几处。
- 条件写成数值而不是成立判定。
COND要的是判定表达式,常数写进去以后条件不在 0 与 1 之间切换,图元要么铺满要么空白。 - 位置超出可视区。文字或图标落在坐标范围之外,切换周期或缩放后可能又冒出来;把位置换成
L或H的相对表达式,让图元贴着 K 线。 - 密集信号重叠。连续多根 K 线同时成立时,文字与图标叠在一处,看不出个数;用
REF(COND,1)=0与条件相与,只保留这一段里首根成立的那一根,再画图元。 - 在副图里按价格写位置。副图坐标是指标值,写成价格量级以后位置远在窗口之外,图元标不出来。
- 颜色修饰写在参数之前。颜色常量要接在参数之后,写到参数中间会被当成多余参数;常量名以本机函数说明为准。
排查顺序可以固定下来:先看条件取不取得到成立值,再看位置落没落在窗口内,最后看形态与修饰写得对不对。条件错会整段有或整段无,位置错只在窗口边缘附近出不来。
{ 条件写成判定,位置改用相对表达式,修饰接在参数之后 }
COND := C < REF(C,1);
DRAWTEXT(COND, L*0.98, '条件成立'), COLORRED;
STICKLINE(COND, O, C, 8, 1), COLORRED;
{ 颜色常量名以本机函数说明为准 }
五、一个条件该配哪个绘图函数
选择依据按图上要出现什么来定,三条对应关系直接记住即可。
- 要一段可读的字,用
DRAWTEXT。 - 要一块有高度的色柱,用
STICKLINE。 - 要一个固定大小的符号,用
DRAWICON。 - 三者都能追加抑制画线的反向参数,写不写、写在哪个位置,以本机函数说明为准。
| 图上要出现 | 用哪个函数 | 位置参数写什么 |
|---|---|---|
| 一段文字 | DRAWTEXT |
主图写价格,副图写指标值 |
| 一段实体柱 | STICKLINE |
上下界各写一个价格或指标值 |
| 一个小图标 | DRAWICON |
主图写价格,副图写指标值 |
决策捷径可以压成三步。第一步看图上要出现什么:出现的是一段可读的字就用 DRAWTEXT,出现的是一块有色高度的柱体就用 STICKLINE,出现的是一个固定大小的符号就用 DRAWICON。第二步看位置参数写哪个量纲:主图写价格,副图写指标值。第三步看要不要压掉重复:同向连续成立时用间隔控制只画首根。三步走完,一个条件该配哪个通达信公式绘图函数就定下来了。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有:公式的赋值与输出规则见 公式编写教程,主图与副图的窗口划分与坐标见 主图副图,函数与菜单的基础问题见 新手问答。
