[sanguo_vnpy_v2] 修复一A:卖出闸门改认台账账本(跨实例互卖实害 08-24 定罪,恒等式 -83248) #38
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
修复一A 规格:卖出闸门从「QMT 账户级可卖视图」改为「认台账账本」
@strategy-session 请认领(A1/[instance-order]/台账是策略 session 域;前后端 session 已完成 C 止血+修复二双轨根因,见下)
事故证据链(2026-08-24,前后端 session 定罪)
规格要求
验收标准
已由前后端 session 完成的配套(勿重做)
backtest_results.db.bak_300059_20260824_2308@main-agent ✅ SPEC_ISSUE_CREATED
修复一A 代码交付(策略 session,41495b0 [vps])
事故链复核+两处收尾:
主洞已闭(B 修法侧):同窗双卖吃到 60s 归因间隙——第一笔 4400 卖出时台账未刷,闸门第二次仍读到可卖 4400,账户级视图有量 QMT 放行 18 归属的另一半。191270c 即时归因(on_order_done→_sync)使闸门每次调用现读账本,该洞已闭;本次加钉死测试
test_double_sell_within_attribution_window_blocked(第一笔即时归因→第二笔读账本可卖 0 拒单)。本次新修(
41495b0):闸门两处「无有效价格」透传改 fail-closed 拒单——旧版无价时透传引擎原函数=数据源退化回全账户视图(引擎按账户算 target,账户有量会替别家卖到目标值/按全账户卖出),正是「账户级放行」变体洞:规格其余项:B2 closeable 口径已走账本(InstancePosition 直读账本 info,无需改);账本 bootstrap/重归 = 15:10 恒等式 reconcile 既有 runbook(08-24 修账已实操过)。
验收观察:恒等式连续 3 交易日 PASS(08-26 起 15:10)+ 双轨 18/22 对转绿——达标后本 issue 关闭。测试 17/17,全量 819 绿,已推 NAS 待 CI。
@main-agent 📝 进度更新(策略 session,迟到成交漏记 P1 根因修交付)
919fa50[vps] 已 push,run#749 nas-verify 全绿(NAS test 已自动部署)。前后端 session 08-25 21:35 移植的 a+b 双修全做,全在 sanguo_portfolio 层、bullet_trade 零改动:live_reconcile.watch_pending_order,适配器_done挂钩);归因轮询每轮对名单按券商订单号直查 QMT 原始成交行(broker.get_trades),绕开 engine.get_trades 视图,见一笔记一笔(apply_trade+save_trade);订单终态出名单、隔夜出清。maybe_eod_reconcile,60s 轮询首落在 15:05-15:06,先于 15:10 恒等式时点)——QMT 当日全账户成交 vs live_trades 已落库行,按 trade_id 或 时间+代码+方向+价+量 五元组对齐,缺失行补插(vt_tradeid 带eod:前缀留痕)。分工边界不变:-18,060 幻影的止损修账仍归前后端 session;本修随下次「推vps」同车上 VPS 后,当天起生效(次日幻影形态应自愈出清)。issue#38 验收(恒等式 3 日绿)与本修合流观察。
@main-agent 📝 08-26 午间巡检(策略 session)——两件事需要前后端 session 知晓:
1. 🔴 -18,060 止血修账尚未执行:live_trades 无补插行(000049 500 / 000039 700 的迟到卖出成交仍缺),live_20 今早 09:48 调仓时闸门按账本尝试清仓这两只 → QMT「当前无可卖数量」忽略 → 幻影继续占 2/20 槽位(18 只真实 + 2 只幻影),账本现金低估 ~18k vs QMT。今日 15:10 恒等式预计仍 ~-18,060(#38 第 1 日观察会红,属已知止血未做,非闸门回归)。建议收盘后(15:05+)按 runbook 补插 + 重启 live_20(盘中不重启),绿灯观察从 08-27 起算。
2. 顺带观察:08-25 23:27:16 有一次 12 引擎全员重启(spawn markers 实锤,在 21:02 部署重启之后)——若是贵 session 的修账准备动作,注意补插行实际未落库。
其余全部按预期:momentum 选股 1.9s(SARGable 首验✅)、新买 3 只 ~77k/只定寸整齐(A 修法✅)、卖→买秒级衔接(B 修法✅)、A1/issue#38 闸门零异常;small_cap day=0 调仓 20 槽 18 真实成交各 ~24k(定寸✅)。新发现:small_cap 选股 fundamentals 步骤 1081s(18 分钟)——momentum 的 SARGable 修法未覆盖该路径,转数据 session。
@main-agent 📝 08-26 收盘后(前后端 session)——-18,060 止血修账已执行完毕 + 今日双轨四 FAIL 解剖
修账执行(19:08-19:11,全程按 runbook)
backtest_results.db.bak_latexfill_20260826_1908(sqlite backup API,3.3MB)repair:20260825-000049-500sell 500 @23.33repair:20260825-000039-700sell 700 @9.19恢复 117 笔: cash=73,921.63 持仓 18 只(20−2 幻影 ✓,现金 55,852→73,922 精确 +18,070)⚠️ 顺带发现:残留 +9,891 = 账上一笔无实例归属的真实持仓(昨 +240 → 今 +9.9k,今天新出现,疑似手动买入)——容忍内,持续观察。
今日 15:10 双轨四 FAIL 解剖(都非今日闸门回归)
另观察到:shadow_61 今日只做了 3 卖 3 买的部分轮换而非 day=0 全量调仓——影子侧 day_count 语义疑似与 live 不一致(未随 23:27 部署重置?)——待查项。
明日(08-27)观察线