# WYCKOFF-MULTI-CYCLE-001 **Status:** FROZEN **Scope:** Wyckoff Cycle Detection Layer ## No Change - `chan.py` / 笔 / 段 / 中枢 - `strategies/` - `/chan_tv` ## Only Change - wyckoff range detection - wyckoff engine payload - API localization - chart rendering - tests ## Frozen Rules 1. 每个 TF 最大 8 个周期 2. `cycles[0]` 永远为 ACTIVE;`cycles[1:]` 为 HISTORICAL 3. **禁止**用 `cycles[-1]` 判断 active;唯一来源:`active_cycle = cycles[0]` 4. 周期不可重叠;按时间倒序(近 → 远) 5. 顶层字段只镜像 `cycles[0]` 6. 历史 cycle 只用于展示/分析,不参与当前交易决策 7. 多 TF 只同步 active cycle(`prefer_start_time` ← 主 TF `cycles[0]`) 8. 每个 cycle 必须可追溯:`period` / `status` / `role` / `confidence` 9. 嵌套箱:`overlap_ratio < 0.2` 才可并存;否则丢弃 10. 验收重点:历史周期稳定复现 + active 不漂移 ## Layer Duties ``` range.py _detect_in_window() → TradingRange # 仅起止、高低、结构分 detect_trading_ranges() → list[TR] # 倒序扫 + 过滤 + mask engine.py phases / events / VP / confidence aggregation → cycles[] ``` ## Filter Order(不可改) ``` candidate window → detect range → quality filter → trend contamination filter → overlap filter (<0.2) → accept cycle → mask ``` 禁止先 mask 再判断质量。 ## Display / Summary (2026-08-06) - 图面阶段标记:`{TF} C{id} Phase {X}`;事件:`{TF} C{id} {Event}` - Cycle Summary 面板:消费 `cycles[0]`,写入 `window.wyckoffCycleSummary` - 检测算法本轮不改;质量阈值 / 历史层折叠为后续项