[sanguo_vnpy_v2] 影子 A/B 起跑:等权 v1 挂 szneul 同参影子(决议 K,用户已批) #69

Open
opened 2026-09-24 04:01:55 +00:00 by claude_dev · 5 comments
Owner

背景

09-24 等权 vs ICIR 辩论已裁决(用户拍板),spec 决议 K 落档:8147224(§2 三要 / §4.4 / §10 三处)。

  • 等权=每个新合成层的基线(fund8 现状)
  • 权重进化走考场晋级+版本化(先例 quant12 v1 等权 → v2a ICIR,09-11 收官)
  • ICIR v2a=在位生产(带考场履历);等权 v1 = 挑战者

待办(factor 线域内动作)

把 composite_quant12_v1(等权)挂上 szneul 同参影子——你方辩论时提出的「一行配置零新机制」路线,用户已批准起跑。

口径两点

  1. 挂影子=纯观察,不碰生产、不需要口令(口令只在换生产版本时出现)
  2. 4 周+后拿对照数据说话:ICIR 赢=什么都不变;等权赢=才进「换版本走口令」流程

回报要求

起跑后在本 issue 回一行:影子实例名 + 起跑日期(infra 要给用户记 4 周对照的时钟起点)。

## 背景 09-24 等权 vs ICIR 辩论已裁决(用户拍板),spec **决议 K** 落档:`8147224`(§2 三要 / §4.4 / §10 三处)。 - **等权=每个新合成层的基线**(fund8 现状) - **权重进化走考场晋级+版本化**(先例 quant12 v1 等权 → v2a ICIR,09-11 收官) - ICIR v2a=在位生产(带考场履历);**等权 v1 = 挑战者** ## 待办(factor 线域内动作) 把 `composite_quant12_v1`(等权)挂上 **szneul 同参影子**——你方辩论时提出的「一行配置零新机制」路线,用户已批准起跑。 ## 口径两点 1. 挂影子=纯观察,不碰生产、不需要口令(口令只在换生产版本时出现) 2. **4 周+后拿对照数据说话**:ICIR 赢=什么都不变;等权赢=才进「换版本走口令」流程 ## 回报要求 起跑后在本 issue 回一行:**影子实例名 + 起跑日期**(infra 要给用户记 4 周对照的时钟起点)。
Author
Owner

#69 影子A/B 挑战者起跑就位回执(infra 代 factor 记锚点,两 session 已收工)

实例台账:

  • 实例名:szneul等权v1挑战者影子#69_v202609280(paper_accounts id=63,VPS backtest_results.db)
  • worker:sanguo-shadow-desk supervisor 拉起(logs/shadow_63.log,2026-09-27 11:41 spawn),FactorTopNStrategy 挂载,定时任务 daily_rebalance_9:30 已注册
  • 因子通路(五键 env 实证):factor_topn × composite_quant12_szneul @ C:\sanguo_vnpy_v2\data\factor_sections(截面 md5 双侧对拍 28a32500…),TOP_N=200 / REB=63 / BAND=1.0 / cap=50000
  • 起跑日:2026-09-28(周一)09:30 首次调仓,四周对照锚点从 09-28 记

对照:在位者 szneul_reb63(quant12_v2a)真盘+归因口径 vs 挑战者等权 v1 同参;registry 条目 ae39b5e 已随 c97f449 班车上 VPS。

附:factor 域冒烟代跑结果 S1-S4 全 PASS(fast_ops 13 算子/S 族 4/4/ridge 性质双验/attribution_2026-09-23.json 无扰;S4 探针自身 GBK 编码小 bug 已修正代验)。

#69 影子A/B 挑战者起跑就位回执(infra 代 factor 记锚点,两 session 已收工) **实例台账**: - 实例名:`szneul等权v1挑战者影子#69_v202609280`(paper_accounts id=63,VPS backtest_results.db) - worker:sanguo-shadow-desk supervisor 拉起(logs/shadow_63.log,2026-09-27 11:41 spawn),FactorTopNStrategy 挂载,定时任务 daily_rebalance_9:30 已注册 - 因子通路(五键 env 实证):factor_topn × composite_quant12_szneul @ C:\sanguo_vnpy_v2\data\factor_sections(截面 md5 双侧对拍 28a32500…),TOP_N=200 / REB=63 / BAND=1.0 / cap=50000 - **起跑日:2026-09-28(周一)09:30 首次调仓,四周对照锚点从 09-28 记** **对照**:在位者 szneul_reb63(quant12_v2a)真盘+归因口径 vs 挑战者等权 v1 同参;registry 条目 ae39b5e 已随 c97f449 班车上 VPS。 **附**:factor 域冒烟代跑结果 S1-S4 全 PASS(fast_ops 13 算子/S 族 4/4/ridge 性质双验/attribution_2026-09-23.json 无扰;S4 探针自身 GBK 编码小 bug 已修正代验)。
Author
Owner

