夜雨聆风学习资料网

ARTICLE · 1074405

AI量化交易|28 缠论入门:把 K 线读成一篇有结构文章

AI量化交易|28 缠论入门:把 K 线读成一篇有结构文章

上一篇海龟策略的痛点很明确:在茅台上 9 笔交易只有 1 笔盈利,因为假突破太多。那有没有办法,在突破之前先判断市场处在什么结构里?

缠论的回答是:先识别市场结构(中枢),再寻找买卖点。 它不是看价格有没有创新高,而是看中枢突破后回踩是否守得住。

先放一张对比,体会两种世界观的区别:

维度
海龟交易
缠论量化
核心哲学
突破 → 跟随趋势
结构 → 识别转折点
信号逻辑
价格突破 N 日高/低
分型/笔/中枢的数学定义
买卖依据
价格创新高就买
中枢突破回踩不破就买
风险管理
ATR 仓位(波动率)
中枢结构定义止损位
市场观
不预测,跟随
不预测,但识别结构

一句话:缠论不是一个指标,而是一套市场结构的数学化描述系统。


一、缠论是什么:一层层递进的结构语言

缠论的核心结构是一条递进的链条:

K线 → 合并K线 → 分型 → 笔 → 线段 → 中枢 → 买卖点

每一层都建立在前一层之上,层层递进。打个比方,就像:字母(分型)→ 单词(笔)→ 句子(线段)→ 段落(中枢)→ 文章含义(买卖点)。

缠论的价值,就是在看似无序的波动中发现有序的结构,最终解决「何时买、何时卖」的闭环。这一篇,我们先把从 K 线到中枢的这条结构链条走通;买卖点放到下一篇。


二、分型:市场语言的字母

分型是缠论的最小单位,一共两种:

  • • 顶分型:3 根 K 线,中间 K 线的高点最高、低点也最高,短期见顶;
  • • 底分型:3 根 K 线,中间 K 线的低点最低、高点也最低,短期见底。

顶底分型还各自能分出强弱:最强、较强、一般、较弱四种走势。同样是顶分型,最强的那种第三天直接下杀到最低,最弱的那种犹犹豫豫、起步反而更高一点。强弱反映的是市场情绪。


三、K 线包含关系:先清洗,再识别

如果直接在原始 K 线上找分型,会有个大问题:原始 K 线经常出现包含关系,即一根 K 线的高低点完全覆盖另一根。如果不处理,分型的判定会不稳定,同一段走势可能识别出不同的分型。

合并规则很讲究,要看趋势方向:

  • • 上升趋势:取更高的高点、更高的低点(向上合并);
  • • 下降趋势:取更低的高点、更低的低点(向下合并)。

核心代码长这样:

def _merge_klines(self):    merged = []    for i in range(len(df)):        row = {'date': df.index[i], 'high': ..., 'low': ...}        if len(merged) < 2:            merged.append(row); continue        prev = merged[-1]        inclusion = (            (row['high'] >= prev['high'] and row['low'] <= prev['low']) or            (prev['high'] >= row['high'] and prev['low'] <= row['low'])        )        if inclusion:            prev_prev = merged[-2]            is_up = prev['high'] >= prev_prev['high']            if is_up:                new_high = max(prev['high'], row['high'])                new_low  = max(prev['low'],  row['low'])            else:                new_high = min(prev['high'], row['high'])                new_low  = min(prev['low'],  row['low'])            merged[-1] = {... 更新为 new_high / new_low ...}        else:            merged.append(row)

为什么要先合并?看一个实际例子就明白了:合并前,中间那两根有包含关系的 K 线会形成虚假的顶分型和底分型,产生假信号;合并后,走势才变得明朗。


四、笔:连接分型的骨架

笔 = 相邻的一个顶分型和一个底分型之间的连线。但要成为有效的笔,必须满足严格条件:

  • • 一顶一底:必须交替出现;
  • • 至少 5 根 K 线:处理完包含关系后,从顶到底至少 5 根(含端点);
  • • 不重叠:顶分型的高低区间必须有部分高于底分型。

