通达信画K线公式要做的,是用绘图函数自己把一根柱子摆进指标窗口,这件事跟给系统自带的 K 线按条件改颜色不在同一层:前者画出来的是一个数值序列,后者动的是客户端自己的 K 线绘制。把开、高、低、收四个价位按位置摊开,再让填充函数在两根价位之间填一段颜色,一根柱子就出来了。
下面按柱身与影线的位置、填充函数的两个价位、影线单独画还是并进实体、空心与实心的差别、柱宽与输出量纲、逐根核对六步展开。参数取值以本机公式编辑器里函数列表的提示为准。
一、自己画的柱子与系统 K 线不是一层东西
系统 K 线的开高低收来自行情数据,客户端按自己的坐标轴把每一根画出来,公式这一侧改不了它的取数,也改不了它的画法。公式能做的,是让绘图函数在指标窗口里再生成一组图形:这组图形长得可以跟系统 K 线一样,来源却是两处。
自己画一根柱子,先把四个价位当成四个水平参考位置:开与收夹出柱身那一段,高与低夹出整根柱子的上下两端。开与收谁在上谁在下由这一根自身决定,取数时先用 MAX 与 MIN 把上下两侧定下来。
{ 四个价位与两个区间 }
BODY_H := MAX(O, C);
BODY_L := MIN(O, C);
{ 柱身上沿 BODY_H,下沿 BODY_L,BODY_H 不小于 BODY_L }
UP_LEN := H - BODY_H;
DN_LEN := BODY_L - L;
{ UP_LEN 与 DN_LEN 是影线长度,不是位置 }
MAX 与 MIN 取两个数里较大与较小的那个,把开与收自动分到上下两侧:不管这一根收高于开还是开高于收,BODY_H 都落在实体上沿。影线那两个变量算的是长度,画线时要换回价位;长度与价位是两套数,混着写柱子会整体偏移。
二、STICKLINE 的两个价位怎么取
写通达信画K线公式时,最常用到的填充函数是 STICKLINE(条件,价1,价2,宽度,空心标志),它在一对价位之间把一段填上颜色。价1 与价2 是两个价位,函数把它们当成两根水平线,在两条线之间填充,谁在上谁在下由数值大小决定。
第一项条件管这一根画不画。写成 1,每一根都画;写成 C >= O 这一类比较式,只有满足的那批根上才填充。条件不成立的根上函数不输出图形,图上那一段是空的。
把较大的价位写在价1。柱身这一支写两句,条件互为反面:收不低于开的一句取价1 为收、价2 为开,收低于开的一句取价1 为开、价2 为收。两句的宽度与填充标志写成同一组,柱身才会长得齐。
{ 柱身:两句一对,条件相反 }
STICKLINE(C >= O, C, O, 8, 0);
STICKLINE(C < O, O, C, 8, 0);
{ 价1 取较高者,价2 取较低者 }
价位取错的表现很好认:把柱身那一句的两个价位写成开与高,填出来的会是贴着上影的一段色块,不是柱身。核对时对着四个价位量一次,柱身两条边应当等于开与收里对应的那一对。
| 部位 | 价1(较高) | 价2(较低) | 条件 |
|---|---|---|---|
| 柱身(收不低于开) | C | O | C >= O |
| 柱身(收低于开) | O | C | C < O |
| 上影 | H | MAX(O,C) | 1 |
| 下影 | MIN(O,C) | L | 1 |
三、上下影线:单独画还是并进实体
影线有两种写法。一种是单独画:上影从高填到实体上沿,下影从实体下沿填到低,各写一句,宽度比柱身窄。另一种是并进实体:先画一根从低到高的细柱,再用柱身盖上去,剩下的就是上下影。
{ 写法一:影线各写一句,宽度取窄 }
STICKLINE(1, H, MAX(O, C), 2, 0);
STICKLINE(1, MIN(O, C), L, 2, 0);
{ 写法二:整柱一句,柱身随后覆盖 }
STICKLINE(1, H, L, 2, 0);
STICKLINE(C >= O, C, O, 8, 0);
两种写法的差别在覆盖顺序。绘图函数按书写顺序输出,写在前面的先画。并进实体那一支要把整柱写在柱身前面,柱身才能把中段盖住;顺序写反,细柱压在最上层,柱身中间会留出一道窄线。
单独画影线不依赖覆盖,起止价位直接算出来:上影的价1 取高、价2 取实体上沿,下影的价1 取实体下沿、价2 取低。这两句的条件写 1,因为影线的有无由高与低本身决定,长度算成 0 的那几根不出现图形。
四、空心与实心:第五个参数的两种填充
填充函数的第五个参数管填充方式,取两个值,0 与 1,分别对应实心与空心。实心把开盘到收盘这一段涂成一个色块,空心只在柱身四周留一道框。同一根柱子把这一项换一次,填充变了,柱身落在哪一段不会变。
空心在柱身比较小的时候不容易看清:柱身只有一小段,边框本身又占去一部分宽度,柱体看上去像一条粗线。柱身足够大时空心更容易读出两层,边框给出开盘与收盘两条边。影线要不要用空心,与柱身分开决定。
{ 同两个价位,两种填充对照 }
STICKLINE(C >= O, C, O, 8, 0);
STICKLINE(C >= O, C, O, 8, 1);
{ 两句价位与宽度相同,只换第五项 }
不同资料对第五项这两个数字的方向介绍不一致,落到本机时以公式编辑器的参数提示为准:先在图上试一次,看清哪个数字对应空心。这一项只改填充,输出量一分不动。
五、柱宽参数与输出量纲
通达信画K线公式画出来的柱子是副图里的指标输出量,不是主图那一层的东西,这一点决定了它归哪条坐标轴管。宽度这一项取的是图形宽度,量纲与价格无关,取值区间写在函数提示里,0 到 20 是一段常用的范围:取 0 或者取很小的数,柱子细成一条线,取到 10 上下,柱身一眼能看见。
柱身落在哪一段是价位算出来的,它的量纲是价格,跟主图系统 K 线同一个量纲,落在副图却要用副图自己的坐标轴。副图不按主图的价格区间定界,它按接收到的输出量重新定范围,输出的最大值与最小值决定纵轴的上下界。
这里有一个容易踩的坑:只把柱身当成输出量,纵轴就按柱身上沿与下沿定界,影线那一段可能伸到轴外被裁掉;把高与低也一起输出,纵轴上下界才盖得住影线。柱子看着矮的时候先看副图量程再看数:价格落在十几元到上百元,副图纵轴按这个区间拉出来,与主图的系统 K 线不同框,两边不能直接比高矮。
横坐标也要对一遍。副图与主图根数一致时柱子才对得上;改过数据范围或切换过复权设置,两边根数错开,柱子整体平移。对照时把两边的刻度分别看一遍。
六、逐根核对顺序
柱子画出来之后,按下面这个顺序逐根看一遍:
- 先数根数。图上柱子的根数与系统 K 线的根数对齐没有,停牌段不生成 K 线,两边会差开,对不齐先查数据范围。
- 再看柱身的两条边。取几根收不低于开的,看柱身上沿是否等于收、下沿是否等于开;再取几根收低于开的,看两条边有没有跟着换位。
- 再看影线的两端。上影的上端应当落在高上,下影的下端落在低上;长度算成 0 的那几根不出现影线,属于正常。
- 再看填充。同一根柱子把第五项换一次,填充变了、柱身位置没动,说明这一项只作用于观感。
- 最后看坐标轴。副图纵轴的上下界与输出的极值对得上没有,影线有没有被图框裁掉。
核对时中间量全部用 := 算出来,一次只把一条改成 : 输出。多条线一起输出,量纲混在一个副图里,看不出是哪一条出的问题。
公式画的是行情数据里的开高低收,取数跟着当前的复权设置走。同一段行情在复权与不复权下四个价位不同,柱子也不同,核对前先确认复权设置。
把上面这几条走完,通达信画K线公式画出来的每一根柱子才算跟原始数据对得上;空心还是实心、柱宽取几,都只在这一步之后才谈得上好看。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 主图副图与视觉呈现 的条目,通达信公式编写教程 讲函数写法与参数取值的通例,指标原理与参数 讲输出量与坐标轴、量纲的关系,可对照查看。
