mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 16:44:15 +08:00
docs(strategy): 新增 AI 策略迭代指南
- 新增 docs/strategy-iteration.md:两阶段闭环(粗调/精调)与分层验证、迭代台账与版本快照、证据包格式、判定门槛/留出集终审/停止规则、五张提示词卡片、现有功能映射表、UI 工作台规划(显式标注未实现) - docs/strategy.md 方式二末尾加互链 - README 完整文档表加入口行
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
# AI 策略迭代指南
|
||||
|
||||
用 AI 承担「生成 — 诊断 — 修改」的重复劳动,**回测验证与上线决策永远由人完成**——与[挖掘模块](./mining.md)「候选显式发布、永不自动上线」同一纪律。
|
||||
|
||||
## 0. 适用边界(先读)
|
||||
|
||||
| 你想要的是 | 该用的东西 |
|
||||
| :--- | :--- |
|
||||
| 投入研究,让 AI 干代码活,自己拍板 | ✅ 本指南 |
|
||||
| 不想研究,快速拿一个还行的策略 | [挖掘](./mining.md)(自动化搜索 + 显式发布) |
|
||||
| 完全自动赚钱 | ❌ 不存在;本项目明确不做 AI 荐股 / 涨停预测 |
|
||||
|
||||
两条路径,同一套协议:
|
||||
|
||||
- **路径 A · 面板内置 AI(零代码)**:选股页「AI 策略生成器」生成与修改(见 [strategy.md → 方式二](./strategy.md)),人跑回测;
|
||||
- **路径 B · 本机 AI 编程助手**:Trae / Codex / OpenCode / ZCode / WorkBuddy 等,用本指南的提示词卡片直接读写策略文件与台账,适合愿意碰文件的用户。
|
||||
|
||||
## 1. 迭代闭环
|
||||
|
||||
```
|
||||
冷启动(只做一次): 想法 → 生成 v1 → 基线回测 → 建台账(写入门槛,封存留出集)
|
||||
每轮: ① 读台账 → ② 提假设 → ③ 改动 → ④ 扫描初筛 → ⑤ 回测 + 分年
|
||||
→ 拟接受才触发 → ⑥ 终审(敏感性 / 样本外 / 蒙卡) → ⑦ 判定 → ⑧ 记账 → ⑨ 停止检查
|
||||
```
|
||||
|
||||
### 两阶段:先粗调,后精调
|
||||
|
||||
- **粗调期(约 v1~v4)**:每轮允许一个「改动主题」,可以是一组相关的结构修改(如"给入场加市场环境过滤");
|
||||
- **精调期(v5 起)**:严格执行**单变量**,一轮只改一处;
|
||||
- 切换标志:连续一轮结构改动不再带来大幅改善,即进入精调。
|
||||
|
||||
### 分层验证:常规轮轻,终审重
|
||||
|
||||
- **常规轮**只跑:扫描初筛 + 核心回测 + 分年(分钟级);
|
||||
- **终审**只在判定为「拟接受」时触发:参数敏感性 + 滚动样本外 + 蒙卡回撤;被回退的轮次不必烧终审。
|
||||
|
||||
## 2. 迭代台账(记忆)
|
||||
|
||||
### 文件布局
|
||||
|
||||
```
|
||||
data/strategies/custom/my_strategy.py ← 当前生效版本(最新基线,引擎自动发现)
|
||||
data/strategies/custom/.iterations/my_strategy/
|
||||
├── LEDGER.md ← 台账主文件
|
||||
├── v1.py v2.py ... ← 版本快照
|
||||
└── evidence/ ← 每轮证据包(可选留存)
|
||||
```
|
||||
|
||||
引擎只扫描 `custom/` **顶层**的 `*.py`(下划线前缀跳过),`.iterations/` 子目录不会被当成策略加载,快照再多也不污染策略列表。
|
||||
|
||||
### 台账首页(冷启动时写)
|
||||
|
||||
```markdown
|
||||
# my_strategy 迭代台账
|
||||
- 思路: 破板次日低吸,博修复
|
||||
- 区间: 2022-01-01 ~ 2026-06-30(最后 20% 为留出集,封存不用)
|
||||
- 判定门槛: 全区间夏普 ≥ 基线+0.2 且 分年最差>0 且 样本外降幅<10% 且 命中数变化<50%
|
||||
- 回退线: 样本外夏普降幅>20% 或 胜率<45% 或 敏感性陡变(±20% 扰动指标波动>30%)
|
||||
- 基线(v1): 夏普 __ / 回撤 __ / 胜率 __ / 命中 __
|
||||
- 待试清单: ① 止损 -0.05→-0.07 ② 过滤一字板 ③ 持有 5→10 日
|
||||
```
|
||||
|
||||
### 每轮追加一节
|
||||
|
||||
```markdown
|
||||
## R3 · 2026-09-06(粗调)
|
||||
- 假设: 破板次日胜率低源于未过滤一字板 → basic_filter 增加非一字板条件
|
||||
- 改动: v2.py L47(+1 行);预期: 胜率↑,命中数↓
|
||||
- 证据: 夏普 1.31→1.58 | 分年最差 0.42→0.71 | 样本外 1.12→1.35 | 命中 87→63
|
||||
- 判定: ✅ 接受,快照 v3.py
|
||||
- 负知识: 一字板过滤的贡献主要来自 2024 段,2022 段几乎无变化
|
||||
- 下一步: 待试清单 ③
|
||||
```
|
||||
|
||||
**负知识**(什么没用、为什么)是台账里最值钱的部分——它让 AI 和你都不再走回头路。
|
||||
|
||||
## 3. 证据包(喂给 AI 的输入)
|
||||
|
||||
诊断质量取决于输入质量。用固定格式组装(回测结果页导出概要 + 验证 / 归因页关键数字):
|
||||
|
||||
```
|
||||
策略: my_strategy @ v3 | 区间: 2022-01~2026-06(留出集未用)
|
||||
基线(v2): 夏普 1.31 / 回撤 -18.2% / 胜率 48% / 盈亏比 1.9 / 命中 87
|
||||
本轮(v3): 夏普 1.58 / 回撤 -15.1% / 胜率 52% / 盈亏比 2.1 / 命中 63
|
||||
分年夏普: 22:0.31 23:1.02 24:1.87 25:1.66 26YTD:1.43
|
||||
参数敏感: 止损±20% 内夏普波动 ±0.4(陡) | 持有天数平缓
|
||||
样本外(滚动): 1.35 / 0.98 / 1.12
|
||||
因子归因: momentum_20d 胜1.02/败0.87 | turnover 胜2.1%/败3.4%(拖后腿)
|
||||
```
|
||||
|
||||
**AI 诊断纪律**:先逐条复述证据 → 问题按证据强度排序 → 禁止引用证据里没有的现象 → 每个问题对应一处最小修改与预期指标。AI 的诊断是**参考意见**,不进判定链;判定链 = 门槛自动对照 → 人拍板。
|
||||
|
||||
## 4. 门槛 · 留出集 · 停止规则
|
||||
|
||||
- **门槛先于结果写下**(冷启动时进台账),防止看完结果找理由;数字是示例,可自定,关键是提前锁定;
|
||||
- **留出集终审**:迭代开始即封存最后 20% 区间,任何一轮都不许用;定型版本只在留出集上跑**一次**,通过才可进监控——这是对"多轮挑最优"多重检验的最终防线;
|
||||
- **停止规则**:连续 2 轮无改善,或达成预设目标,或满 8 轮强制复盘。
|
||||
|
||||
## 5. 版本快照与回退
|
||||
|
||||
- 每次「接受」:当前文件复制为 `v{n}.py` 快照,台账记版本号;
|
||||
- **回退 = 把快照复制回当前文件**(一行命令),台账追加回退原因;
|
||||
- **A/B 对比**:旧版本参数存入回测页「候选」,新版本一键载入复测,同区间并排看。
|
||||
|
||||
## 6. 提示词卡片(路径 B)
|
||||
|
||||
五张卡片,每次发送时末尾都追加**纪律卡**。
|
||||
|
||||
**① 冷启动卡**
|
||||
|
||||
```text
|
||||
阅读 backend/app/strategy/prompts/strategy-guide.md,按规范在 data/strategies/custom/
|
||||
新建策略文件,思路:____。随后在 data/strategies/custom/.iterations/<策略名>/ 建立
|
||||
LEDGER.md,写入:思路、回测区间(封存最后 20% 为留出集)、判定门槛、v1 基线指标(我提供)、
|
||||
待试清单 3~5 条。铁律:只生成这一个 .py,只 import polars as pl,
|
||||
不改 backend/frontend/docs 的任何现有文件。
|
||||
```
|
||||
|
||||
**② 迭代卡(每轮开头)**
|
||||
|
||||
```text
|
||||
读 LEDGER.md 最后一轮 + 我贴的证据包,按「假设 → 改动 → 预期影响指标」格式输出本轮提案。
|
||||
粗调期允许一个改动主题;精调期只许改一处。末尾更新待试清单。
|
||||
```
|
||||
|
||||
**③ 诊断卡**
|
||||
|
||||
```text
|
||||
只消费我贴的证据包,输出问题清单(按证据强度排序)与每条对应的最小修改建议。
|
||||
不执行修改,不引用证据之外的现象。
|
||||
```
|
||||
|
||||
**④ 复盘卡(停止时)**
|
||||
|
||||
```text
|
||||
通读台账,汇总全部负知识,给出「定型 / 换方向 / 废弃」建议及理由。
|
||||
若换方向,用一句话给出衍生新策略的思路。
|
||||
```
|
||||
|
||||
**⑤ 纪律卡(任意卡片末尾追加)**
|
||||
|
||||
```text
|
||||
纪律:一次只改一个主题(精调期一处);不顺手重构;不虚报指标;
|
||||
样本外只用于判定,不用于调参;所有新想法先进待试清单。
|
||||
```
|
||||
|
||||
## 7. 与现有功能的映射(全部已实现)
|
||||
|
||||
| 协议步骤 | 面板位置 |
|
||||
| :--- | :--- |
|
||||
| 生成 / 修改策略 | 选股页 · AI 策略生成器 / 自定义编写 |
|
||||
| 扫描初筛 | 选股页 · 策略卡片扫描(命中数 / 分布) |
|
||||
| 回测 + 分年 | 回测页 · 策略回测(结果导出概要 CSV) |
|
||||
| 终审 | 回测页 · 验证(参数敏感性 / 滚动样本外) |
|
||||
| 因子归因 | 回测页 · 因子归因 tab(评分策略) |
|
||||
| A/B 对比 | 回测页 · 候选方案 · 一键载入复测 |
|
||||
| 上线检验 | 监控中心 · 策略触发器 |
|
||||
|
||||
## 8. 迭代完成后的产出
|
||||
|
||||
**会有,而且有三层:**
|
||||
|
||||
1. **定型版策略(最重要)**:就是 `data/strategies/custom/` 里那个策略文件的最终版——**同一个策略 ID 的演进结果**,引擎自动发现,选股扫描、回测、监控中心立即可用。迭代的本质是"让这个 ID 变得更好",不是生成一堆新 ID;
|
||||
2. **快照链 + 台账**:`.iterations/` 完整保留每版快照与判定记录,随时回退、随时追溯"这个策略为什么长这样";快照不参与策略发现,不会污染策略列表;
|
||||
3. **衍生新策略(可选)**:复盘判定「换方向」时,新思路作为一个**新策略文件(新 ID)**开启新一轮冷启动,新台账首页记一行血缘(如 `衍生自 my_strategy@v3`),旧策略与旧台账原地保留。
|
||||
|
||||
上线路径:留出集终审通过 → 监控中心配置该策略触发器 → 盘中实时检验,触发记录持久化。
|
||||
|
||||
## 9. UI 工作台(未实现,路线图项)
|
||||
|
||||
> ⚠️ 以下为规划,当前版本**不存在**这些页面与按钮,请勿在面板中寻找。
|
||||
|
||||
规划中的「迭代工作台」:策略卡片新增「AI 迭代」入口,进入三栏界面——左侧轮次时间线(每轮假设/diff/证据/判定)、中部指标对比表 + 门槛对照 + 版本 diff、右侧 AI 提案面板(结构化提案,人点「采纳」才落盘);回测结果页新增「生成证据包」按钮。分期:**M1** 只读骨架(时间线 / diff / 回退)→ **M2** 闭环(证据包 / 提案 / 采纳落盘)→ **M3** 门槛自动对照。建设前应先用本文档协议手动跑通若干策略,验证真实需求。
|
||||
Reference in New Issue
Block a user