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