### 线段生成（get_seg_list，按代码实现）

输入为已生成的笔列表 bi_list，输出为线段列表 seg_list。线段 ChanSEG 由若干笔 ChanBI 顺序组成。缠论里用「特征序列」刻画线段划分；本实现中 ChanSBI 即特征序列的元素（由同向笔经包含处理合并而成的一段区间，链成特征序列），在反向笔方向上维护 down_sbi_list / up_sbi_list 即维护该方向上的特征序列。当出现「非包含的新笔」、特征序列上可构成三元素结构时，对前一个 ChanSBI 做分型判断，决定是否结束当前线段并生成反向线段。循环末尾会维护 last_up_bi、last_down_bi 及 up_bi_list、down_bi_list；最后调用 cal_bi_zs(seg_list) 做线段与笔中枢的后续计算。函数末尾大段被注释掉的「线段破坏重划」逻辑当前未执行，以下不描述。

1.  首根线段的产生（seg_list 为空时）

    仅当当前笔 bi 满足 bi.check_overlap() 为真时才允许生成第一段线段；否则该笔不会开启线段。check_overlap 要求：bi 之后至少还有两笔（next、next.next），且 next.next 已确认（is_sure）。在此前提下：
    - 若 bi 为向上笔：须满足 bi.high > bi.next.low 且 bi.high < bi.next.next.high（当前向上笔的高点落在后两笔的重叠/交错区间内）；
    - 若 bi 为向下笔：须满足 bi.high > bi.next.high 且 bi.low > bi.next.next.low。
    满足后：向上笔则新建方向为「上涨」的 ChanSEG，并以该笔初始化一条向上 ChanSBI；向下笔则新建「下跌」线段并初始化向下 ChanSBI。

2.  已有线段时的同向延伸（笔与线段方向相同）

    - 当前线段为上涨、新笔仍为向上：若已有 last_up_sbi，则用 ChanSBI.check_bi_included 判断新笔是否被并入当前向上的特征序列末项；不并入则链上追加新的 ChanSBI。当前笔始终 last_seg.add_bi(bi) 并入该线段。
    - 当前线段为下跌、新笔仍为向下：对称地维护 last_down_sbi 与向下特征序列，并 last_seg.add_bi(bi)。

3.  反向笔与特征序列（ChanSBI 链，为分型做准备）

    - 当前线段为上涨、新笔为向下：在向下笔序列上维护 down_sbi_list（向下特征序列）。若链上已有不止一个向下 ChanSBI，且新向下笔不能 check_bi_included 入上一档 last_down_sbi，则先为当前笔新建 ChanSBI 并接到链上，再对「原来的」last_down_sbi 调用 check_fx()（此时该节点已有 pre 与 next，特征序列上相邻三元素可验分型）。
    - 若向下链上仅有一个 ChanSBI：同样先判包含；若不包含则追加第二个节点；若尚未形成多节点，则用当前笔直接新建 ChanSBI 加入链。
    - 当前线段为下跌、新笔为向上：在 up_sbi_list 上对称处理，对 last_up_sbi 调用 check_fx()。

4.  ChanSBI.check_bi_included（特征序列元素的笔包含）

    若当前特征序列项区间「左包含」新笔（实现上：当前 high、low 与新笔 high、low 满足代码中的包含关系，且与 pre 组合满足扩展条件），则将新笔并入当前 ChanSBI，并按方向更新极值（向下特征序列取更低价为 low，向上特征序列取更高价为 high），返回已包含；否则返回不包含，由上层新建下一档 ChanSBI。

5.  ChanSBI.check_fx 与 has_fx_gap（特征序列上的分型与缺口）

    当某 ChanSBI 同时存在 pre、next 且已 set_end_bi 时（特征序列上相邻三元素齐备）：
    - 顶分型 TOP：中间元素高点高于前、后特征序列元素的高点；若中间低点高于前一段的高点，则 has_fx_gap 为真（顶分型处出现缺口类关系）。
    - 底分型 BOTTOM：中间元素低点低于前、后特征序列元素的低点；若中间高点低于前一段的低点，则 has_fx_gap 为真。

