K线包含和分型处理¶
首先我们回顾一下在缠中说缠原文中对顶底分型的定义:
- 顶分型:第二个K线高点是相邻三个K线高点中最高的,而低点也是相邻三个K线低点中最高的
- 底分型:第二个K线低点是相邻三个K线低点中最低的,而高点也是相邻三个K线高点中最低的
但是K线并不总是那么标准,相邻的两个K线可能存在包含关系,所以禅师引入了包含关系的处理,把原始的K线序列经过处理后,变成没有包含关系标准K线序列。
如果完全按照原文中的规则进行包含处理和识别分型,也并没有什么歧义,但是在最终的图形中会出现分型顶点前后出现毛刺的情况(也就是分型顶点并不是最高最低点)。
很长的一段时间我们都在寻求一种处理算法,要求能规避掉这些毛刺的出现,今天这篇文章也是为这个目的而生,这里会努力提出一套新的处理算法,并且在fqchan01中来实现这套算法。
大家还记得我们以前定义过一个叫做WAVEOPT的笔控制参数吗,在fqchan01中我们也沿用这个定义。我么用WAVEOPT个位数上的数字来控制选用哪种包含的处理算法。
- 如果个位数上是0,就采用原文中的包含处理方法,不做任何修饰。
- 如果个位数上是1,就采用第一种修正算法。
- 如果个位数上是2,就采用第二种修正算法。
也就是在这里我们会提出两种修正算法。我们先从三种方法都有的处理逻辑开始阐述,然后再分别阐述三种处理逻辑的不同部分。
起始K线的方向和包含处理¶
当处理包含关系的时候,做向上处理还是做向下处理,要先定义什么是向上什么是向下,缠师是这样定义的:
假设,第n根K线满足第n根与第n+1根的包含关系,而第n根与第n-1根不是包含关系,那么如果 \(g_n > g_{n-1}\),那么称第n-1、n、n+1根K线是向上的;如果 \(d_n < d_{n-1}\),那么称第n-1、n、n+1根K线是向下的。
很显然,在这个定义中,如果n=0那么是不是就玩不下去了,所以我们还是需要一个定义来没有遗漏且精确地描述出K线方向的判断:
K线包含关系处理规则(第一种修正算法)¶
基本定义¶
- 设\(K_n\)为第\(n\)根K线,其高点为\(h_n\),低点为\(l_n\)
初始方向确定(n=0时)¶
- 查找最小的\(x>0\)使得\(K_{n+x}\)与\(K_n\)无包含关系
- 方向判定:
- 若 \(h_{n+x} > h_n\) 且 \(l_{n+x} > l_n\) → \(K_n\)方向向下
- 若 \(l_{n+x} < l_n\) 且 \(h_{n+x} < h_n\) → \(K_n\)方向向上
后续K线处理(n>0时)¶
假设\(K_0\)到\(K_{n-1}\)已处理,\(K_n\)为待处理K线:
情况1:前包含关系¶
条件:\(K_n\) 包含 \(K_{n-1}\)
- 方向继承:
- \(K_{n-1}\) 向上 → \(K_n\) 向上,做向上包含处理
- \(K_{n-1}\) 向下 → \(K_n\) 向下,做向下包含处理
情况2:后包含关系¶
- 单根包含
条件:\(K_n\) 仅包含 \(K_{n-1}\) - 这也是方向继承 - \(K_{n-1}\) 向上 → \(K_n\) 向上,\(K_n\) 和 \(K_{n-1}\) 作向上包含处理 - \(K_{n-1}\) 向下 → \(K_n\) 向下,\(K_n\) 和 \(K_{n-1}\) 作向下包含处理
- 多根包含
条件:\(K_n\) 包含 \(K_{n-1}\) 到 \(K_{n-x}\),\(x > 1\) - 当 \(h_n > h_{n-x-1}\)时: - \(K_{n-1}\)向上 → \(K_n\)向上,\(K_n\)和\(K_{n-1}\)作向上包含处理 - \(K_{n-1}\)向下 → \(K_n\)向上,\(K_n\)作为独立K线处理(特殊K线) - 当 \(l_n < l_{n-x-1}\)时: - \(K_{n-1}\)向下 → \(K_n\)向下,\(K_n\)和\(K_{n-1}\)作向下包含处理 - \(K_{n-1}\)向上 → \(K_n\)向下,\(K_n\)作为独立K线处理(特殊K线)
至此,我们把K线方向的判断和包含处理做了完整的定义。
K线包含关系处理规则(第二种修正算法)¶
这里我们还要提出另外一种包含处理方法,他和第一种修正方法基本一样,区别只是后包含关系中的第2种情况处理方式不同,下面我给出精确的定义。
如果\(K_n\)后包含\(K_{n-1}\)到\(K_{n-x}\), x>1: - 当 \(h_n > h_{n-x-1}\)时: - \(K_{n-1}\)向上 → \(K_n\)向上,\(K_n\)和\(K_{n-1}\)作向上包含处理 - \(K_{n-1}\)向下 → \(K_n\)向上,\(K_n\)到\(K_{n-x}\)做向下包含处理,原\(K_{n-x}\)到\(K_{n-1}\)的包含K线取消(特殊K线) - 当 \(l_n < l_{n-x-1}\)时: - \(K_{n-1}\)向下 → \(K_n\)向下,\(K_n\)和\(K_{n-1}\)作向下包含处理 - \(K_{n-1}\)向上 → \(K_n\)向下,\(K_n\)到\(K_{n-x}\)做向上包含处理,原\(K_{n-x}\)到\(K_{n-1}\)的包含K线取消(特殊K线)
相信这样的定义已经完整了,可以根据喜好选择其中一种处理方式作为主要的划分手段。