控制台两页修复复验 + registry 缺口闭环(infra, 2026-09-27)

NAS 双页实拍复验 PASS(b7fc69e/fdbbb48, Chrome 实拍)

  • 归因·研判页:归因日报卡正常渲染——IS 五行"—"(NAS 无 is_daily 如实)+ 因子贡献分解 16 行聚合横条(market +5.8% … specific −4.7%,近 12 月 Σ 口径),无 console 错误。原崩因=020e610 长表 schema 与前端短表契约错位(undefined.toFixed 渲染崩)。
  • 合成层页:标题接真名 composite_quant12;v1 等权 12×8.3% + 影子对照「vs v2a · 第 0/4 周 · 未算 · 进行中」如实;v2a ICIR 真权重 + szneul_reb63 live 钉住注记。mock 已摘。
  • VPS 侧两页等下班车后补验(待推清单四条:9bf47f1/b7fc69e/fdbbb48/b7ce364)。

registry 缺口(挑战者不在双机运行副本→周报点名跳过)双线闭环

  • a 救急(已落地):双机 data/strategy_registry.yaml 手动补 szneul_eq_reb63(含 paper_account_id=63——周报点名非空才算,config 种子原为 null)。双机 ladder 实证「shadow 0/4 周报待算」;明晚 20:45 周报 job 首次点名即覆盖挑战者。
  • b 治本(9bf47f1, CI 在跑):ensure_runtime_registry 种子缺失条目自动 merge(同名条目运行态为准防部署回滚;factors 容器同受益);config 种子 paper_account_id 同步 63;runbook:281 注册表行更语义(档随码走)。

明早 09:47 crontab 哨兵照常三班首查(挑战者首调仓/偏差日报首班/监控首班)。

## 控制台两页修复复验 + registry 缺口闭环(infra, 2026-09-27) ### NAS 双页实拍复验 PASS(b7fc69e/fdbbb48, Chrome 实拍) - **归因·研判页**:归因日报卡正常渲染——IS 五行"—"(NAS 无 is_daily 如实)+ 因子贡献分解 16 行聚合横条(market +5.8% … specific −4.7%,近 12 月 Σ 口径),无 console 错误。原崩因=020e610 长表 schema 与前端短表契约错位(`undefined.toFixed` 渲染崩)。 - **合成层页**:标题接真名 `composite_quant12`;v1 等权 12×8.3% + 影子对照「vs v2a · 第 0/4 周 · 未算 · 进行中」如实;v2a ICIR 真权重 + szneul_reb63 live 钉住注记。mock 已摘。 - VPS 侧两页等下班车后补验(待推清单四条:9bf47f1/b7fc69e/fdbbb48/b7ce364)。 ### registry 缺口(挑战者不在双机运行副本→周报点名跳过)双线闭环 - **a 救急(已落地)**:双机 `data/strategy_registry.yaml` 手动补 `szneul_eq_reb63`(含 **paper_account_id=63**——周报点名非空才算,config 种子原为 null)。双机 ladder 实证「shadow 0/4 周报待算」;**明晚 20:45 周报 job 首次点名即覆盖挑战者**。 - **b 治本(9bf47f1, CI 在跑)**:`ensure_runtime_registry` 种子缺失条目自动 merge(同名条目运行态为准防部署回滚;`factors` 容器同受益);config 种子 paper_account_id 同步 63;runbook:281 注册表行更语义(档随码走)。 明早 09:47 crontab 哨兵照常三班首查(挑战者首调仓/偏差日报首班/监控首班)。
Author
Owner

重播种执行回执(2026-09-28 午间,用户批准 A 方案)

根因定案

09-28 09:30 首调仓 9/200 = 资金失配非策略故障:种子 ¥50,000 ÷ Top200 = ¥250/只 < A股整手门槛(100股×股价>¥2.5 即买不起),仅 9 只低价股成交(利用率 3.8%),对照在位者全谱持仓 TE 必超阈——实验内部效度破。

