Commit Graph

135 Commits

Author SHA1 Message Date
claude_dev ca8673e031 refactor(strategy): P1-13 删除 TET Phase2 _ex 四副本——退役链收官 [vps]
CI/CD / test (push) Successful in 44s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 9s
前置已毕: 四实例(57/60/61/62) 10-01 16:08 停退(infra UPDATE stopped + supervisor
自收割), 10-02 08:05 morn 班 engines_expected/actual/no_restart 三绿 3/3,
vps_count_engines SHADOW=3 亲核 → 文件头自述的 Phase 3 删除授权生效。
本波: 删 4 文件 + live_strategy 工厂表 4 项 + strategies/__init__ 导出 +
runner_backtest choices/分发 4 支/_register_schedule isinstance 五处 +
前端标签表/回测下拉 4 选项 + 测试五回退(value_selection 空名单守卫 parametrize/
sizing 双列 parametrize/portfolio_live 工厂例/live_reconcile 3 标签/
routes_strategy 白名单示例换在册名)。provider get_*_ex strict 接口保留
(TET 契约); paper_accounts 四 stopped 行保留(手工重启得干净 ValueError)。
档随码走: joinquant SUMMARY 产出清单行闭环 + audit 处置档 §四.1 执行闭环
(工序两坑: 守卫列=strategies 非 name; 只 UPDATE 勿先 kill)。
本地 CI 同款 8 目录 2486 passed。

Co-Authored-By: Claude Code <reply@anthropic.com>
2026-10-02 08:34:34 +08:00
claude_dev 9389a7b9d5 feat(pipeline): 卡片状态转移矩阵(D3)——graveyard 终态禁复活对齐因子墓园决议,非法迁移 ValueError;矩阵禁复活后 COALESCE 清空语义无需实现 #84 [vps] [no-doc]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-02 08:21:54 +08:00
claude_dev 7a89632472 feat(pipeline): hypotheses 表+CRUD——C8 卡片落 pipeline_store(queued 起态/墓园回写/updated_at DESC),行出参=前端 Hypothesis 契约 [vps] [no-doc] 2026-10-01 23:35:17 +08:00
claude_dev d923a05dc8 fix(fee): 印花税全链对齐现行万5——10-01审计P1-9: 09-25勘误只修了ledger/ashare_engine/persistence三处, portfolio+影子链15点位漏网(shadow三默认+portfolio_paper+runner_backtest两兜底+live装配+8策略OrderCode close_tax), 影子对账曾自带一倍税差; 生产行显式值核对项已交infra [vps] [no-doc]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 09:28:14 +08:00
claude_dev 075052da54 fix(data): 10-01 二轮审计吸收——白名单补四类+三注册表钉死测试; data-monitor 两班入自监; 旧名注册脚本根治; manifest 补齐; spec 三勘正 [vps] [nas]
CI/CD / test (push) Successful in 38s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 12s
- P1-5 读写注册表脱节: EVENT_PANEL_TYPES 补 margin/sw_industry/dragon_tiger_seats/
  nb_daily(15→19, 09-12 四域注册采集时漏同步); 新增 test_whitelist_sync 钉死
  「采集 PER_DATE_TYPES 全族+gdhs == 白名单 == manifest domains ⊇」三同步义务;
  nb_hold 季频 asof 语义不进 exact-date 底座(钉死边界, 零消费方)
- P1-6 manifest 脱节: data_manifest.yaml 8 域→27 域(补事件面板族 19 类),
  消 data_gap_check 对真实供给误开缺口 issue 的潜伏面
- P1-10 监控自监: SCHTASKS +sanguo-data-monitor-morn/eve(17→19); 两 wrapper 本就
  恒 exit 0(设计预留), 非零=真崩, 零假红; 双班全死盲区待 strategy 域 health
  mtime 反盯(已转呈)
- docs_audit 旧名根治: register_schtasks.ps1 重写为现役 bs-daily/xt-daily
  (旧版重跑会复活死任务双开, 09-01 事故同源); bs_eod_wrapper/xt_eod_wrapper
  头注勘正
- docs_audit spec 三勘正: §16.1 白名单 14→19 类; §20.1「零改动自动可读」落空
  改「白名单一行即读+钉死测试」; §18.8 自称权威降级+ak-daily 07:35→19:00
  (VPS 实查)+xt 行名归一+ak-events 指针化; §20.10.2 硬计数指针化;
  §20.15.1/runbook 在岗 17→19
- docs_audit README §4 调度表整表换现役 10 任务; data-monitoring 计划加三行
  状态头注(初值退出权威位)