6.  出现分型后如何结束当前线段并开新线段（核心分支）

    在上涨线段末端、向下笔链上形成顶分型 TOP 时（对 last_down_sbi.check_fx() 得到 TOP）：
    - 若此前处于 look_for_top 状态：对 seg_list 中倒数第二条线段调用 set_sure(bi)，并清除 look_for_top。
    - 若该顶分型 has_fx_gap：置 look_for_bottom；对当前线段 pre_set_end_bi（结束笔取到分型前一笔等，按代码索引）；以 last_down_sbi.start_bi 为起点新建下跌线段；向上特征序列（up_sbi_list）重置为仅含 last_up_bi 的新链。
    - 若无缺口：若当前处于 look_for_bottom，则做「回补」式调整（如 set_start_bi、倒数第二条 set_end_bi、重置 up_sbi 等）并 last_seg.add_bi(bi)；否则对当前线段 set_end_bi，再新建下跌线段，并同样重置向上特征序列链。

    在下跌线段末端、向上笔链上形成底分型 BOTTOM 时：与上对称，使用 look_for_bottom / look_for_top、last_up_sbi.has_fx_gap，并新开上涨线段、重置向下特征序列（down_sbi_list）。

    上述分支中凡未单独说明的，仍会按路径将当前笔 add_bi 到相应线段。

7.  小结

    线段方向由首段 check_overlap 与后续「反向笔方向上的特征序列分型」共同决定；同向笔持续并入当前线段；反向笔先经包含处理叠成特征序列（ChanSBI 链），在三元素结构成立时识别顶/底分型，再结合是否缺口（has_fx_gap）与 look_for_top / look_for_bottom 状态机切换线段，并标记确认（set_sure）。


### 缠论中枢识别核心逻辑（按代码实现）

依据缠论线段中枢定义计算中枢：`get_zs_list` 从第 4 根线段开始（线段列表索引 3），每 3 根线段为一组检查；上涨中枢为后中枢 zd > 前中枢 zg（不重叠上移），下跌中枢为后中枢 zg < 前中枢 zd（不重叠下移），盘整 / 扩张为后中枢与前中枢的整体区间（GG / DD）存在交集；中枢在初成三段之后，可按两段一组继续并入线段，扩展为 5 根、7 根……

1.  基础中枢生成规则
    - 从第4根线段起（索引3），每连续3段已确认的线段为一组；
    - 3段线段极值须有重叠（min(三高点) > max(三低点)，即 zg > zd），否则跳过本组；
    - 中枢核心区间（只读、扩展时不变）：
      - zg = 初始3段高点的最小值（重叠区间上沿）；
      - zd = 初始3段低点的最大值（重叠区间下沿）；
    - 中枢极值（扩展时可更新）：
      - GG = 参与中枢的所有线段的高点最大值；
      - DD = 参与中枢的所有线段的低点最小值。
    - 相对前一中枢的区间关系（用于区分走势类型）：
      - 上涨中枢：后中枢 zd > 前中枢 zg（与前一中枢 [zd,zg] 不重叠、整体上移，即「不重叠上移」）；
      - 下跌中枢：后中枢 zg < 前中枢 zd（与前一中枢不重叠、整体下移，即「不重叠下移」）；
      - 盘整 / 扩张：后中枢与前中枢在整体区间（GG / DD）上存在交集（与上述纯阶梯式上移、下移相区别）。
    - 线段方向：在判定为上涨 / 下跌中枢时，须满足与中枢类型对应的严格交替——上涨中枢 down→up→down，下跌中枢 up→down→up（首段中枢仅按前三段形态定方向）。

2.  中枢扩展规则
    - 当形成三段中枢后，以中枢之后已完成的线段每两段为一组（与本中枢离开、回抽相关的成对线段）检查是否满足扩展条件；满足时可继续并入，使中枢覆盖 5 根、7 根……线段；
    - 若下一组两段的第二段与当前中枢区间有重叠（第二段高点≥当前zd且第二段低点≤当前zg），则进行扩展，不新建中枢；
    - 若下一组两段的第二段与当前中枢区间没有重叠，那么这两段都不并入当前中枢，当前中枢结束；从该两段组的第二段开始作为后续扫描起点，按中枢离开判断规则和新中枢生成规则继续；
    - 扩展时仅更新 GG、DD 和 seg_list；zg、zd 永不修改；

