继续任务提示词 · v5.3.2 全库一致性同步优化(P3-③ 年化口径统一 + 收尾)
当前机械状态(实测):测试 80 项 / 15 类;
继续任务提示词 · v5.3.2 全库一致性同步优化(P3-③ 年化口径统一 + 收尾)
给新对话的 Agent:本文件自包含——不用翻历史对话、不用回看上下文。仓库、已完成项、剩余项、红线、坑全在下面。
仓库:
/var/minis/mounts/DUCKERRY_Warehouse(挂载,可写)|环境:iSH(Alpine / aarch64)。
零、环境纪律(强制)
latest.jsonmtime 必须保持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.jsongenerated_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 |
| P1 | doc_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-③ 完成后一次性做)
- 补全
REVERT.md(覆盖 P0/P0.1/P1/P2/P3 全部变更 + 回滚步骤);回滚点同上。 - 三件套:
moc_index→arch_check(11/11)→doc_sync_check --strict(rc=0)。
注意:P3-③ 若改表,doc_sync 第 13 项与 arch_check 第 7 项都要复查。
- 测试逐类前台跑(改动/新增的类必跑:
DocSyncTests已 10 项;若改engine_multi触发新测试,一并跑)。iSH 上整类 discover 会被静默 kill → 逐项或小批跑;PipelineSafetyTests整类仍会被 kill(逐项跑)。 memory_write写当日记忆(v5.3.2 全流程 + P3 结论 + 未完成项)。- 回报:变更文件 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)。 - 改计数后必须重跑三件套。
四、已知坑(血泪)
cd X && nohup B &会把cd一起放后台 → 后续命令在错误 cwd。用nohup sh -c 'cd X && …' &。while read读'\n'.join(list)会漏最后一行(无尾换行)→ 写文件补尾换行。- iSH 前台 python >2 分钟易被静默 kill(症状:输出空、exit 0、文件没更新)→ 后台 + 轮询。
grep --include=BusyBox 不支持 → 用find . -name '*.md' | xargs grep -n …。portfolio.py幂等判据是 bar 不是 asof;倒退 bar 必须拒绝推进。- doc_sync 12/13 项是"仅告警不阻断";
--strict只在有 issue 时返回 1。
五、红线(不许碰)
- 不改
paper_engine信号/方向/止损;不改fetch.py闸门与分析逻辑。 portfolio.py绝不写数据/paper/、不产 order/signal、不 importpaper_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_auditv1.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 量化策略/ 下任何包;组合策略不接生产。
监工条款:分步做完即停并贴证据等确认;任何失败/自检非全绿/计划冲突 → 立即停下报告。