tests: data_platform+portfolio 1397 passed

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 09:19:29 +08:00
claude_dev 65921c5c25 refactor(strategy): value空名单守卫打磨——指标层/过滤清空分流日志+Ex副本parametrize同测+死代码清 [vps] [no-doc]
10-01 二次审计 P2-4/P2-5 处置:守卫日志两支分流(指标层空=铁定数据故障
vs 6条过滤后全被涨跌停/停牌滤除=状态数据可疑或极端行情待人工研判),
行为一致均跳过调仓保仓;正身+Ex 副本 parametrize 同测(test_sizing 同款
工法, 3 用例×2 类);step5 的 target_num==0 死代码双文件删(守卫早退后
不可达)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-01 07:51:06 +08:00
claude_dev 151f84b79e fix(strategy): value空名单守卫——过滤后归零判数据异常跳过调仓,不再隐式全清仓 [vps] [no-doc]
CI/CD / test (push) Failing after 35s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
09-01 案根修(10-09 截止项):monthly_adjustment 第 4 步「卖出不在 buy_list 的」
在 buy_list 被数据故障清空(候选池非空+6 条过滤/涨跌停过滤后归零)时会清光
全部持仓——第 5 步 target_num==0 守卫在卖完之后,拦不住。修=过滤去重后
buy_list 为空即判数据异常:跳过本轮调仓保持现仓+logger.error 落监控 ERROR
口径可见,下个调仓窗自愈。spec §94 宪法既有原则的实现(全清仓=人选的档 6
防御模式,不被空名单隐式触发)→[no-doc]。正身+Ex 副本(TET 同款复制纪律)
双文件同修;测试=守卫拦(零下单+ERROR 日志)+对照不拦(正常轮换照卖)两例,
tests/portfolio+trader 1028 passed。候选池空守卫(原有)与本守卫合成完整链。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-30 22:16:42 +08:00
claude_dev 3a938ecac8 fix(portfolio): 运行注册表种子缺失条目自动 merge——治挑战者双机漏登记缺口 [vps]
CI/CD / test (push) Successful in 40s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 8s
2026-09-27 实证: 挑战者 szneul_eq_reb63 登记 config 种子后, 双机运行副本
(ensure_runtime_registry 首触才拷贝)永不知晓——周报 job 按运行副本点名
stage+paper_account_id, 挑战者被跳过=影子 A/B 评测腿(周报/孵化梯/毕业 gate)全盲。
治本: 首触整拷语义不变, 另加 _merge_seed_entries——种子有而运行副本缺的
条目(strategies/factors 双主顾)每次 touch 自动补入, 同名条目运行态为准
(防部署回滚转移结果), 无缺条目不写盘(幂等)。
config 种子挑战者 paper_account_id null→63(周报点名非空才算, 与双机手动补行一致)。
runbook 注册表行同步更语义(档随码走)。a 方案(双机手动补行)已先行落地救急。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-27 18:35:43 +08:00
claude_dev 42ccfe0135 fix(docs): 归档断链善后——zcode验收L2晨报引用+infra全库扫8处旧路径补archive/reports前缀(survey/probes/portfolio_backtest三类出处注释; 归档件内部叙述碑文不动+runner_backtest输出参数行为不动) [nas] [no-doc]
CI/CD / test (push) Successful in 24s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 9s
2026-09-27 08:26:52 +08:00
claude_dev 23d4b6c231 feat(pipeline): 偏差日报补调度接线——20:50 APScheduler job 挂 ishortfall 日跑(审计终裁P1, runbook「随周报链跑」落地) [vps] [no-doc] 2026-09-27 07:58:20 +08:00
claude_dev 77e006e4d7 fix(portfolio): order_event_store 连接显式 close(M9 defer 清账) [vps]
CI/CD / test (push) Successful in 29s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 8s
with _connect(...) 只 commit 不 close——sqlite 连接靠 GC 回收(已知坑)。
最小修:新增 _conn contextmanager(内层 with conn 保留事务语义 commit/rollback,
finally 显式 close);append_events/replay_order_states 两处换用。
_connect 本身保留(幂等建表职责不变)。行为零变化,不新增测试;
全量 tests/portfolio 730 passed / 2 skipped 不变。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 20:12:10 +08:00
claude_dev cd1793c7c3 feat(pipeline): 决策价直取——jq执行委托行[策略:]bar锚+行情价到达fallback(M5竞价段兼治) [vps]
引擎「执行委托」行(live_engine.py 级,全策略覆盖)自带两个被掩埋的锚:
[策略:ts]=策略时钟=真决策 bar 时刻、行情价=派发时刻现价(plan.last_price)。