向上笔是「底分型 → 中间 K 线 → 顶分型」,向下笔反过来。


五、中枢:价格的引力场

中枢的定义是:至少三笔的价格区间有重叠,就形成中枢。

  • • ZG(中枢高点)= 各笔高点中的最小值;
  • • ZD(中枢低点)= 各笔低点中的最大值;
  • • 中枢区间 = [ZD, ZG],条件是 ZG > ZD。

(注意:这里的 ZG/ZD 是缠论里「中枢高/中枢低」的拼音缩写,ZG 取各笔高点里的最低,ZD 取各笔低点里的最高,两者夹出的就是多空重叠的核心区域。)

中枢是价格反复拉锯的区域,像一个引力场,价格很难轻易逃脱。你可以把它理解成缠论版的布林带:到了中枢高点附近容易回落,到了中枢低点附近容易反弹。

在茅台 2025 下半年的实测里,chan.py 识别出 1 个中枢(2025-07-24 到 2025-12-10):

  • • 中枢区间:ZD = 1390.04,ZG = 1475.04(宽度 5.9%);
  • • 波动区间:1359.22 到 1514.06(幅度 10.8%)。

为什么中枢区间 5.9%,波动区间却有 10.8%?因为中枢区间是三笔重叠的核心区域,但形成过程中价格向上冲到 1514(超出 ZG)、向下探到 1359(跌破 ZD),波动区间记录的是这些冲出去又拉回来的极端值。

这里有个关键认知:突破 ZG 或跌破 ZD,不等于中枢结束。 只有在突破后回踩不破,才确认中枢被打破,产生三买/三卖信号。

中枢有三种结局:

结局
条件
后续
延伸
新笔仍在 [ZD, ZG] 范围内
继续震荡
向上突破
突破 ZG 后回踩不破 ZG
三买信号
向下跌破
跌破 ZD 后反弹不过 ZD
三卖信号

六、线段:比笔更高一级的结构

笔是「每天的小段波动」,线段是「月度的趋势」,把多个小波动合成一个大方向。

为什么有了笔还需要线段?因为笔太碎了。 一只股票半年内可能有 6 根笔来回折,但大方向其实只有两段:先跌后涨。线段就是把这些来回的小波动归纳出大方向,让你看地图时能切到「更粗」的那一档。

  • • 笔 = 分型 → 分型;
  • • 线段 = 笔 → 笔 → 笔(至少 3 笔);
  • • 中枢 = 线段内 3 笔重叠区域。

茅台 2025 下半年,chan.py 识别出 2 个线段:1 个下降(06-04 到 06-16,1 笔),1 个上升(06-16 到 12-26,5 笔)。

第二个线段包含 5 笔,这些笔构成了一个中枢。线段和中枢是什么关系?线段内部可以有中枢。 上升线段中价格从 1350 涨到 1514,中间反复在 [1390, 1475] 震荡(中枢),最终向上突破。线段描述的是大方向,中枢描述的是方向中的犹豫。


七、一键分析:把结构链条写进代码

理解了层次,用开源 chan.py 一键就能拿到全部结构:

from Chan import CChanfrom ChanConfig import CChanConfigfrom Common.CEnum import KL_TYPEconfig = CChanConfig({})chan = CChan(code='600519.SH', data_src='custom:DfApi.DfApi',             lv_list=[KL_TYPE.K_DAY], config=config)kl = chan[0]print(f"笔: {len(kl.bi_list)}")print(f"线段: {len(kl.seg_list)}")print(f"中枢: {len(kl.zs_list)}")

到这里,缠论的结构链条就走完了:K 线 → 合并 K 线(处理包含)→ 分型(顶/底)→ 笔(连接分型)→ 线段(3 笔以上)→ 中枢([ZD, ZG])。

有了中枢这个「引力场」,下一步才有真正的交易动作。下一篇,我们围绕中枢展开三类买卖点:一买是趋势背驰、二买是回调确认、三买是中枢突破,再用真实行情看看它们各自赚多少、亏多少。

关注 + 在看,别掉队。

相关学习资料