diff --git a/docs/AGENT_MEMORY.md b/docs/AGENT_MEMORY.md index 9a36a35..cf833d8 100644 --- a/docs/AGENT_MEMORY.md +++ b/docs/AGENT_MEMORY.md @@ -20,7 +20,8 @@ - IDEA-002 / `9f1e736`:主站内存泄漏 dispose、首屏单次 analyze、ChanMACD 复用、chan_tv 体验 - ECR-002 Reviewed:拆 `web/services/runtime/`、加深 analyze 契约 -- ECR-003 Reviewed:主站威科夫叠层(`chanlun/analysis/wyckoff/` + `include_wyckoff`) +- ECR-003 Reviewed:主站威科夫叠层(`chanlun/analysis/wyckoff/` + `include_wyckoff`)→ `081a57a` +- ECR-004 Draft:TR 评分硬化 + VP 少系列 + 阶段/门闩/单测(IDEA-005) ## 硬约束提醒 diff --git a/docs/CHANGELOG/CHANGELOG.md b/docs/CHANGELOG/CHANGELOG.md index 0412446..e17af80 100644 --- a/docs/CHANGELOG/CHANGELOG.md +++ b/docs/CHANGELOG/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased — 2026-08-06 +### ECR-004(L2,Draft) + +- 计划:威科夫 TR 评分硬化、主站 VP 绘图减负、阶段/门闩/单测(见 `docs/ECR/ECR-004-wyckoff-harden.md`) + ### ECR-003(L2,Reviewed) - 新增 `chanlun/analysis/wyckoff/`:交易区间、阶段 A–E、Spring/SOS/LPS/UTAD 等事件、区间 VP(POC/VAH/VAL)、量能确认 diff --git a/docs/ECR/ECR-004-wyckoff-harden.md b/docs/ECR/ECR-004-wyckoff-harden.md new file mode 100644 index 0000000..1744c69 --- /dev/null +++ b/docs/ECR/ECR-004-wyckoff-harden.md @@ -0,0 +1,62 @@ +# ECR-004 + +**Title:** 威科夫区间评分硬化与主站 VP 绘图减负 +**Status:** Draft(待 Human/Architect Approve 后编码) +**Date:** 2026-08-06 +**Change Level:** L2 + +## Change + +跟进 ECR-003 CODE_REVIEW Findings:改进交易区间选取启发式、阶段最小长度、收紧单测;主站 VP/叠层降低 Lightweight series 数量;`include_wyckoff` 与主周期分析同门闩。 + +## Motivation + +003 已 Approve 合入;质量与内存项不得回塞已审变更,须独立可审闭环。 + +## Scope + +### Allowed + +- `chanlun/analysis/wyckoff/range.py` / `events.py`(阶段)启发式与单测 +- `web/static/js/app/chart_tv.js` 威科夫 VP/填充绘制路径 +- `web/api/analyze.py`:`elements_only` 时不跑威科夫;可选调低默认 `vp_bins` 上限 +- ESS 文档与契约测试补充断言(不删既有 `wyckoff` 键) + +### Forbidden + +- 改笔/段/中枢/买卖点语义 +- `config/` / `strategies/` +- `/chan_tv` +- 新数据源 / 订单流 + +## Risk + +| Risk | Mitigation | +|------|------------| +| TR 结果相对 003 漂移 | 合成夹具锁定高低与起点;文档标明启发式迭代 | +| 前端 VP 观感变化 | 保留 POC/VAH/VAL;密度可用更少线表示 | +| 回归 | 扩展 `tests/test_wyckoff.py` + 既有契约套件 | + +## Acceptance Criteria + +- [ ] 合成箱体夹具:`trading_range` 高低接近箱体边界,起点不落入明显前置趋势段 +- [ ] 开启 VP 时主图新增 series 数显著低于「每 bin 一条」(目标:填充+VP ≤ ~15 或等价合并策略) +- [ ] 阶段输出满足最小跨度或合并退化段;文档说明规则 +- [ ] `elements_only=true` 即使 `include_wyckoff=1` 也不返回 `wyckoff`(或明确文档例外——实现选前者) +- [ ] golden 缠论基线不变;相关 pytest 绿 +- [ ] TEST/IMPL/CHANGELOG/TRACEABILITY + CODE_REVIEW + +## Rollback + +`git revert`;UI 关威科夫即可无图面影响。 + +## Risk Review + +- `docs/RISK_REVIEW/ECR-004.md` — N/A(展示/启发式,非 Live 策略) + +## Linked + +- IDEA: `docs/IDEA/IDEA-005-wyckoff-harden.md` +- 上游: `docs/CODE_REVIEW/ECR-003.md` Findings 1–5 +- PRODUCT_SPEC / ENGINEERING_SPEC: 同目录 ECR-004-* +- TRACEABILITY: Yes diff --git a/docs/ENGINEERING_SPEC/ECR-004-wyckoff-harden.md b/docs/ENGINEERING_SPEC/ECR-004-wyckoff-harden.md new file mode 100644 index 0000000..743299f --- /dev/null +++ b/docs/ENGINEERING_SPEC/ECR-004-wyckoff-harden.md @@ -0,0 +1,45 @@ +# ENGINEERING_SPEC — ECR-004 + +**Status:** Draft +**Date:** 2026-08-06 + +## Range scoring + +替换「仅取最长合格窗口」: + +1. 仍在 `lookback` + `tail_reserve` 框架内扫描候选段(步长可保留)。 +2. 对每段计算分数,例如: + - `touch_score` = near_hi + near_lo(触边上沿/下沿次数) + - `width_penalty` = width / ATR(过宽扣分) + - `recency_bonus` = 段终点靠近 core 末 + - 可选:段内 close 在 [low,high] 比例 +3. 取分数最高且满足既有硬门槛(near_hi/lo≥2、inside≥0.75 等)的段。 +4. 单测:`_box_df` 断言 `low∈[38,42]`、`high∈[58,62]`,且 `start` 不早于箱体起始(允许小容差)。 + +## Phases + +- 为 A–E 设最小 bar 数(如 ≥3);不足则与相邻段合并或跳过空标签。 +- 避免 D/E 完全同起止仍输出两条重复色带。 + +## API gate + +```text +if include_wyckoff and not elements_only: + result["wyckoff"] = analyze_wyckoff(...) +``` + +## Frontend VP + +任选其一(ENG 实现时定一种并写进 IMPL): + +- **A**:只画 volume>0 的 bin,且最多 N 条(按 volume 取 Top-N),POC/VAH/VAL 仍全画 +- **B**:用少量水平线 + 透明度映射,或单 series 多段(若 Lightweight 版本支持) +- **C**:服务端默认 `vp_bins` 上限降到 24,前端再 Top-N + +区间填充线可从 6 降到 3。 + +## Tests + +- 扩展 `tests/test_wyckoff.py` +- 契约:`elements_only=true&include_wyckoff=1` 无 `wyckoff` +- 不改 golden 缠论 JSON diff --git a/docs/IDEA/IDEA-005-wyckoff-harden.md b/docs/IDEA/IDEA-005-wyckoff-harden.md new file mode 100644 index 0000000..df89be3 --- /dev/null +++ b/docs/IDEA/IDEA-005-wyckoff-harden.md @@ -0,0 +1,31 @@ +# Idea: 威科夫区间评分与主站 VP 绘图优化 + +**Date:** 2026-08-06 +**Status:** Accepted → ECR-004 +**Source:** `docs/CODE_REVIEW/ECR-003.md` Findings Important #1/#2 + Medium #3–#5 + +## Problem + +ECR-003 已上线主站威科夫叠层,但: + +1. 交易区间检测优先「最长窗口」,易吞并箱体前趋势,起点偏早。 +2. VP 默认按 bin 逐条 `addLineSeries`,自动刷新全量重建时系列过多,有内存压力。 +3. 阶段 C–E 在事件扎堆时易重叠退化;单测断言偏松;`elements_only` 仍可能跑威科夫。 + +## Why now + +CODE_REVIEW Approve 非阻断项;关门后应单独 ECR 跟进,避免塞回已审 003。 + +## Proposed direction + +- TR:触边密度/宽度评分选最优段,收紧合成夹具断言 +- VP:少系列绘制(非零 bin 合并或降 bins 上限) +- 阶段最小长度;analyze 门闩与主周期一致;收紧单测 + +## Out of scope + +- 缠论算法、`strategies/`/`config/`、`/chan_tv` Study、Live 信号 + +## Linked + +- [x] ECR-004 diff --git a/docs/PRODUCT_SPEC/ECR-004-wyckoff-harden.md b/docs/PRODUCT_SPEC/ECR-004-wyckoff-harden.md new file mode 100644 index 0000000..2d1571f --- /dev/null +++ b/docs/PRODUCT_SPEC/ECR-004-wyckoff-harden.md @@ -0,0 +1,20 @@ +# PRODUCT_SPEC — ECR-004 + +**Status:** Draft +**Date:** 2026-08-06 + +## Goal + +主站威科夫叠层在「可解释」前提下更稳:交易区间更贴近真实震荡箱;VP 打开时不拖垮图表刷新。 + +## User-visible + +1. 勾选威科夫后,区间框起点/高低更合理(少把前置单边趋势框进去)。 +2. 开启 VP 时图面仍有 POC/VAH/VAL 与量能密度感,但刷新更轻。 +3. 阶段标签不再大量重叠在同一根 K 上(可合并短段)。 + +## Non-goals + +- 改变缠论笔段中枢 +- 自动交易建议 / Live +- chan_tv Study diff --git a/docs/PROJECT_PROFILE.md b/docs/PROJECT_PROFILE.md index 41883a6..153aad0 100644 --- a/docs/PROJECT_PROFILE.md +++ b/docs/PROJECT_PROFILE.md @@ -34,7 +34,7 @@ Trading System(缠论分析引擎 + 可视化 Web;Freqtrade 策略目录独 ## Active anchors -- ECR: ECR-002 / ECR-003 Reviewed(主站威科夫) +- ECR: ECR-004 Draft(威科夫硬化);ECR-002/003 Reviewed - EXP: N/A - TRACEABILITY: `docs/TRACEABILITY.md` - Memory: `docs/AGENT_MEMORY.md` diff --git a/docs/RISK_REVIEW/ECR-004.md b/docs/RISK_REVIEW/ECR-004.md new file mode 100644 index 0000000..f1c1e12 --- /dev/null +++ b/docs/RISK_REVIEW/ECR-004.md @@ -0,0 +1,6 @@ +# RISK_REVIEW — ECR-004 + +**Status:** N/A +**Date:** 2026-08-06 + +展示用威科夫启发式与绘图优化,不改 Freqtrade 策略或 Live 下单。TR 输出相对 ECR-003 可能漂移,由单测与 UI 开关缓解。 diff --git a/docs/STATE/CURRENT.md b/docs/STATE/CURRENT.md index c1b6c0c..169766b 100644 --- a/docs/STATE/CURRENT.md +++ b/docs/STATE/CURRENT.md @@ -1,8 +1,8 @@ # STATE -**owner:** idle -**active_ecr:** none -**phase:** idle +**owner:** architect +**active_ecr:** ECR-004 +**phase:** draft_spec(待 Approve 后实现) **system_version:** v1.0.0 **strategy_version:** unchanged **updated:** 2026-08-06 @@ -14,9 +14,11 @@ | ECR-001 | L3 | Released `v1.0.0` | | | IDEA-002 | L1 | Done | `9f1e736` | | ECR-002 | L3 | Done (Reviewed) | runtime 包拆分 | -| ECR-003 | L2 | Done (Reviewed) | 主站威科夫;待本提交合入 | +| ECR-003 | L2 | Done (Reviewed) | `081a57a` 主站威科夫 | +| ECR-004 | L2 | Draft | 威科夫硬化 / VP 减负;见 IDEA-005 | ## Notes -- ECR-003 CODE_REVIEW:**Approve**;Findings 另开 ECR-004 -- 未请求新 system tag(仍 Unreleased 文档累计) +- ECR-003 已合入;Findings → ECR-004 +- ECR-004 待 Human/Architect **Approve** 后再编码 +- 未请求新 system tag diff --git a/docs/TASKS/TASK-004-ECR004.yaml b/docs/TASKS/TASK-004-ECR004.yaml new file mode 100644 index 0000000..9ac8ae2 --- /dev/null +++ b/docs/TASKS/TASK-004-ECR004.yaml @@ -0,0 +1,7 @@ +task_id: ECR-004 +title: 威科夫区间评分硬化与主站 VP 绘图减负 +status: draft +change_level: L2 +ecr: docs/ECR/ECR-004-wyckoff-harden.md +idea: docs/IDEA/IDEA-005-wyckoff-harden.md +notes: Follow-up to ECR-003 CODE_REVIEW Findings 1-5. Await Approve then implement. diff --git a/docs/TRACEABILITY.md b/docs/TRACEABILITY.md index d47da5b..3bd9d48 100644 --- a/docs/TRACEABILITY.md +++ b/docs/TRACEABILITY.md @@ -36,3 +36,11 @@ | ECR-003 | analyze 按需 `include_wyckoff` | ENG-003 | `web/api/analyze.py` | `test_analyze_http_wyckoff_opt_in` | | ECR-003 | 主站 Lightweight 叠层 | PRODUCT-003 | `index.html` `chart_tv.js` `chart_view.js` | 人工 + 开关接线 | | ECR-003 | 契约可选键文档 | ENG-003 | `analyze_contract_keys.json` | golden keys file 断言 | + +## ECR-004(Draft) + +| ECR | Requirement | Spec | Code | Test | +|-----|-------------|------|------|------| +| ECR-004 | TR 评分选最优段 | ENG-004 | TBD `wyckoff/range.py` | 收紧 `test_wyckoff` | +| ECR-004 | VP/填充少 series | ENG-004 | TBD `chart_tv.js` | 人工 / 约定上限 | +| ECR-004 | 阶段最小长度 + elements_only 门闩 | ENG-004 | TBD events + analyze | 契约补充 |