- order_log_parser:新增 _DISPATCH 行族(不产生 event,七态纯度零 schema 变更),
  pending 队列 (symbol,action,qty) 严格键相等+FIFO 挂到相邻 submit/norej-reject
  事件(decision_ts/dispatch_price 两键不在 _EVENT_COLS,append_events 自动忽略);
  墙钟≤提交 ts 才配对;日志尾未匹配静默丢弃。
- ishortfall_daily:决策价主源=[策略:] 分钟键直查 price_fn(治派发滞后被
  「提交前上一根 bar」代理掩埋,实测 delay=+157s 例两根 bar 差);到达价主源不变,
  缺当分钟 bar(竞价段 09:29/12:59,M5)回退行情价。行情价禁作决策价兜底
  (派发价当决策价会低估延迟成本——宁缺毋假,缺则照旧计 legs_no_anchor)。
  无 jq 行的腿(回测/无策略时钟)行为不变。_BASIS_NOTE 两行同步。
- spec §4.7 三价链第 2 条追加 2026-09-26 决策价直取注记(档随码走)。

测试:新增 8(parser 4+腿解析 4,RED→GREEN;含 FIFO 配对/qty 错配不互偷/
无 dispatch 旧行为回归护栏/run_day 端到端 207 vs 旧锚 23 实证)。
全量 tests/portfolio 730 passed / 2 skipped(基线 722+8)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 20:11:21 +08:00
claude_dev b5aa18cf8d fix(pipeline): 冒烟实证修——桥扁DataFrame行走+env全链配方+epoch退化守卫 [vps]
CI/CD / test (push) Successful in 26s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 8s
三案皆 VPS 真桥只读探针实证(09-26 冒烟):
- is_price_source_vps:minute_rows_to_map 形态归一(扁 DataFrame[index,close]
  实测形态为准,兼容遗留嵌套 dict);_minute_closes 改逐票调桥(扁形态无
  code 列,批量切片无法按票归属);_ensure_bridge_env 补 DEFAULT_DATA_
  PROVIDER=miniqmt + PYTHONPATH 全链(bridge/vnpy 根/vnpy_v4.4.0/vnpy_qmt_
  v0.3.3,SANGUO_VNPY_ROOT 可覆)——缺任一 xtdata import 即断。
- order_log_parser._t_raw_ts:epoch sanity floor=2000-01-01(生产实见
  t_raw=0 退化单 3565 条→1970 幽灵日;退化/负/垃圾回退行首时间戳),
  毫秒分支移入 floor 内评估。
