框架

继续任务提示词 · v5.3.2 全库一致性同步优化(P3-③ 年化口径统一 + 收尾)

当前机械状态(实测):测试 80 项 / 15 类;

optimization · 资产·机制 · optimization/提示词/继续任务提示词_2026-09-27_v5.3.2同步优化_P3-③年化与收尾.md · 12364 B

继续任务提示词 · v5.3.2 全库一致性同步优化(P3-③ 年化口径统一 + 收尾)

给新对话的 Agent:本文件自包含——不用翻历史对话、不用回看上下文。仓库、已完成项、剩余项、红线、坑全在下面。

仓库:/var/minis/mounts/DUCKERRY_Warehouse(挂载,可写)|环境:iSH(Alpine / aarch64)。


零、环境纪律(强制)

  • latest.json mtime 必须保持 Sep 26 19:41(target 2026-09-25,面板 85 行);严禁真跑 fetch.py 全流程(含 --no-fetch,会把 latest.json 覆盖成 DIAGNOSTIC_ONLY)。验证一律用 harness + 单测。
  • iSH:单进程 ≤2 分钟;测试逐类前台跑;后台用 nohup sh -c '…' &(禁止 A && nohup B &,会把 cd 一起放后台);无 CJK 字体(图例用 ASCII);算画分家;等待用 delay 轮询。
  • 收尾三件套:python3 scripts/moc_index.py → python3 scripts/arch_check.py(期望 11/11)→ python3 scripts/doc_sync_check.py --strict(期望 rc=0)。每次改计数都要重跑。
  • 驾驶舱 frontmatter 更新时间 保持 2026-09-26(= latest.json generated_at 日期),不要改成今天。
  • 结束用 memory_write 写当日记忆。

〇、已完成(不要重做)

阶段内容关键产物
P0技能升 v1.7.5(两副本 md5 299c88cf503cd38647a68d627f557b49):SOP 加 Step 2.7 A1 组合记录、复盘 §六 固化 6.3 A1 并行组合记录(置于既有 6.1 模拟盘 / 6.2 纪律自检 之后,带免责句)、测试项数改实测口径、新增「绩效数字引用口径」与「外部资源红线」两节框架/技能/duckerry-daily-review SKILL.md
P1doc_sync_check.py 判据 11 → 13 项:第 12 项=驾驶舱技能行版本+md5(现场算 md5)、第 13 项=数据库说明.md 目录结构计数;各配负向测试;DocSyncTests 5 → 10 项scripts/doc_sync_check.py、tests/test_pipeline.py
P2驾驶舱技能行升 v1.7.5+全 md5;两行交接待办改「已执行」;§九 新增 v5.3.2;数据库说明.md / 框架/使用指南.md 计数与技能版本以实测为准;新增多资产现状统一表述(§〇·五·三)驾驶舱、数据库说明、使用指南
P3-①新建 回测审核清单(ML4T 12→14 条陷阱 + 三处产出自查);驾驶舱回测段入链 + 声明数 9→10回测/回测审核清单_backtest_pitfalls.md

当前机械状态(实测):测试 80 项 / 15 类;arch_check 11/11(md=222 / 出链=822 / 死链 0 / 孤儿 0);doc_sync_check --strict rc=0;moc_index 无需更新。

变更文件 md5(现状):

299c88cf503cd38647a68d627f557b49  框架/技能/duckerry-daily-review SKILL.md   (= /var/minis/skills/duckerry-daily-review/SKILL.md)
24ca1f400cdcde6a8a4341f2bea530dc  scripts/doc_sync_check.py
151600d56d0e51530baf7e8b024f6f41  tests/test_pipeline.py
c3a92a1b8acf57e5897e8d409931b9c0  00 驾驶舱(投资MOC).md
8608502d65943a101806f6998f85bca5  数据库说明.md
21d0ec8f815d47894258b600729a239e  框架/使用指南.md
60043c6efd582abcd5325ab0bfa0aebd  回测/回测审核清单_backtest_pitfalls.md
2a356ab4356b43bba9dfafb87ffc5dd0  optimization/架构风险审计待办_v5.2.3_2026-09-26.md
b2200245a05579dbb7e585e1bb792e70  回测/engine_multi/multiasset_backtest.py   ← P3-③ 待改

回滚点:/var/minis/shared/backup/DUCKERRY_pre_v532_20260927/ (md5_before.txt + pre 副本 + post_P0/ post_P1/ post_P2/ post_P3a/ + md5_after_*.txt)。收尾时补 REVERT.md。


一、P3-③(下一步 · 必做)

