框架

DUCKERRY_Warehouse v4.2 变更报告 · 债券腿日更自动化 + 武器库接入

推论:武器库当前只能"读源码当算法参考、移植为纯 Python",不能作为运行时依赖。

optimization · 资产·机制 · optimization/报告/系统架构优化报告_2026-09-23.md · 10317 B

DUCKERRY_Warehouse v4.2 变更报告 · 债券腿日更自动化 + 武器库接入

日期:2026-09-23 | 版本:v4.2(承接 v4.1 模拟盘风险执行补全版)

一句话:把外接武器库从"挂着没用"变成"每天第一步就能用",并因此把 L0-3 从收益率代理升级为真实债券价格可评估;同时把发布流程做成新对话可直接粘贴的交接包。


一、本次要解决的问题

问题症状本次处置
武器库形同虚设/var/minis/mounts/武器库/ 挂载 7 仓库,但每天发布从不调用打通唯一可用通道并封装为一键脚本
L0-3 债券腿退化AGG/TLT 数据停在 09-18 → L0-3 只能写"部分可评估(收益率代理)"债券腿推进至 09-22,L0-3 → 可评估(含真实债券价格)
发布易被静默 kill前台必被 kill;本次后台运行亦被抓完后静默终止默认加 DK_DISABLE_MCAL=1,一次跑通
交接靠记忆新对话需口头补充路径/参数/判据出品 v4.2 交接提示词(整段粘贴即用,含排版同步清单)

二、武器库环境实测结论(重要,避免后续白费功夫)

python3 3.12 + pandas 2.2.3 + requests          ✅ 可用
akshare / efinance / yieldcurve / pybondlab     ❌ 未安装,且无 pip 网络 → 不可 import
shell curl / python requests 直连外网            ❌ HTTPS_PROXY 拒绝(ProxyError)
minis-browser-use fetch                         ✅ 唯一可用通道(http 200,落盘 /var/minis/browser/)

推论:武器库当前只能"读源码当算法参考、移植为纯 Python",不能作为运行时依赖。 已在交接提示词中写入禁止项:不得在脚本里 import akshare/efinance/pybondlab。

已打通的数据通道(eastmoney,免 key)

https://push2his.eastmoney.com/api/qt/stock/kline/get
  ?secid=105.TLT          # TLT;AGG=107.AGG(105.AGG 返回 data:null)
  &fields1=f1&fields2=f51,f53&klt=101&fqt=1&beg=YYYYMMDD&end=YYYYMMDD
→ {"data":{"code":"TLT","klines":["2026-09-22,81.555", ...]}}

⚠ 坑位(已封装):minis-browser-use fetch 落盘名为秒级时间戳,连续抓两个 URL 会互相覆盖——第二次抓取会顶掉第一次的结果(本次实测踩到)。必须「抓一个 → 立即 cp 另存 → 再抓下一个」。


三、新增/变更文件

文件变更
scripts/refresh_bond_etf.sh新增:一键刷新 TLT/AGG 日线(浏览器 fetch → 立即另存 → 增量合并),含坑位封装与 pending 提示
scripts/update_bond_etf.py沿用(增量合并逻辑正确:旧日期不覆盖,只追加新日期)
数据/bond_tlt.json / bond_agg.json09-18 → 09-22(各 +2 天:09-21、09-22);备份 .bak_20260923
00 驾驶舱(投资MOC).md升 v4.2(5 处:frontmatter / 头部状态行 / §〇 架构图与表格 / §九版本记录 / §十工具箱 / 页脚)
复盘/2026-09-21 收盘数据快照.md--force 重生成(旧版 L0-3 仍写"收益率代理",已过时)
optimization/每日发布运行提示词_2026-09-23.md新增:v4.2 交接包(8 节,整段可粘贴)
optimization/系统架构优化报告_2026-09-23.md新增:本报告

四、验证证据(本次真实运行)

4.1 债券腿合并

TLT: 旧 77 天 + 新增 2 天 = 79 天   最新 2026-09-22,81.555
AGG: 旧 77 天 + 新增 2 天 = 79 天   最新 2026-09-22,96.105
(二次执行:新增 0 天 → 幂等,打印 pending,不补数)

4.2 发布结果

项值
run_id20260923T003658+0800(--force 重生成快照:20260923T004212)
target2026-09-21(09-22 LBMA 黄金 PM 未发布 → lbma_priced=False → 不计交易日,脚本正确拒绝填充)
G1 / publish / sourcePASS / PASS / PASS,missing_core=[] stale_core=[]
面板82 行 / 77 交易日 / span 2026-06-01 → 2026-09-22
L0-3可评估(含真实债券价格):金 -0.55% / SPX +1.49% / NDX +2.83% / AGG +0.26% → 未触发三杀
L0 汇总正常
L1up(+1.34%,同向 3/5);chg20 -3.54% → tf_align=diverged
RegimeTrending-Up 0.785(分布 Range 29 / TD 20 / Trans 17 / TU 14)
Brier0.074(基准 0.12379,n=5);Range n=3 0.0633 / Transitional n=2 0.09
Paperequity 0.995683 / cash 0.214500 / 持仓 0.781183 / 当日 -0.3898% / 无 exit;新信号 long size 0.785(fd=09-21)→ order=null(同日幂等 hold,该 fd 已有 filled 订单 ord_20260922_125913)
recomputerecompute2 rc=0 / recompute4 rc=0

4.3 面板债券列(尾部)

2026-09-18   tlt 81.25   agg 95.96   trading_day=True
2026-09-21   tlt 81.80   agg 96.21   trading_day=True
2026-09-22   tlt 81.555  agg 96.105  trading_day=False(gold PM 未发布)