3.  新中枢生成规则
    - 若下一组3段与当前中枢区间不重叠，且本组内逐根检查后没有任何线段与前中枢 [zd,zg] 重叠（即没有“离开后回抽回到前中枢”），并满足上涨中枢或下跌中枢的区间关系（后中枢 zd > 前中枢 zg，或后中枢 zg < 前中枢 zd）及对应线段方向；
    - 新中枢类型按区间关系判定：后中枢 zd > 前中枢 zg → 上涨中枢（down→up→down）；后中枢 zg < 前中枢 zd → 下跌中枢（up→down→up）；
    - 新中枢的 zg/zd/GG/DD 仅基于自身初始3段计算；zg、zd 之后不再修改。
    

线段高低点的判断
注意，这里必须提醒一句，就是这在以前也曾说过，就是，如果线段中，最高或最低点不是线段的端点，那么，在任何以线段为基础的分析中，例如把线段为基础构成最小级别的中枢等，都可以把该线段标准化为最高低点都在端点。因为， 在以线段为基础的分析中，都把线段当成一个没有内部 结构的基本部件，所以，只需要关心这线段的实际区间就可以，这样就可以只看其高低点。
经过标准化处理后，所有向上线段都是以最低点开始最高点结束，向下线段都是以最高点开始最低点结束，这样，所以线段的连接，就形成一条延续不断、首尾相连的折线，这样，复杂的图形，就会十分地标准化，也为后面的中枢、走势类型等分析提供了最标准且基础的部件。

本级别没有背驰的，次级别背驰下跌后形成第三类卖点进而形成本级别的V型反转，小转大

大级别  判断趋势位置（是否进入末期）
中级别  识别第一类买卖点结构
小级别  精准入场与风控

短线操作策略
大级别1H/2H/4H，判断趋势方向，
上涨趋势
趋势启动第一次穿零轴后归零轴反弹，EMA52和黄白线无限接近零轴，MACD黄白线在零轴以上
下跌趋势
趋势启动第一次穿零轴后归零轴反弹，EMA52和黄白线无限接近零轴，MACD黄白线在零轴以下
MACD归零轴的两种情况，两者是或的关系，满足任意一种都是归零轴，归零轴的四种走势：
1. K线下跌或者上涨后触碰当前时间级别的EMA52附近
2. MACD的白线快线无限接近零轴，
3. MACD归零轴时，如果此时k线始终保持在EMA24附近，如果一直是EMA24之上之后出现反弹行情就会很大（最强反弹）这种反弹是2个时间级别同时归零轴形成的反弹，容易创新高新低，一般出现在强势行情。
4. K线先触碰EMA52，而MACD黄白线都未归零轴
归零轴完美形态
MACD归零轴反弹/反抽的完美形态是K线触碰EMA52附近，MACD的白线无限接近零轴之后出现上涨或下跌
中级别
识别EMA52和MACD黄白线归零轴，MACD能量柱形成背驰
小级别
识别最后下跌段MACD背驰和开始上涨K线形态，识别笔，精确定位第一类和第二类卖卖点

在小级别第一类或者第二类卖卖点开仓

平仓规则
大级别如果K线在EMA13/EMA7均线以上，根据倍数关系到相应的小周期观察顶底背离进行平仓操作，一般来说在大级别的1/4小级别观察背离顶底
比如1H归零轴反弹，K线一直运行在EMA7以上，那么到15M级别进行平仓操作，观察背离

趋势策略
1. 使用30分钟，5分钟，1分钟时间周期进行交易
2. 使用顶底分型和MACD背驰信号作为趋势衰竭信号，但是不作为开仓信号
3. 等待价格确认跌破EMA26，K线跌破EMA26后2根确认，EMA13和EMA26交叉作为验证信号
4. 通过小级别5分钟和1分钟找到精确入场点
5. 止损定在最后一个顶底分型的高低点，止盈先设置1:2，如果出现反向分型和macd衰竭信号，先减半保本损
6. 