写通达信K线包含公式之前,先把方向定下来。包含关系本身只是两根 K 线之间的区间关系,但处理包含的时候必须选一个方向——按向上处理,还是按向下处理。方向不定,公式里写出来的高低点序列会来回跳,画在图上看不出规律。
下面把包含关系的定义、方向的选择、公式写法与图上标注四件事按顺序讲完,最后给一段可以逐点核对的验证办法。全文只讲几何关系与取值口径,不涉及判断层面的内容。文中函数名以通达信金融终端为参照,可在公式编辑器的函数查询里核对。
一、包含关系的定义
相邻两根 K 线,如果其中一根的最高价不低于另一根的最高价,并且最低价不高于另一根的最低价,那么这一根的区间把另一根完全罩住,两者构成包含关系。用高低两个端点判断即可,不需要看开盘与收盘。
{ 包含关系的两种情形 }
情形一:当前这根罩住前一根
HIGH >= REF(HIGH,1) 且 LOW <= REF(LOW,1)
情形二:前一根罩住当前这根
HIGH <= REF(HIGH,1) 且 LOW >= REF(LOW,1)
{ 两个条件同时成立属于相等,按同向处理 }
判断只用高低两端,是因为 K 线的区间由最高价与最低价决定。开盘价与收盘价决定的是实体,实体的长短不影响区间的罩住关系。用实体去判断包含,会把一批实际构成包含的 K 线漏掉。
端点完全相等的情形要单独说一句。两根 K 线的最高价与最低价完全相同时,前面两条判定会同时成立。这种情形按同向处理,只需要标一次;如果两个条件分别输出,图上会出现两个重合的标记,看起来像两处包含关系。把两个条件用或的关系合成一个输出,就不会有这个问题。
二、方向先定,再谈合并
包含关系出现之后,两根 K 线要合并成一根继续往后比较,否则包含会顺着序列一直传递下去,越滚越大。合并的方式取决于当前序列的方向:向上走的时候取两者的最高价作为新高、取两者中较高的最低价作为新低;向下走的时候取较低的最高价与较低的最低价。
| 方向 | 合并后的高点 | 合并后的低点 |
|---|---|---|
| 向上 | 两根高点中较高的那个 | 两根低点中较高的那个 |
| 向下 | 两根高点中较低的那个 | 两根低点中较低的那个 |
方向怎么来,取决于合并之前的序列是往上还是往下。这就带来一个实现上的选择:要么在公式里只做标注、不做合并,把每一处包含关系直接标在图上交给看图的人;要么引入一个方向变量,按顺序递推地处理。前者简单,输出是一串标记;后者复杂,输出是一条平滑后的高低点序列。
选哪一种,取决于你要拿输出去做什么。只是想把包含位置找出来逐个数一遍,标注版本就够;要把高低点序列接到别的判断上,才需要合并版本。通达信K线包含公式的这两条路线在写法上差别不大,在核对上的难度差得多,先做简单的那一条是省事的顺序。
三、公式怎么写
标注版本的通达信K线包含公式只需要比较四个端点,把成立的位置输出成条件值。写成两点:一个表示当前这根罩住前一根,另一个表示前一根罩住当前这根。
{ 标注版本:只判定,不合并 }
A1:=HIGH-REF(HIGH,1); { 高点之差 }
A2:=LOW-REF(LOW,1); { 低点之差 }
B1:=A1>=0 AND A2<=0; { 当前罩住前一根 }
B2:=A1<=0 AND A2>=0; { 前一根罩住当前 }
包含:IF(B1 OR B2,1,0);
{ 输出为 1 表示该位置存在包含关系 }
合并版本要在上面基础上加两个量:一个记录当前方向,一个记录合并后的高值与低值。方向可以用高低点的相对位置来判断,也可以用均线方向这类外部量来定;用哪种取决于你想让合并跟着谁走,写之前先决定,因为两种口径画出来的序列不同。
四、把包含处标在图上
判定出来之后要在图上看得见,用绘图类函数画在 K 线附近。标记类输出挂在主图上,用图标画在最低价下方的位置,或者用短线段画在两根 K 线之间。这两种画法都不改变 K 线的绘制,只是在图上叠加符号。
{ 把包含位置标在主图下方 }
DRAWICON(包含,HIGH*1.02,2);
{ 位置参数按需调整,符号编号以函数说明为准 }
标记的位置要留出余量。画在最高价之上的标记会被上方的 K 线挡住,画在最低价之下同样会被下影线盖住,用倍数偏移把标记推出 K 线区间之外,图上才看得清。倍数取值不必精确,能看出来即可。
标记的疏密与阈值无关,这一点与别的公式不同。包含关系是几何判定,没有可以调整的阈值参数,标出来多少处由价格序列决定。看到标记很密,不要去找参数,去看周期——换一个更长的周期,相邻两根之间的区间关系会重新排列。
五、核对与边界
核对通达信K线包含公式的办法是逐点对照。在图上找到一处肉眼可见的包含关系,记下它的日期,再看公式在这一天有没有输出标记,位置对不对。找一处最直观的,比如一根大实体 K 线包住前一根小 K 线的位置。对上了,再看一处相等的情形,确认两个条件都成立时会输出一个标记而不是两个。
还有一类边界是数据完整性。序列最左边若干根没有更早的 K 线可比,第一根不参与判定,这一点在公式里会自动体现为没有输出;手动核对时直接从第二根开始对。核对记录建议写成四列:位置日期、两根 K 线的高低点、是否构成包含、公式输出。四列记下来,发现输出与预期不一致时,能直接看出是判定条件写错了还是核对的位置选错了。通达信K线包含公式的核对不需要覆盖很长的时间段,两三处不同的情形就足以说明条件写对了。主图副图指标 一栏讲输出挂在主图上的取值与显示设置,公式编写与语法函数 一栏讲绘图函数的参数写法,两处接在这一步之后看。
把包含关系写成公式之后,得到的是一组位置坐标,而不是一个结论。这一组位置可以用来核对形态描述里的说法是否与价格序列一致,也可以用来检查同一段描述在不同周期下是否还成立。公式本身不做取舍,取舍留给人。这也是把几何关系先量化的价值所在:一个说法能不能被复现,验一次就知道。
量化之后还有一件附带的事:同一个说法在不同品种上是否成立,也可以逐个数出来。数出来的结果只描述被数过的那些位置,不负责推广到别的地方。
文中函数名与菜单路径以通达信金融终端为参照,函数参数与符号编号可在公式编辑器内的函数查询中核对;不同版本与券商定制版的支持范围可能存在差异,请以你所用版本的函数说明与图表显示效果为准。
