Files
Chan/缠论.txt
T
2026-03-24 16:33:49 +08:00

84 lines
9.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 线段生成(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_listzg、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 之后不再修改。
线段高低点的判断
注意,这里必须提醒一句,就是这在以前也曾说过,就是,如果线段中,最高或最低点不是线段的端点,那么,在任何以线段为基础的分析中,例如把线段为基础构成最小级别的中枢等,都可以把该线段标准化为最高低点都在端点。因为, 在以线段为基础的分析中,都把线段当成一个没有内部 结构的基本部件,所以,只需要关心这线段的实际区间就可以,这样就可以只看其高低点。
经过标准化处理后,所有向上线段都是以最低点开始最高点结束,向下线段都是以最高点开始最低点结束,这样,所以线段的连接,就形成一条延续不断、首尾相连的折线,这样,复杂的图形,就会十分地标准化,也为后面的中枢、走势类型等分析提供了最标准且基础的部件。