目标:把 回测/engine_multi/multiasset_backtest.py 的 metrics() 年化口径从日历跨度统一到 bar 数 / ppy(与 engine_v1 / quantstats 同源)。

  • 定位:multiasset_backtest.py 约 L240
  years = max((eq.index[-1] - eq.index[0]).days / 365.25, 1e-6)   # ← 日历跨度,待替换
  cagr = float((eq.iloc[-1] / eq.iloc[0]) ** (1.0 / years) - 1.0)
  • 改法:复用同函数 L236 已算好的 ppy = infer_ppy(eq.index):
  years = max(len(eq) / ppy, 1e-6)        # bar 数 / ppy(不硬编码 252/52/12)
  cagr = float((eq.iloc[-1] / eq.iloc[0]) ** (1.0 / years) - 1.0)
  • 验收口径(硬性):必须全量复算并覆盖 tables/*.csv 与 curves/*.csv,使表内 年化/卡玛 与 回测/engine_multi/README.md 一致。
  • 先做 ≤2 分钟可行性探测(单跑一次主表并计时)。
  • 单次 >2 分钟 → 拆多个 <2 分钟短进程分批跑(沿用 v5.2.5 的向量化路径,勿退回逐 bar;portfolio.target_weights() 逐 bar 是 O(n²),会 20 分钟)。
  • 若本轮内无法全量复算 → 还原代码,不留"代码改了但表是旧口径"的半吊子,并在报告里列为下一轮。
  • 完成后:在 回测/engine_multi/README.md 与 回测/perf_audit/README.md §四 注明「口径已统一(2026-09-27,v5.3.2)」,并用 回测/perf_audit/ 脚本重跑一次,证明 engine_multi 与 quantstats 年化相对差 0.36% → ~0.08%。

⚠ 复算前先确认 engine_multi 除了 multiasset_backtest.py 是否还有下游客(plot_multi.py 只读表/曲线出图)→ 复算后图也要重出或注明未重出。

二、收尾(P3-③ 完成后一次性做)

  1. 补全 REVERT.md(覆盖 P0/P0.1/P1/P2/P3 全部变更 + 回滚步骤);回滚点同上。
  2. 三件套:moc_index → arch_check(11/11)→ doc_sync_check --strict(rc=0)。

注意:P3-③ 若改表,doc_sync 第 13 项与 arch_check 第 7 项都要复查。

  1. 测试逐类前台跑(改动/新增的类必跑:DocSyncTests 已 10 项;若改 engine_multi 触发新测试,一并跑)。iSH 上整类 discover 会被静默 kill → 逐项或小批跑;PipelineSafetyTests 整类仍会被 kill(逐项跑)。
  2. memory_write 写当日记忆(v5.3.2 全流程 + P3 结论 + 未完成项)。
  3. 回报:变更文件 md5 清单 / 每条验收的原始命令与输出 / P3-③ 复算前后年化对照 / 三件套输出 / 未完成项(未跑测试的类、存疑项必须诚实列出,不许淡化)。

三、登记规范(改仓库必守)

  • 新增任何 .md → 必须在 00 驾驶舱(投资MOC).md §〇·五 对应段加 1 行入链,否则 arch_check 第 2 项(孤儿) 掉。
  • 新增文件改了某目录直属文件数 → 必须同步 §〇·五 该目录声明数(如 ### 回测/(10 个文件:2 笔记 + 8 文本)),否则 第 7 项掉。

(optimization/ 每加 1 个 md → 32 → 33…;回测/ 现为 10。)

  • 新增 optimization/*.md → 文件名内日期必须已出现在 §九 区块内(doc_sync 第 8 项扫 optimization/*.md 全量取最大日期)。用 2026-09-27 命名可免新增(§九 v5.3.2 已含)。
  • §九 版本号必须单调倒序(当前顶部:v5.3.2 → v5.3.1 → v5.3 → v5.2.5 …)。
  • 驾驶舱 frontmatter 更新时间 不要改(保持 2026-09-26)。
  • 改计数后必须重跑三件套。

四、已知坑(血泪)

  1. cd X && nohup B & 会把 cd 一起放后台 → 后续命令在错误 cwd。用 nohup sh -c 'cd X && …' &。
  2. while read 读 '\n'.join(list) 会漏最后一行(无尾换行)→ 写文件补尾换行。
  3. iSH 前台 python >2 分钟易被静默 kill(症状:输出空、exit 0、文件没更新)→ 后台 + 轮询。
  4. grep --include= BusyBox 不支持 → 用 find . -name '*.md' | xargs grep -n …。
  5. portfolio.py 幂等判据是 bar 不是 asof;倒退 bar 必须拒绝推进。
  6. doc_sync 12/13 项是"仅告警不阻断";--strict 只在有 issue 时返回 1。

五、红线(不许碰)

  • 不改 paper_engine 信号/方向/止损;不改 fetch.py 闸门与分析逻辑。
  • portfolio.py 绝不写 数据/paper/、不产 order/signal、不 import paper_engine。
  • pysystemtrade 只读禁装(钉死 pandas==2.1.3,现役 2.2.3 → 会打断 fetch.py 管线)。
  • 研究层(回测/ 或独立脚本)才可用外部库(PYTHONPATH 挂载);生产链 scripts/ 一律不 import 量化策略/ 下的包。
  • 不动 框架/数据口径定义.md、归档区、已发布复盘、predictions.jsonl。
  • 多资产/组合策略不接生产:现状 = 回测层 engine_multi + A1 并行虚拟记录,零生产接入;生产链仍是单资产卫星(SATELLITE_CAP=0.20)。升级门槛 = 经历过一次组合 ≥15% 回撤且没动手。
  • 绩效数字引用口径:年化一律 bar 数 / ppy;索提诺须注明定义(我方 x[x<0].std() vs quantstats 负收益 RMS÷总观测数);卡玛只用 perf_audit v1.1+;回测/纸面/生产口径不得互引。

六、监工条款

分步做完即停并贴证据,等确认再进下一步;任何测试失败 / 自检非全绿 / 计划与现实冲突 → 立即停下报告,不得静默改方案;不得声称"已通过"而无原始输出。

七、P3-③ 之外的下轮候选(不做,仅登记)

  • PyPortfolioOpt risk_models.py 收缩估计评估(无 cvxpy、需回测对照,用户已列为下一轮)。
  • 为 engine_multi 补滚动 walk-forward(补审核清单 #5 存疑)。
  • 补长历史非权益分散腿数据后重做换腿稳健性(补 #8 存疑)。
  • 补 VaR / CVaR / 回撤时长产出(补 #13 存疑)。

附:可直接粘贴的最小提示词

【任务】DUCKERRY_Warehouse v5.3.2 交接续作 —— 先读再动手

仓库:/var/minis/mounts/DUCKERRY_Warehouse(可写)|iSH(Alpine/aarch64)

第一步:完整读 optimization/继续任务提示词_2026-09-27_v5.3.2同步优化_P3-③年化与收尾.md
(自包含,不用翻历史对话)。其「零/三/四/五/六」四节是环境纪律、登记规范、已知坑、红线,全部适用。

已完成、不要重做:P0 技能 v1.7.5 / P1 doc_sync 12-13 项+负向测试 / P2 文档计数统一 / P3-① 回测审核清单。

本轮只做两件事:
1)【P3-③】把 回测/engine_multi/multiasset_backtest.py 的 metrics() 年化口径从日历跨度
   (L240 years=(idx[-1]-idx[0]).days/365.25)改为 bar 数/ppy(复用 L236 的 infer_ppy)。
   验收硬性:必须全量复算并覆盖 tables/*.csv 与 curves/*.csv,使表内年化/卡玛与 README 一致;
   先 ≤2 分钟可行性探测,单次超时则拆 <2 分钟短进程分批跑(沿用向量化路径,勿退回逐 bar);
   ★若本轮无法全量复算 → 还原代码,不留半吊子,并在报告里列为下一轮。
   完成后在 engine_multi/README 与 perf_audit/README §四 注明「口径已统一(2026-09-27,v5.3.2)」,
   并用 perf_audit 脚本重跑证明 engine_multi 与 quantstats 年化相对差 0.36% → ~0.08%。
2)【收尾】补全 backup/DUCKERRY_pre_v532_20260927/REVERT.md;跑三件套
   (moc_index → arch_check 期望 11/11 → doc_sync_check --strict 期望 rc=0);
   测试逐类前台跑(DocSyncTests 已 10 项);memory_write 写当日记忆;
   回报:变更文件 md5 清单 / 每条验收的原始命令与输出 / P3-③ 复算前后年化对照 / 三件套输出 / 未完成项。

红线:不真跑 fetch.py(latest.json mtime 必须仍是 Sep 26 19:41);不改 paper_engine 信号与 fetch 闸门;
不动 数据口径定义.md / 归档区 / 已发布复盘 / predictions.jsonl;pysystemtrade 只读禁装;
生产链 scripts/ 不 import 量化策略/ 下任何包;组合策略不接生产。
监工条款:分步做完即停并贴证据等确认;任何失败/自检非全绿/计划冲突 → 立即停下报告。