4.4 静默 kill 复现记录

运行命令结果
#1后台 python3 -u scripts/fetch.py✔ 完成(00:02,target 09-21,L0-3 走代理)
#2同上(刷债券腿后)✘ 抓完 12 源后静默终止,无 完成: 行,latest.json 未更新
#3DK_DISABLE_MCAL=1 + 后台✔ 完成(00:36,L0-3 真实债券价格)
#4同上 + --force✔ 完成(00:42,快照重生成)

五、口径与纪律(未变)

  • 缺值保持缺值;禁止前值填充、线性外推、把旧值冒充目标日。
  • --force 只重渲染自动快照,不覆盖人工收盘复盘。
  • MOC AUTO:DATA 区块由脚本维护,禁止手改。
  • 武器库数据仅作补充/校验,写入独立文件并标 [待验证] 单源,不覆盖主管线 12 源原始响应。

六、遗留与风险

项说明
债券腿单源AGG/TLT 仅 eastmoney 单源 [待验证],设想引入第二源交叉校验
09-22 价格微动二次抓取 TLT 09-22 报 81.565(首次 81.555)—— 增量合并不覆盖已有日期,已存值保持不变,属预期
静默 kill根因是 iOS 内存压力,DK_DISABLE_MCAL=1 只是降低概率;仍需以"日志末行"为唯一完成判据
周报需 ≥5 交易日 equity,自然积累


【追加】v4.3 债券腿入管线 + 排版自检(同日完成)

七、v4.3 要解决的问题

问题处置
债券腿是"每日手动第 0 步"改为 fetch.py 管线内自动步骤(面板构建前),每日发布恢复"一条命令"
"排版同步"靠人记新增 doc_sync_check.py,9 项可机器校验,发布后自动跑
真实数据被重格式化update_bond_etf.py 原样保留源串(81.80 不再变 81.8)
L0-3 缺失分支输出原始浮点统一 %+.2f%% / "缺"

八、代码变更

文件变更
scripts/fetch.py新增 refresh_bond_leg(timeout=240):子进程调用 refresh_bond_etf.sh,异常全部捕获、永不致命,错误写 数据/logs/bond_leg_error.log;新增 --no-bond;结果入 latest.json.bond_leg;发布后调用 doc_sync_check 并回写 latest.json.doc_sync
scripts/doc_sync_check.py新增:纯函数 evaluate(...) + run(...),9 项检查,--strict 时 exit 1
scripts/update_bond_etf.pyparse_klines 改为保留源串(不再 float()→str() 往返)
scripts/dkanalysis.py新增 _pct() 辅助;L0-3 缺失分支改用 %+.2f%%
scripts/publish_status.sh新增 bond_leg / doc_sync / panel 三行输出,doc_sync 有 issue 时逐条打印
tests/test_pipeline.py新增 BondLegTests(3) + DocSyncTests(4),套件 15 → 22
技能 duckerry-daily-review1.1.0 → 1.2.0:§1.5 改为"已内置管线",新增 §1.6 一致性自检
交接提示词第 0 步由"必做"改为"v4.3 起内置,排障时才手动";完成判据加入 债券腿: 与 排版同步检查 行

九、验证证据

项结果
单元测试PipelineSafetyTests rc=0|PaperEngineTests 5 OK|BondLegTests 3 OK|DocSyncTests 4 OK(合计 22 项,逐类 rc=0)
非阻断实测DK_SKIP_BOND=1 → 「债券腿: 已跳过」,管线继续
端到端 runrun_id 20260923T081449+0800(--force,DK_DISABLE_MCAL=1 后台),target 2026-09-22,G1/publish/source 全 PASS,面板 82 行 / 78 交易日 / span 06-01→09-22
管线日志特征债券腿: === 抓取 TLT/AGG === + 旧 79 天 + 新增 0 天(幂等)+ ✔ 驾驶舱/快照/run_log 与 latest.json 一致 + 排版同步检查: 全部一致 ✔
latest.jsonbond_leg.ok=true;doc_sync={"ok":true,"issues":[]}
自检实效发布过程中真的抓出「MOC 头部写 77 交易日 / 实际 78」→ 修正后归零(证明检查项有效)
recomputerecompute2 rc=0 / recompute4 rc=0

十、附带观察

  • 目标日推进:本会话期间 LBMA 发布 2026-09-22 PM fix(gold_pm.json 由止于 09-21 → 出现 09-22, 4329.55),面板 lbma_priced=True → target 自动由 09-21 推进至 09-22,新快照 复盘/2026-09-22 收盘数据快照.md 生成。
  • L0 正确降级:09-22 的 SPX/NDX/VIX 目标日尚未发布(FRED 滞后)→ L0-2/L0-3 = 无法评估 → L0 汇总"降级(存在无法评估项)"。无任何填充(符合口径)。债券腿本身有真实值:AGG -0.11%。
  • 09-21 的 L0-3 仍为「可评估(含真实债券价格)」(AGG +0.26%)。

十一、回滚点(v4.3)

  • 代码改动前:见一次性优化提示词 §0 的 tar czf /var/minis/shared/backup/DUCKERRY_Warehouse_pre_v43_*.tgz
  • 债券腿数据:数据/bond_tlt.json.bak_20260923、数据/bond_agg.json.bak_20260923
  • 全库:/var/minis/shared/backup/DUCKERRY_Warehouse_pre_arch_20260922_001450

关联:交接提示词 v4.2 | v4.0 架构报告 | 驾驶舱