ARTICLE · 1074405
AI量化交易|28 缠论入门:把 K 线读成一篇有结构文章
上一篇海龟策略的痛点很明确:在茅台上 9 笔交易只有 1 笔盈利,因为假突破太多。那有没有办法,在突破之前先判断市场处在什么结构里?
缠论的回答是:先识别市场结构(中枢),再寻找买卖点。 它不是看价格有没有创新高,而是看中枢突破后回踩是否守得住。
先放一张对比,体会两种世界观的区别:
一句话:缠论不是一个指标,而是一套市场结构的数学化描述系统。
一、缠论是什么:一层层递进的结构语言
缠论的核心结构是一条递进的链条:
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,不等于中枢结束。 只有在突破后回踩不破,才确认中枢被打破,产生三买/三卖信号。
中枢有三种结局:

六、线段:比笔更高一级的结构
笔是「每天的小段波动」,线段是「月度的趋势」,把多个小波动合成一个大方向。
为什么有了笔还需要线段?因为笔太碎了。 一只股票半年内可能有 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])。
有了中枢这个「引力场」,下一步才有真正的交易动作。下一篇,我们围绕中枢展开三类买卖点:一买是趋势背驰、二买是回调确认、三买是中枢突破,再用真实行情看看它们各自赚多少、亏多少。
关注 + 在看,别掉队。