Files
sanguo_vnpy_v2/tests
claude_dev 191270c884
CI/CD / test (push) Failing after 6s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
fix(trader): 卖后买现金窗口B修法——下单返回即时归因入账,台账cash不再等60s轮询
2026-08-25 事故:small_cap同轮「全卖19只→马上全买20只」在两轮归因轮询间隙
读台账现金,卖出回款不可见→20笔买入全部目标0、全天空仓;momentum同型撞运
只入账首笔79k/6=13.2k缩水44%仓;value无卖后买序列满额(反证)。QMT无责
(0.5s filled/券商现金即时/下单线程同步见filled),gap=runner_live.py归因
poller 60s一轮才调ledger.apply_trade(唯一cash更新入口,DB落库时间戳恰差60s
铁证)。

修法(B,治本现金新鲜度):
- LiveInstanceLedger.on_order_done钩子+notify_order_done(未注入/抛错静默,
  绝不阻断下单;漏单由轮询兜底);apply_trade幂等判定整体移入锁内——钩子
  (策略线程)与轮询(poller线程)并发同步同一笔成交时恰好一笔入账,防双计
- live_strategy._instance_order_wrappers:所有真实委托(bt_order/透传)返回后
  _done()触发即时归因;决策层不下单的路径不触发
- runner_live:engine装配后注入on_order_done=_sync_instance_trades闭包;
  60s轮询保留兜底(部分成交后续/异步路径)

测试+8:钩子三态(nop/触发/吞异常)+8线程同trade_id并发恰入账一次(竞态回归)
+wrapper卖出/买入/透传触发+不下单不触发;portfolio 459绿+api 170绿

[vps]
2026-08-25 19:47:13 +08:00
..