# 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** 门槛自动对照。建设前应先用本文档协议手动跑通若干策略,验证真实需求。