条件已经用代码算出来了,接下来要把它落到图上:在 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, '条件成立');
{ 位置参数的量纲跟窗口走,数值不自动换算 }

四、常见坑与排查顺序

通达信公式绘图函数编译通过、图上却什么都不出现时,往下查的次序落在几处。

  1. 条件写成数值而不是成立判定。COND 要的是判定表达式,常数写进去以后条件不在 0 与 1 之间切换,图元要么铺满要么空白。
  2. 位置超出可视区。文字或图标落在坐标范围之外,切换周期或缩放后可能又冒出来;把位置换成 L 或 H 的相对表达式,让图元贴着 K 线。
  3. 密集信号重叠。连续多根 K 线同时成立时,文字与图标叠在一处,看不出个数;用 REF(COND,1)=0 与条件相与,只保留这一段里首根成立的那一根,再画图元。
  4. 在副图里按价格写位置。副图坐标是指标值,写成价格量级以后位置远在窗口之外,图元标不出来。
  5. 颜色修饰写在参数之前。颜色常量要接在参数之后,写到参数中间会被当成多余参数;常量名以本机函数说明为准。

排查顺序可以固定下来:先看条件取不取得到成立值,再看位置落没落在窗口内,最后看形态与修饰写得对不对。条件错会整段有或整段无,位置错只在窗口边缘附近出不来。

{ 条件写成判定,位置改用相对表达式,修饰接在参数之后 }
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。第二步看位置参数写哪个量纲:主图写价格,副图写指标值。第三步看要不要压掉重复:同向连续成立时用间隔控制只画首根。三步走完,一个条件该配哪个通达信公式绘图函数就定下来了。

本文只作技术研究口径,不涉及也不构成对任何标的的判断。

站内还有:公式的赋值与输出规则见 公式编写教程,主图与副图的窗口划分与坐标见 主图副图,函数与菜单的基础问题见 新手问答。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。