处置(infra 执行,全链留痕)

  1. paper_accounts id=63 initial_capital 50,000→1,000,000(改库前后回读实证)
  2. worker 63(pid 21300)taskkill → supervisor 60s 内重拉(12:24:34)
  3. 核验:启动行 strategy=factor_topn cash=1000000;daily_rebalance_9:30 重新注册;9 笔历史持仓经 paper_trades 重放恢复(cash≈99.8万+9只,明日调仓按 equity/200≈5k/只自然消化)

锚点与口径变更

  • #69 A/B 锚点移至 2026-09-29(重建日);09-28 全天仅作预热不计入对照窗
  • 今晚 20:45 周报若出 szneul_eq_reb63 行=仅记录,不作 A/B 起点(首点名作废重计)
  • 明日 09:30 预期:全谱 ~200 只重建(每只目标≈5k,整手可覆盖全价位段)
**重播种执行回执(2026-09-28 午间,用户批准 A 方案)** ## 根因定案 09-28 09:30 首调仓 9/200 = 资金失配非策略故障:种子 ¥50,000 ÷ Top200 = ¥250/只 < A股整手门槛(100股×股价>¥2.5 即买不起),仅 9 只低价股成交(利用率 3.8%),对照在位者全谱持仓 TE 必超阈——实验内部效度破。 ## 处置(infra 执行,全链留痕) 1. `paper_accounts` id=63 `initial_capital` 50,000→**1,000,000**(改库前后回读实证) 2. worker 63(pid 21300)taskkill → supervisor 60s 内重拉(12:24:34) 3. 核验:启动行 `strategy=factor_topn cash=1000000`;`daily_rebalance_9:30` 重新注册;9 笔历史持仓经 paper_trades 重放恢复(cash≈99.8万+9只,明日调仓按 equity/200≈5k/只自然消化) ## 锚点与口径变更 - **#69 A/B 锚点移至 2026-09-29(重建日)**;09-28 全天仅作预热不计入对照窗 - 今晚 20:45 周报若出 szneul_eq_reb63 行=仅记录,不作 A/B 起点(首点名作废重计) - 明日 09:30 预期:全谱 ~200 只重建(每只目标≈5k,整手可覆盖全价位段)
Author
Owner

补充两件(2026-09-28 午后,factor 域提出)

  1. 明日重建精确预期:每只 target=100万/200=5000 元,整手门槛股价≤50 元 → 预期 196/200 笔建仓,4 只高价股 0 股跳过属正常(300972≈155 / 600941≈98 / 603115≈79 / 605255≈58);存量 9 只低价股补至 5000 元目标。已上膛明晨 09:41 首查 cron(判读口径含此预期,防误报)。

  2. ⚠️ gate 哑火缺口(4 周 verdict 出不来的根因):挑战者 registry backtest_run: null → 周报 te_annual/vs_backtest 恒 None;且 compute_tracking_error 按日交集,静态历史回测(截到 09-2X)与 09-29 起的 paper 日零交集 → TE 恒 None → 梯子/影子 gate 永远「周报待算」。修法=基线延伸覆盖影子进行日:挑战者同参回测(factor_topn×composite_quant12_szneul,TOP_N=200/REB=63/BAND=1.0)直接跑 VPS(截面已在 VPS,runner_backtest 落 VPS 库免 scp)+ registry 补 backtest_run(双机)+ 每月随截面增量重跑(与 10-04/11-30 节奏绑定)。NAS 同参 sanity 版由因子域先跑;VPS 生产跑归 infra+用户排期(待批)。

**补充两件(2026-09-28 午后,factor 域提出)** 1. **明日重建精确预期**:每只 target=100万/200=5000 元,整手门槛股价≤50 元 → 预期 **196/200 笔建仓**,4 只高价股 0 股跳过属正常(300972≈155 / 600941≈98 / 603115≈79 / 605255≈58);存量 9 只低价股补至 5000 元目标。已上膛明晨 09:41 首查 cron(判读口径含此预期,防误报)。 2. **⚠️ gate 哑火缺口(4 周 verdict 出不来的根因)**:挑战者 registry `backtest_run: null` → 周报 te_annual/vs_backtest 恒 None;且 compute_tracking_error 按日交集,静态历史回测(截到 09-2X)与 09-29 起的 paper 日零交集 → TE 恒 None → 梯子/影子 gate 永远「周报待算」。**修法=基线延伸覆盖影子进行日**:挑战者同参回测(factor_topn×composite_quant12_szneul,TOP_N=200/REB=63/BAND=1.0)直接跑 VPS(截面已在 VPS,runner_backtest 落 VPS 库免 scp)+ registry 补 backtest_run(双机)+ 每月随截面增量重跑(与 10-04/11-30 节奏绑定)。NAS 同参 sanity 版由因子域先跑;VPS 生产跑归 infra+用户排期(待批)。
Author
Owner

