Files
MoFin/docs/decisions/2026-08-15-策略自我进化闭环重构.md
T

69 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 策略自我进化闭环重构(问题3 诊断 + 设计)
日期:2026-08-15
状态:诊断完成,设计待老莫批准
关联:问题2(策略数据每日自动更新,已落地 c91f49ef/b9b4fadf
## 一、诊断:进化模块与温区体系全面脱节
老莫定义的关系链:**统计数据每日自动更新 → 进化基于最新统计数据做策略研究 → 产出有价值的改进结论**。
现状:第一节(统计数据)今天才修好;第二节(进化)整体坏死——
| 组件 | 病状 | 证据 |
|---|---|---|
| `evolution_api.py` baseline | 硬编码 `['v_weak','v_oversold']`,与路由激活集合脱节 | 已修(9ba85733,改数据驱动) |
| `lesson_extractor.py` | 硬编码 `version='v_next4'`(已证伪策略);名为"已平仓交易教训提取",实际读的是**回测 trades** 而非实盘平仓 | `strategy_lessons` 最新行 2026-08-0116 行,无 cron |
| `auto_iterator.py` | 健康度默认 `version='v_next4'``PARAM_SPACE`max_hold_days/reentry_days/sl_atr)是旧策略家族参数,与当前温区策略(s2_panic 的 RSI/bias 阈值、hk_pe_mom 的 PE 分位/tp40%)完全对不上 | `strategy_evolution` 最新行 2026-08-078 行,无 cron |
| 调度 | lesson_extractor / auto_iterator 均不在 hermes cron | 管道 8/1、8/7 断供至今 |
根因:进化模块是 8 月初为 v_next4/v_weak 时代写的**一次性脚本**,温区自适应体系(路由+三温区策略+双市场)上线后没人回头接它。它和 health_monitor 的病是同一类——**硬编码策略名,不跟随系统事实源**。
## 二、闭环设计(待批准)
```
每日盘后(已有) 每周研究(新增) 产出
┌─────────────────┐ ┌──────────────────────┐ ┌────────────────┐
│ period_rollup │ │ evolution_engine.py │ │ 有价值才说话: │
│ (周期滑窗统计) │────────►│ 1. 读健康度/温区表现 │──────►│ 改进结论+证据 │
│ regime_perf │ 数据 │ 2. 识别退化信号 │ 结论 │ 推给老莫决策 │
│ (温区表现) │────────►│ 3. 生成参数变体 │ │ (不自动上线) │
│ health_monitor │ │ 4. 回测验证(统一模拟) │ └────────────────┘
│ (健康度) │ └──────────────────────┘
└─────────────────┘ │
无退化/变体不达标 → 静默
```
### 退化信号定义(触发研究的条件,宁缺毋滥)
1. **健康度连续低**:激活策略 health_score 连续 5 天 < 40(实盘显著偏离回测基线)
2. **温区表现衰减**:策略在其适应温区的近 1 年派生胜率 < 5y 胜率 × 0.8(近期失效迹象)
3. **证伪候选**:激活策略在其适应温区的温区级组合年化 < 0(防守失败)
### 变体生成原则(不拍脑袋)
- 参数空间从**策略定义的当前参数**出发(读 hk_strategies.py / strategy_lab.py 的实际参数,不再硬编码 PARAM_SPACE
- 每个维度 ±20% 网格,单变量扰动(一次只动一个参数,可归因)
- 验证统一走 portfolio_sim(8 槽资金约束),验收门槛:变体在其适应温区的温区级组合年化 ≥ 原策略 + 3pp,且 max_dd 不劣化超过 2pp
### 产出与呈现
- 达标变体 → 写 `strategy_evolution`parent/child/change_description/promoted=0+ 推送老莫(附对比证据)
- 老莫说"上线"才进 strategy_research + 路由候选,**永不自动 promote**
- 无退化或变体全灭 → 当周静默(不制造噪音)
- dashboard 进化区:baseline 已跟随路由(9ba85733);lessons 区待 lesson_extractor 重写后复供
### lesson_extractor 重写方向
- 数据源改实盘:`holding_strategies` 已平仓记录(hit_tp/hit_sl+ strategy_review 的三层复盘结论
- 不再用 LLM 逐笔分析回测 trades(旧做法既贵又假——回测交易没有"教训"可挖)
- 频率:每周一次,跟随 evolution_engine 同跑
## 三、实施清单(批准后执行)
1. `evolution/evolution_engine.py` 新建(退化检测 + 变体生成 + 统一回测验证)
2. `evolution/lesson_extractor.py` 重写(实盘平仓 + 复盘结论驱动)
3. `auto_iterator.py` 归档(参数空间硬编码,被 evolution_engine 取代)
4. hermes cron`evolution_engine` 每周六 22:00(策略评估 21:00 之后)
5. dashboard 进化区读取验证
## 四、明确不做
- 不自动上线任何变体(老莫决策权)
- 不动 strategy_review.py(实盘单笔复盘,职责不同,运行正常)
- 不在本重构中改温区路由逻辑