阶段 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 线的高低点区间完全含住另一根,边界相等也算
  • 判定只用最高价和最低价,不看开收盘
  • 向上合并取高的(高低点都取较大值),向下合并取低的
  • 方向由被合并这对之前的走势方向决定
  • 合并结果可能与下一根继续包含,要循环处理到不再包含为止

试一道

刚学的东西趁热做一道,比读第二遍有用。答错可以重试,也可以直接看解析。