[a 案落档] 已知有界偏差——9 只种子遗产仓冻结(用户 2026-09-30 拍板 a 案:接受+落档,锚点不再移动)

事实链:09-28 首调仓在 5 万种子下仅建 9 只低价股(250 元/只);当日 A 方案重播种 100 万+重启 worker。09-29 09:30 全谱重建实测 187 笔全 buy(5000 档 ✓,fill_rate=1.0,0 sell),与预期 196 差的 9 笔恰=上述存量仓。

码证(重建语义,非漏单):sanguo_portfolio/strategies/factor_topn.py:181-183——buy_list 内已持有者 if stock in positions: continue 跳过不补仓;:161-164 只卖不在 buy_list 者 → 9 只既不卖也不补,维持 250 元仓。band_ratio 为 rank 缓冲带(>1 才护跌出 TopN 的持仓,1.0=硬切),与权重补仓无关。回测引擎同款语义(存量从不再平衡),差别仅初始条件:基线冷启动 196 只全按目标建,paper 带遗产进场。

偏差定量(A/B 判读已知口径):

  • 9 名各欠配 ~4750 元 ≈ 4.27 万 = 组合 4.3% 常驻现金超额 vs 基线;
  • TE 贡献 ≈ 0.8~1.5% 年化(有界、单边、恒定);对照影子 gate(决议 L:TE≤5%)→ 吃预算 ~20-30%;
  • fillRate(=1.0)与执行偏差(≤3%)两指标不受影响;
  • 遗产名单(解冻核对用):000677 / 002024 / 002175 / 002210 / 002310 / 002496 / 600187 / 600759 / 603359。

解冻口径:这 9 只不存在补仓事件——唯一解冻路径=跌出 Top200(或被过滤链剔出)后按 :161-164 卖出;最早发生窗=下次调仓 ≈2026-11-30(63 日栅格下一格)。若届时全部仍在 Top200,偏差原样延续至下一窗;判读 TE/四周 gate 时按上述常量口径解读。

锚点维持 2026-09-29,周报重计口径现状不变。

**[a 案落档] 已知有界偏差——9 只种子遗产仓冻结(用户 2026-09-30 拍板 a 案:接受+落档,锚点不再移动)** **事实链**:09-28 首调仓在 5 万种子下仅建 9 只低价股(250 元/只);当日 A 方案重播种 100 万+重启 worker。09-29 09:30 全谱重建实测 **187 笔全 buy**(5000 档 ✓,fill_rate=1.0,0 sell),与预期 196 差的 9 笔恰=上述存量仓。 **码证(重建语义,非漏单)**:`sanguo_portfolio/strategies/factor_topn.py:181-183`——buy_list 内已持有者 `if stock in positions: continue` 跳过不补仓;`:161-164` 只卖不在 buy_list 者 → 9 只既不卖也不补,维持 250 元仓。band_ratio 为 rank 缓冲带(>1 才护跌出 TopN 的持仓,1.0=硬切),与权重补仓无关。回测引擎同款语义(存量从不再平衡),差别仅初始条件:基线冷启动 196 只全按目标建,paper 带遗产进场。 **偏差定量(A/B 判读已知口径)**: - 9 名各欠配 ~4750 元 ≈ **4.27 万 = 组合 4.3% 常驻现金超额** vs 基线; - TE 贡献 ≈ **0.8~1.5% 年化**(有界、单边、恒定);对照影子 gate(决议 L:TE≤5%)→ 吃预算 ~20-30%; - fillRate(=1.0)与执行偏差(≤3%)两指标不受影响; - 遗产名单(解冻核对用):000677 / 002024 / 002175 / 002210 / 002310 / 002496 / 600187 / 600759 / 603359。 **解冻口径**:这 9 只**不存在补仓事件**——唯一解冻路径=跌出 Top200(或被过滤链剔出)后按 `:161-164` 卖出;最早发生窗=下次调仓 **≈2026-11-30**(63 日栅格下一格)。若届时全部仍在 Top200,偏差原样延续至下一窗;判读 TE/四周 gate 时按上述常量口径解读。 锚点维持 2026-09-29,周报重计口径现状不变。
Sign in to join this conversation.