增加缠论说明,优化线段中枢

This commit is contained in:
jackyu66git
2026-03-12 17:20:57 +08:00
parent ea47bfe9b7
commit 72196329d1
4 changed files with 79 additions and 4 deletions
Vendored
BIN
View File
Binary file not shown.
+36 -4
View File
@@ -1987,12 +1987,44 @@ class TF_DF():
last_zs.set_end_klc(last_seg.end_bi.end_klc, last_seg.sure_time, 0, last_seg)
last_zs.set_end_seg(last_seg)
# 跳过本组已扫描的线段(从 start_idx 到 cur_idx-1),下一组从 cur_idx 起可能再形成新中枢
start_idx = cur_idx
# 下一组从「裁剪后保留的最后一段」的下一条线段开始,被裁掉的线段会参与下一组 3 根,避免漏到下一中枢
last_kept_idx = cur_idx - 1
for i in range(len(seg_list)):
if seg_list[i] == last_seg:
last_kept_idx = i
break
start_idx = last_kept_idx + 1
continue
else:
# 没有重叠,创建新中枢
# 先确认前一个中枢 - 使用前一个中枢本身的最后一个线段
# 本组3段整体与前中枢不重叠,仍逐根检查:若某线段与 [zd,zg] 重叠(如离开后回抽回到前中枢)则并入扩展,不直接新中枢
added_after_leave = []
for k in range(start_idx, min(start_idx + 3, len(seg_list))):
s = seg_list[k]
if not s.is_sure:
break
sh = max(s.start_bi.high, s.end_bi.high) if s.end_bi else s.start_bi.high
sl = min(s.start_bi.low, s.end_bi.low) if s.end_bi else s.start_bi.low
if sh >= last_zs.zd and sl <= last_zs.zg:
added_after_leave.append(s)
else:
break
if added_after_leave:
segs_for_zs = list(last_zs.seg_list) + list(added_after_leave)
required_end_seg_dir = Chan_SEG_DIR.DOWN if last_zs.dir == Chan_ZS_DIR.DOWN else Chan_SEG_DIR.UP
while len(segs_for_zs) >= 3 and segs_for_zs[-1].dir != required_end_seg_dir:
segs_for_zs.pop()
seg_highs = [s.high for s in segs_for_zs]
seg_lows = [s.low for s in segs_for_zs]
last_zs.set_gg(max(seg_highs))
last_zs.set_dd(min(seg_lows))
last_zs.seg_list = segs_for_zs
last_seg = segs_for_zs[-1]
if last_seg.end_bi:
last_zs.set_end_klc(last_seg.end_bi.end_klc, last_seg.sure_time, 0, last_seg)
last_zs.set_end_seg(last_seg)
start_idx = start_idx + len(added_after_leave)
continue
# 没有任何线段与前中枢重叠,确认前中枢结束并创建新中枢
if last_zs.seg_list and len(last_zs.seg_list) > 0:
prev_zs_last_seg = last_zs.seg_list[-1]
if prev_zs_last_seg.end_bi:
BIN
View File
Binary file not shown.
+43
View File
@@ -0,0 +1,43 @@
### 缠论中枢识别核心逻辑(按代码实现)
1. **基础中枢生成规则**
- 从第4根线段起,每连续3段已确认的线段为一组;方向严格交替:上涨中枢 down→up→down,下跌中枢 up→down→up
- 3段线段极值须有重叠(min(三高点) > max(三低点)),否则跳过本组;
- 中枢核心区间(只读、扩展时不变):
- zg = 初始3段高点的最小值(重叠区间上沿);
- zd = 初始3段低点的最大值(重叠区间下沿);
- 中枢极值(扩展时可更新):
- GG = 参与中枢的所有线段的高点最大值;
- DD = 参与中枢的所有线段的低点最小值。
2. **中枢扩展规则**
- 若下一组3段的区间 [zd,zg] 与当前中枢区间有重叠(zg≥当前zd 且 zd≤当前zg),则进行扩展,不新建中枢;
- 若本组3段整体与前中枢不重叠(例如已离开后新中枢区间在上/下方),仍逐根检查:只要某线段与当前中枢 [zd,zg] 有重叠(例如离开后的回抽段又回到前中枢内),则将该线段并入前中枢扩展,不因此直接新建中枢;从第一根不重叠的线段起再考虑新中枢;
- 扩展时:先将本组3段并入(或逐根并入见上),再向后逐根线段判断;线段与当前中枢 [zd,zg] 有重叠(线段区间与 [zd,zg] 相交)则并入,遇首根不重叠则停止扩展;
- 线段区间用该线段的起止笔极值:seg_high = max(start_bi.high, end_bi.high)seg_low = min(start_bi.low, end_bi.low)
- 扩展后裁剪:中枢参与线段的结束段方向须与形成时一致——上涨中枢结束于 down 段,下跌中枢结束于 up 段;从末尾向前 pop 至满足为止;
- 扩展时仅更新 GG、DD 和 seg_listzg、zd 永不修改;
- 下一组起点:从「裁剪后保留的最后一段」的下一条线段开始,被裁掉的线段参与下一组3根,避免漏入错误中枢。
3. **中枢离开判定规则**
- 向上离开:up 方向完成线段的 low > 原中枢 zg;强离开标注(非判定条件):up 线段 high > 原中枢 GG
- 向下离开:down 方向完成线段的 high < 原中枢 zd;强离开标注(非判定条件):down 线段 low < 原中枢 DD
- 有效离开(触发第三类买卖点):
- 向上有效离开:up 离开后,down 方向回抽线段的 low > 原中枢 zg 不进原中枢,触发第三类买点;
- 向下有效离开:down 离开后,up 方向回抽线段的 high < 原中枢 zd 不进原中枢,触发第三类卖点;
- 无效离开:回抽线段进入原中枢 [zd, zg] 区间,不触发第三类买卖点。
4. **新中枢生成规则**
- 若下一组3段与当前中枢区间不重叠,且本组内逐根检查后没有任何线段与前中枢 [zd,zg] 重叠(即没有“离开后回抽回到前中枢”),则当前中枢确认结束,本组3段生成新中枢;
- 新中枢类型与区间:后中枢 zg > 前中枢 zg → 上涨中枢(down→up→down);否则为下跌中枢(up→down→up);
- 新中枢的 zg/zd/GG/DD 仅基于自身初始3段计算;zg、zd 之后不再修改。
5. **中枢趋势判定规则**
- 上涨中枢:后中枢 zg > 前中枢 zg(即后中枢 zd > 前中枢 zg 的等价表述);
- 下跌中枢:后中枢 zg < 前中枢 zg;
- 盘整/扩张:后中枢与前中枢区间重叠(后 zd < 前 zg 且 后 zg > 前 zd)。
6. **大级别中枢(扩张)**
- 多个笔/线段中枢若区间两两重叠,可合并为一个大级别中枢;
- 重叠定义:两中枢 [zd,zg] 有交集,即 (zs_i.zg >= zs_j.zd and zs_i.zd <= zs_j.zg)
- 大级别中枢的 zd/zg 取子中枢的并集(包住所有子中枢),用于显示更大级别震荡区间。