阶段 2·基本构件·第 1 / 3 节·约 12 分钟
包含处理
判断两根 K 线是否存在包含关系,并按正确方向合并它们。
从这一课开始动手。包含处理是缠论的第一道工序,也是最不容易出错的一道—— 规则完全确定,没有任何解释空间。
什么是包含关系
两根相邻 K 线,如果一根的高低点区间完全落在另一根的区间之内, 就说它们存在包含关系。
严格地说,设两根 K 线的高点为 h₁、h₂,低点为 l₁、l₂:
- 若 h₁ ≥ h₂ 且 l₁ ≤ l₂,则第一根包含第二根
- 若 h₂ ≥ h₁ 且 l₂ ≤ l₁,则第二根包含第一根
注意用的是 ≥ 和 ≤,边界相等也算包含。两根 K 线高点相同、低点也相同时, 互相包含,按包含处理。
为什么要处理它
因为包含关系会破坏分型的判定。
下一课要讲的分型,定义是「三根 K 线里中间那根的高点最高、低点最低」。 如果这三根 K 线之间存在包含,「最高」和「最低」就可能同时落在同一根上, 判定失去意义。
所以缠论的做法是:先把有包含关系的 K 线合并成一根,让处理后的序列里 任意相邻两根都不存在包含关系。 之后所有的结构判定都在这个处理后的序列上进行。
两种合并方向
合并规则的核心是:方向决定取值。
合并的方向由更早的走势方向确定——也就是看被合并的这一对之前, 走势是在往上还是往下。
向上合并(前面的走势向上):
- 新的高点 = 两根 K 线高点中的较大者
- 新的低点 = 两根 K 线低点中的较大者
向下合并(前面的走势向下):
- 新的高点 = 两根 K 线高点中的较小者
- 新的低点 = 两根 K 线低点中的较小者
方向怎么定
方向由前一根(已处理的)K 线和再前一根的关系决定: 如果前一根的高点比再前一根高,方向向上;否则向下。
序列开头没有「再前一根」怎么办? 这时候方向未定, 通常的处理是默认向上,或者跳过直到能确定方向为止。 本站算法采用前者。这个选择只影响序列最开头的一两根 K 线, 对整体结构没有影响。
在图上看
下面这段日线的包含关系出现得比较密集。图上「分型」层画出的是处理后的结果—— 你会发现有些位置的分型标记跨越了好几根原始 K 线,那就是被合并过的地方:
真实日线 sh600519,截取 90 根,数据截至 2024-09-19。仅用于结构演示,非实时行情。
连续包含
一个容易忽略的细节:合并出来的新 K 线,可能和再下一根又构成包含。
这时候要继续合并,直到不再包含为止。所以一个合并结果可能吃掉三根、五根甚至更多原始 K 线。
算法实现上这是一个 while 循环,不是一次性的 if。手工画图时也一样, 合并完要回头再检查一次。
处理后的序列还是 K 线吗
不完全是。合并后的「K 线」只剩下高点和低点两个值, 没有开盘价和收盘价——因为合并两根 K 线的开收盘价没有意义。
这在实现上也是个提醒:结构判定用的数组和画图用的数组是两个不同的数组。 本站算法里,分型的下标指向合并后的序列,而笔的端点下标指向原始 K 线序列, 两套下标不能混用。手工画图时不会遇到这个问题,写代码时会。
这一课的要点
- 包含关系:一根 K 线的高低点区间完全含住另一根,边界相等也算
- 判定只用最高价和最低价,不看开收盘
- 向上合并取高的(高低点都取较大值),向下合并取低的
- 方向由被合并这对之前的走势方向决定
- 合并结果可能与下一根继续包含,要循环处理到不再包含为止
试一道
刚学的东西趁热做一道,比读第二遍有用。答错可以重试,也可以直接看解析。