- 测试 +3(扁/嵌套形态×2、epoch 退化回退×1)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 14:07:22 +08:00
claude_dev e5b523de3f fix(pipeline): 终审修复波——价格源缓存键(日,码)修+分钟键形态解析+probe 形态门+norej 跨文件防撞+prev_close 20 日窗+费用零价跳过 [vps]
CI/CD / test (push) Successful in 24s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 6s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 08:14:49 +08:00
claude_dev 866a5b7cd7 fix(data): 监控四修——数据领先期望=绿(research_report 假红案)/data 根条目误拼 data\/data 致三域恒黄(fixture 同镜像假绿一并修)/vintage 结论改挖 tables.holes 判定/sw_industry 带宽校准 5220 成分股粒度 [vps]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-26 07:49:31 +08:00
claude_dev a31a344559 feat(portfolio): 偏差日报 runner——日志→事件→分量→pipeline_store.is_daily+JSON(spec §4.7 第5条) [vps] 2026-09-26 06:00:09 +08:00
claude_dev 24b3009071 feat(portfolio): ishortfall 四分量纯函数——三价链+价格移动参考行+恒等式可加和(spec §4.7 第1/2条) [vps] 2026-09-26 05:45:03 +08:00
claude_dev c80cd88c3c feat(portfolio): 委托/状态/回执日志事件解析器+拒单两分法 classify_reject [vps] 2026-09-26 05:41:02 +08:00
claude_dev dba2ec392d feat(portfolio): 委托事件表 order_events——FIX 七态 append-only+重放推导(spec §4.7 第4条,老 backlog 委托入库) [vps] 2026-09-25 22:01:33 +08:00
claude_dev b3bc869a49 fix(portfolio): estimate_fee 补过户费万0.1双边+印花税勘误至现行万5(P3 偏差日报④费用口径) [vps] 2026-09-25 21:58:17 +08:00
claude_dev 5a938219e0 fix(portfolio): register 对已注册策略合并落 backtest_run/paper_account_id(原同名同假设静默 no-op,换挂基准节律被废) [vps]
CI/CD / test (push) Successful in 24s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 8s
upsert_strategy 同名同假设分支原直接 return entry,CLI register
--backtest-run/--paper-account-id 对已注册策略 rc=0 但字段丢弃
(今日生产实锤:四策略挂基准从未落库,runbook ≤4 周换挂基准节律被废)。
改为仅显式提供(None 不清原值)时合并覆写两字段;stage/backfilled/
composite_version/历史一律不动(stage 变更只走 transition 状态机)。
TDD:4 新测试(合并 run/合并 account/None 保原值/stage 不越权)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-25 17:07:23 +08:00
claude_dev a2fb7b4dbb fix(portfolio): 周报双修——回测基准认 equity 列(生产四文件全被 balance-only 拒)+daily_returns 同日多行取末次(多写者防覆写) [vps]
CI/CD / test (push) Successful in 22s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 8s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 14:49:10 +08:00
claude_dev dc2b2c9282 feat(portfolio): 研判留痕模块——七档静态表唯一源+裁决 JSONL(spec §4.7 P3 第一刀) [vps] 2026-09-25 10:09:21 +08:00
claude_dev 5f34e24317 fix(portfolio): run_daily_recompute 加 as_of 参数根治测试时间脆弱(评审 Important)+清 capital 死键与 unused import [vps] [no-doc]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 23:51:00 +08:00
claude_dev a1f7b34432 fix(portfolio): P2 终审 defer 六修——vs=0.0 误判/graduate 并发锁/口令 compare_digest/gitea base_url env 化/静默 except 加 log/测试 db 隔离+覆盖缺口补测 [vps] [no-doc]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 23:39:59 +08:00
claude_dev 7b6181caba fix(portfolio): P2 终审修正——注册表运行副本落 data/ 首触自举+CLI --stage 断链+周报 NULL/平盘修 [vps] [no-doc]
M1 运行副本自举:promote.sh 每次 push 都 rsync config/,运行期转移(毕业/退回/
延长)写 config/ 会被下次部署静默回滚——新增 ensure_runtime_file/
ensure_runtime_registry(config/ 种子→data/ 运行副本,首触拷贝,已存在幂等不覆盖),
CLI/weekly_report/routes_pipeline 默认全改 data/(strategy_registry/
strategy_events/factor_registry/registry_events 四件,env 名不变);
factor verdict 端点经同款 ensure 自举;graduate 证据模板路径同步。
M2 register --stage 直落初档(此前只在 transition 生效=断链)。
M4 load_actual_daily_returns 剔 NULL total_equity 行(不折算 0 毒化收益链)。
M5 daily_returns 平盘日照记 0.0(剔除会低估 TE)。
T5-①删 set_pipeline_paths 死注入(app.py 同步);T5-②ladder/todos 阈值只取
一次传 gate;T5-③梯子 te/fill/vs 任一 None→周报待算(去 or 0.0 硬凑);
T5-⑤reviewIssue 非整数 422;T5-⑦graduate 尾巴(事件/模板/gitea)失败不 500,
200 带 warning 提示人工补。
测试:种子自举幂等/CLI --stage/NULL 剔行/平盘 0.0/verdict 首触自举端到端;
tests/portfolio 661 绿+tests/factor 396 绿。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 21:57:56 +08:00
claude_dev 7c255f5e6d feat(api): /pipeline 五端点接真——梯子/阈值配置/毕业口令/驾驶舱聚合/因子评审 [vps] [no-doc]
spec §4.5 决议 L 六件之 4+驾驶舱接真:ladder 拼前端形状;gate-config 两级阈值
+审计;graduate=口令+影子 gate 硬闸+分配落档+J1 issue;todos 聚合本机工件;
factor verdict 三按钮;APScheduler 20:45 周报 job(双机各跑各的,B')。
附:pipeline_store.set_threshold 首改审计 old_value 落代码默认(原 None,
Task5 验收测试=配置页审计可读被覆盖前生效值);router 级依赖取
sanguo_api.routes.verify_token(Authorization 头版,与 routes_factor 同款)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 21:10:05 +08:00
claude_dev 727dfb0f79 feat(portfolio): 周报三指标——TE 年化/fillRate 拒单计分母/vsBacktest 周差+幂等重算 [vps] [no-doc]
spec §4.5 决议 L 六件之 3:读本机主库三表(paper_daily_balance/paper_trades/
backtest_stats);滚动 4 周 ISO 周行 upsert;CLI+run_daily_recompute 双入口。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 20:53:10 +08:00
claude_dev d137abf7e1 feat(portfolio): 每机 pipeline 库——gate 运行值+审计行+周报幂等落库 [vps] [no-doc]
spec §4.5 决议 L 六件之 2/3:gate_config/gate_config_audit/strategy_weekly 三表;
env SANGUO_PIPELINE_DB 覆盖路径;B' 双机各读各的本地库零跨机推送。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 20:53:10 +08:00
claude_dev d73bbe6841 feat(portfolio): 晋级闸门纯函数——默认阈值+回测/影子两套判定+DB覆盖汇合点 [vps] [no-doc]
spec §4.5 决议 L 六件之 2:一处定义三处调用;frozen dataclass;压线=过;
thresholds_from_overrides 支撑「代码默认+每机运行值」两级阈值。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 20:53:10 +08:00
claude_dev 3cedcf7d53 feat(portfolio): 策略孵化梯注册表——五段状态机+血统硬闸+J1 事件+存量补录种子 [vps] [no-doc]
spec §4.5 决议 L 六件之 1/6:克隆 version_registry 范式(状态机/原子写/转移即
事件/issue 模板落盘);→retired 死因必填、→paper/live gate 快照必带、→live 另带
资金分配快照(决议 B);szneul_reb63 补录种子(gate 快照留空)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 20:53:10 +08:00
claude_dev 46cfe351d1 [nas] feat(factor): szneul_reb63 影子盘件①②——daily_section 截面增量生产器+live factor_topn 接线
CI/CD / test (push) Successful in 24s
CI/CD / nas-deploy (push) Successful in 14s
CI/CD / nas-verify (push) Successful in 7s
件② sanguo_factor/daily_section.py: 收盘后短窗批(220 历史日覆盖 120 交易
日预热)临时导出→幂等 merge 主截面 parquet(同日替换/新日追加/原子写)→
sanity(非空数+进出股票);短窗批顺带落 IC 日度记录=未来衰减告警原料。件①
live_strategy 工厂加 factor_topn,五 env 可覆盖,默认=生产配置 szneul_reb63
(szneul/top200/reb63/band1.0)。件③④(VPS schtask+instance)待拍板。顺带修
两存量测试卫生:channel_test 探针用例注入钟(盘后时段必红的时间条件缺陷,
09-01 盘后防护遗留);composite routes fixture 幂等重挂 _REGISTRY(clear 后
不还原,factor+api 组合首跑暴露建档 400)。设计档 §7.2 同步。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-22 22:47:06 +08:00
claude_dev c29f784e52 feat(factor): 改造③size中性化变体+④分数加权rank^γ——③register_szneu_variants生产冠军挂composite_quant12_v2a_szneu(cs_neutralize((v2a),close*share_capital),残差算子线性⇒包裹式≡各源中性化再加权,引擎端到端测试逐点实证;端到端测试显式register_fast_ops钉生产算子语义——fast下alpha16小截面合成数据每日NaN部分股,5股有效对<3会假绿,20股修复)④FactorTopNConfig.weight_gamma目标市值∝(N+1−rank)^γ缺省0退化等权,透传四处+json测试扩六参 [vps]
CI/CD / test (push) Successful in 38s
CI/CD / nas-deploy (push) Successful in 0s
CI/CD / nas-verify (push) Successful in 12s
2026-09-14 23:46:45 +08:00
claude_dev 22bacdb764 feat(portfolio): factor_topn 调仓缓冲带 band_ratio(改造①)——持仓截面 rank≤top_n×band_ratio 不卖,跌出带才让位,砍边缘股反复进出换手;缺省1.0=原硬切逐字节等价(回归锚);透传四处=argparse+_build_strategy+run_backtest_json+结果回显(坑1纪律,json测试扩五参);TDD三案例(带内留/带外卖/剔宇宙照卖)+默认退化 [vps]
CI/CD / test (push) Successful in 32s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 7s
2026-09-14 23:28:18 +08:00
claude_dev 76523f0484 fix(portfolio): --slippage 三态语义 None/0/正值——旧 default=0.0+if args.slippage: 把「想关滑点」静默落引擎默认24.6bps(_BASE_MARKET_SLIPPAGE,第六跑base名义零滑点实为24.6bps,slip1/slip2显式10/20bps反而更便宜,成本敏感性表观反向总根因);改 None=保持引擎默认/显式0=真零(PriceRelated ratio=0阻断默认回退)/正值=显式比率,json路径同步None透传,回归测试钉三态 [vps]
CI/CD / test (push) Successful in 34s
CI/CD / nas-deploy (push) Successful in 33s
CI/CD / nas-verify (push) Successful in 22s
2026-09-13 21:58:32 +08:00
claude_dev e2e6fe2e10 fix(portfolio): _extract_trades 覆盖 bullet_trade Trade 真实字段——Trade 类是 security/time/tax/order_id 非 code/date,旧 keys 全没对上致 JSON trades 只剩 amount/price/commission 三字段,第六跑判定时换手率/行业归因缺标的与日期;补 keys+回归测试(第六跑在跑不受益,本修复下批起生效,当批换手按买卖对称近似) [vps]
CI/CD / test (push) Successful in 37s
CI/CD / nas-deploy (push) Successful in 14s
CI/CD / nas-verify (push) Successful in 19s
2026-09-13 08:16:19 +08:00
claude_dev 47ab3257c2 fix(portfolio): 滑点语义修正 FixedSlippage→PriceRelatedSlippage——--slippage 声明比率(万10=0.001)但实挂 FixedSlippage=每股固定元数(0.002→±0.001元/股≈零成本),09-13 第五跑 slip2 组(滑点0.2%)比零滑点 base 同日净值反高12.4%第一层实锤;换聚宽语义比率滑点 price×(1±ratio/2),回归测试钉死不回潮+验证真挂进 settings slippage_map [vps]
CI/CD / test (push) Successful in 0s
CI/CD / nas-deploy (push) Successful in 0s
CI/CD / nas-verify (push) Successful in 27s
2026-09-13 08:09:16 +08:00
claude_dev 9f7c56e243 fix(provider): fq别名none改映射pre——use_real_price=True体系撮合基准价走fq=pre(engine.py:1877),none→raw造成「前复权价买入多拿股数×不复权价计市值」口径撕裂,首日equity凭空+15%(09-12 NAS平安银行真值22.81 vs撮合18.39前复权实锤,000605复权因子≈1险些蒙混);none/None/空→pre与撮合同体系自洽,volume/paused字段不受价格复权影响同映射无害
CI/CD / test (push) Failing after 14s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-09-12 12:15:50 +08:00
claude_dev d75691e64d fix(portfolio): run_backtest_json透传factor_topn四参——矩阵三跑全空仓总根因:CLI --json走本函数手工拼Namespace漏factor_dir(缺省空串→策略「未配置」直接空仓16秒假快),进程内诊断路径完整掩盖此bug;main --json分支params与Namespace双侧补齐+mock截获Namespace回归测试,全量1207绿 [vps]
CI/CD / test (push) Successful in 31s
CI/CD / nas-deploy (push) Successful in 34s
CI/CD / nas-verify (push) Successful in 9s
2026-09-12 08:42:45 +08:00
claude_dev 63676fbb4b fix(provider): fq聚宽语义别名归一——none/空/None→raw,hfq→qfq;BulletTrade引擎日终估值传fq='none'被FQ_VALUES拒收致每日百次取价失败持仓市值全挂(09-12 NAS梯度实测),两处_v_fq统一走_FQ_ALIASES,回归测试+1全量1206绿 [vps]
CI/CD / test (push) Successful in 35s
CI/CD / nas-deploy (push) Successful in 4s
CI/CD / nas-verify (push) Successful in 17s
2026-09-12 08:35:49 +08:00
claude_dev 20ea77966d fix(portfolio): factor_topn两处拒单/基准修复——①截面vt_symbol转聚宽后缀(SSE→XSHG/SZSE→XSHE,BulletTrade撮合按聚宽格式查行情,不转则下单全拒空仓跑完,09-12 NAS实测1262日0交易)②PriceQueryParams起止日放宽Union[str,datetime](pydantic v2类型校验先于field_validator,Optional[str]直接拒引擎传的Timestamp——基准曲线恒空的根因,2026-08-13 VPS冒烟同族问题),回归测试+2全量1205绿 [vps]
CI/CD / test (push) Successful in 28s
CI/CD / nas-deploy (push) Successful in 2s
CI/CD / nas-verify (push) Successful in 15s
2026-09-12 08:05:25 +08:00
claude_dev 84dab32ac4 feat(portfolio): 因子截面TopN选股策略(factor ③ IC→净值关键一跃)——batch_eval加factor_values_out截面导出(宽表parquet与指标同窗同源,截面算一次矩阵复用)+factor_topn策略(截面严格早于调仓日防前视/交易日计数器5-10-21档调仓/剔科创北交920留创业板实盘宇宙/TopN等权)+runner挂接CLI四参数,15新测试全量1203绿 [vps]
CI/CD / test (push) Successful in 25s
CI/CD / nas-deploy (push) Successful in 35s
CI/CD / nas-verify (push) Successful in 17s
2026-09-11 23:24:14 +08:00
claude_dev 90b37ce27f feat(live): 成交回报回执日志①——09-04守恒缺口观测件 [vps]——根因件:002633/002836缺口复盘发现引擎会话当日成交视图行缺+时间字段中途退化None,QMT行dump全打查询时刻即铁证,事后无从对「哪笔什么时候以什么形态被看到」;用户钦点观测机制「再出现时根因可查」,dev契约:任何处理/匹配/去重之前打[trade-receipt] tid/order/acc/sym/vol/px/t_raw/recv八字段(②解析此格式,拼写冻结);实现=with_trade_receipt包装QmtBroker.get_trades(bullet_trade轮询制无成交推送回调,_Callback仅桥接断连,broker.get_trades是柜台行进本进程唯一咽喉,引擎同步/a窄修/b宽修全经它),与with_connect_retry同款实例级包装源码零改动;铁律=t_raw原样照记None也记/日志永不抛逐行try-except包死/get_trades原异常照抛行为不变;量控=观测层变化检测非处理层去组:同tid签名(t_raw+量+价+单号)不变不重打,退化即重打(捕获09-04形态),行照常流向消费方;③结论免改:vt_tradeid三条归因路径已承载柜台成交号(即时=引擎trades键/a窄修=trade_id/b宽修=eod:前缀),既有测试已钉(test_live_reconcile.py:123,206+test_live_instance_ledger.py:236),②按tid比回执↔live_trades即闭环;TDD 7新测先红后绿(caplog须set_level(INFO)坑)+598全绿
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 46s
CI/CD / nas-verify (push) Successful in 9s
2026-09-06 11:14:29 +08:00
claude_dev c728f2368c feat(data): hot_rank 挂载+wrapper 时间守卫 [vps]——墙测量5轮收官用户拍板方案A:emappdata 夜间开窗(22:28 实测 OK,晨午4轮全 FAIL),19:30 档失败零连带(单 unit 失败不触断路器 rc 仍 0,不写不标次夜自愈),首夜起 gap_check 即免费持续测量;三处同步=wrapper --types+PANEL_TYPES+EVENT_PANEL_TYPES(15类),零文件=零告警首日成功即成基线;时间守卫=param -Force+非 19:00-23:59 拒绝执行留痕 guard.log(治盘前手动误跑两犯:09-02 08:08/09-04 08:00,盘前拉当日=昨日态错标+marker 锁死当晚真数据);TDD 2 测翻新(白名单拒→放行+注册断言)先红后绿+806 全绿;VPS Parse 预检过+双脚本已 scp 生效位+wall_probe.py 已删 [vps]
CI/CD / test (push) Successful in 0s
CI/CD / nas-deploy (push) Successful in 5m3s
CI/CD / nas-verify (push) Successful in 11s
2026-09-04 18:46:46 +08:00
claude_dev 029ea34aec feat(live): 引擎启动期行情腿自检quote_preflight——09-03行情事故定位件:momentum 9:30六笔卖单fail-closed忽略+18/22探针零单,引擎进程内取价失败但独立探针.SH格式全通(dev反证,我先前的「服务死」误判收回:get_full_tick须.SH后缀+subscribe须xtdata.run(),两个坑全踩);需进程内直接证据区分「引擎会话坏vs服务坏」:boot时broker交易腿连接后一笔get_full_tick(510500.SH)留痕OK/EMPTY/EXC,永不抛不阻断;今晚23:05轮换后新进程即出证据,明早9:30三灯(momentum重试/small_cap调仓/9:35探针)前置诊断;3新测+591绿 [vps]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 14s
2026-09-03 13:51:26 +08:00
claude_dev 37d8f85d21 feat(strategy): 情绪温度计四指标——涨停池三件套首轮Python化,消费provider.get_limit_pool出口(get_limit_pool/get_event_panel双端8/8已验);四口径契约与数据session 09-03对齐并逐条钉进测试:①炸板率=zbgc/(zt+zbgc)按行数,回封票(zt内break_count>0)留分母勿扣②dtgc空=0跌停合法值③history按trade_date对齐,某池某日无行按0计不丢日④连板高度=consecutive_boards之max(to_numeric吸字符串)+行业集中度用industry现成列(空串/NaN剔除);三接口=compute纯函数+daily单日快照(date=None最新落盘日)+history区间校准表;只算不判,阈值待23日真实数据校准后另定;10新测+588全绿 [vps]
CI/CD / test (push) Successful in 21s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 14s
2026-09-03 08:58:49 +08:00
claude_dev 4966d30a11 feat(provider): A档截面数据使用层出口——泛型底座+涨停池门面双层接口
CI/CD / test (push) Failing after 3s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
09-02任务①落地。§15采集的14类panel数据此前零读取出口,策略/因子session
想用只能手搓parquet路径;经业界对照(dsa get_limit_up_pool/tushare
limit_list_d U/D/Z参数化/聚宽per-domain/OpenBB TET)定稿「泛型底座+域
语义门面」:

①get_event_panel(event_type,date/start+end,trading_days_only=True):
保真底座,白名单14类统一通道(=采集注册表口径,hot_rank未挂载不入列),
返回akshare原样中文列+trade_date(文件名合成);缺文件=合法缺失→空df;
trading_days_only默认用get_trade_days滤非交易日——治快照族「周中法定
假日文件=上一交易日态复制品」的区间双计数(采集层只按周一~五落盘,
周六根本无文件,风险面=周中假日);=False按周一~五枚举(=采集口径)

②get_limit_pool(kind=zt|zbgc|dtgc,...):涨停池门面(温度计/炸板率/行业
集中度消费契约),kind三合一←tushare limit_list_d;英文标准列
code/consecutive_boards/seal_amount/break_count/industry…(键名对齐dsa);
映射表基于VPS真实parquet实测(dtgc实测含动态市盈率/封单资金/板上成交额/
连续跌停/开板次数,与文档口径有差);akshare改中文列名时本层吸收漂移,
有行缺源列→DataSchemaError fail-fast;真空日(dtgc 0跌停空文件无列)
→仍返标准列空表schema稳定

③实现=TET Fetcher(fetchers/event_panel.py双Fetcher同文件,price.py先例),
FETCHERS注册表+event_panel/limit_pool两键(未来MCP出口零成本);base.py
新增_DateRangeParams跨字段校验(date/start+end互斥二选一);LocalUnified
Provider(回测)与SanguoMiniQmtProvider(实盘,委托self._unified)双侧同款
——方法面钉死测试强制无缺口,双侧同schema支持副本对照;miniQMT/QMT/
PTrade均无此类接口(业界惯例=外部源补),实盘同读本地文件

测试:21新测试(白名单fail-fast/日期语义/保真读/假日滤/门面schema/
列漂移fail-fast/真空日空表/注册表)+全量793绿;活文档§16+§15指引行 [vps]
2026-09-02 10:43:11 +08:00
claude_dev 8c6a3f90d0 fix(strategy): channel_test盘外轮换改锚固定9:35——09-02 dev巡检实锤5d0a0bf副作用:随启随验「盘外不注册」×运维规则「轮换放23:05后」=每次boot都盘外→永不注册→测试通道停摆(live_18/22零任务,调度恢复又因存档模块路径vs runtime副本错配恒失败,守卫再拦回退注册,三重叠加清空);考古澄清:四固定任务自08-20 147a49d随启随验上线即有意退出live(probe_all一轮覆盖rotate/T1/swap),非本次回归;修=盘外boot改锚固定9:35(历史主调仓时刻,盘中由构造保证),盘中boot仍now+90s快验不变,执行侧守卫保留为末道防线;原「盘外不注册」测试按新规格改写为断言注册9:35;25/25+557绿 [vps]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 7s
2026-09-02 10:25:36 +08:00
claude_dev 7b7667e0ac fix(live): EOD对账重启兜底归因——remark指纹重建本实例订单集+实例唯一label注入;09-01 002646终局实锤:引擎订单注册表=进程内存态(轮换重启即失,runtime持久化只恢复策略/账本),新进程18:49 EOD报「本实例=0」→无守恒缺口→记日,当日15:05后才补全的迟到成交永久失联(get_trades内部本就是query_stock_trades,重试环与直查同源都不缺接口,缺的是归因锚);修=①runner_live经live_config注入strategy_name=live_{id},订单remark(bt:live_17:hash)实例唯一(此前六实例适配文件同名,label全为live_strateg不可分;仅对注入后新单生效)②eod_reconcile补_own_orders_remarked:broker.get_orders(QMT当日订单,带remark)按前缀筛本实例→shim补进own_by_broker(setdefault,engine自己的单优先),状态复用broker._map_order_status,is_buy缺失弃用(宁漏勿错);_PENDING不重建(EOD兜底已覆盖当日全量,省一条风险面);+4重启形态测试+1注入缝钉子,557绿 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 5s
CI/CD / nas-verify (push) Successful in 10s
2026-09-01 19:18:22 +08:00
claude_dev 5d0a0bf6d3 fix(strategy): channel_test探针盘后下单双守卫——09-01 18:48轮换重启实锤:随启随验run_daily锚定now+90s=18:50,探针16笔真单盘后全挂柜台(~107万买单冻结排队次日集合竞价);且run_daily为每日重复锚定,08-30周日13:07重启即埋下「每天13:09盘后风格漂移」隐患,jq_strategy调度恢复失败回退注册当前时刻是第三路径;修=①注册侧:锚点落非交易时段(工作日09:25-11:35/12:55-15:05)不注册+大声告警②执行侧:probe_all首行守卫,盘外触发整轮跳过零下单(兜调度错锚/回退路径);墙钟抽_now()可注入,测试autouse钉盘中防CI时段漂移;+3守卫测试+11边界参数化;25/25 [vps]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Failing after 12m28s
2026-09-01 19:04:40 +08:00