独立 wyckoff 引擎 + 按需 include_wyckoff;主站 Lightweight 绘制区间/阶段/事件/VP。 Co-authored-by: Cursor <cursoragent@cursor.com>
3.2 KiB
CODE_REVIEW — ECR-003
Role: REVIEWER
Date: 2026-08-06
Scope: 工作区未提交 ECR-003(相对 origin/dev @ df27b4d)
Decision: Approve(带非阻断 Findings;建议合并前勿提交 .DS_Store)
Evidence loaded
chanlun/analysis/wyckoff/{engine,range,events,volume_profile}.pyweb/api/analyze.py(include_wyckoff)web/templates/index.html、chart_view.js、macd_ui.js、chart_tv.js威科夫块tests/test_wyckoff.py、web/tests/test_analyze_contract.py- ESS:ECR/PRODUCT/ENG/IMPL/TEST/HANDOFF
Acceptance ↔ Evidence
| Acceptance | Verdict | Evidence |
|---|---|---|
include_wyckoff=1 返回约定键;默认不强制 |
PASS | 契约测试;默认无 wyckoff 键 |
| 合成 TR + 事件;VP POC | PASS | test_wyckoff.py(12 相关套件全绿) |
| 主站可开关绘制 | PASS | 主开关按需拉取;子项本地重绘 |
| golden 不变 | PASS | test_golden_pipeline |
| 未改缠论算法 / strategies / chan_tv | PASS | diff 范围核对 |
| ESS 闭环 | PASS | IMPL/TEST/TRACE/CHANGELOG/本文件 |
复跑
PYTHONPATH=.:web python -m pytest \
tests/test_wyckoff.py tests/test_golden_pipeline.py \
web/tests/test_analyze_contract.py -q
→ 12 passed
Findings
Important(不挡 Approve,建议跟进)
-
交易区间易吞并前置趋势
detect_trading_range从最长窗口向下搜,合成夹具下abs_start_idx=0,箱体前下跌段被算进 TR。单测只断言「有区间 + 有事件」,未锁定高低/起点。
建议: 用「宽度/触边密度」评分取最优段,或要求近端触边;测试断言high≈60/low≈40与起点靠近箱体。 -
VP 叠层系列数偏多,可能加压自动刷新内存
开启 VP 时约每个 bin 一条addLineSeries(默认 ~50),再加区间填充/阶段。与 IDEA-002 内存修复同路径全量重建时放大。
建议: 只画非零 bin 或合并为少量 series / histogram;或限制vp_bins上限到 24。
Medium
-
阶段 C–E 在事件扎堆时常退化重叠
夹具输出中 D/E 起止几乎相同;状态机按事件锚点硬切,缺少最小阶段长度。展示可用,语义偏弱。 -
elements_only=true仍可能跑威科夫
威科夫挂在路由末尾,不依赖not elements_only。主站当前不这么发,但契约上奇怪;建议与主周期分析同门闩。 -
单测断言偏松
Spring in types or SOS、abs(poc-50)<2对回归保护不足。
Low
- 失败时
wyckoff.error回传异常字符串(与结构区 print 风格一致,信息暴露轻微)。 - 事件 marker 一律
arrowUp(跌破类也可arrowDown)。 - 工作区
.DS_Store脏文件——勿纳入 commit。
No blockers
未发现:契约删键、缠论语义改动、策略/config 改动、未鉴权危险写操作、主站误引 WS。
Decision
Approve
可合并提交(排除 .DS_Store)。Important #1/#2 可开后续 L1/L2,不阻塞本 ECR 着陆。
Next owner
engineer / Human — commit(勿含 .DS_Store);可选跟进 TR 评分与 VP 绘图优化。