Files
fidc-backtest-engine/docs/simulator-order-recovery-20260915.md
T

38 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 模拟器异常恢复与活动委托保留
2026-09-15。开发候选,未发布生产;不是实际GT/QMT撤改单功能。
## 已复现的问题
活动委托恢复先用 `mem::take` 取出整批订单。某只证券历史滑点证据缺失而返回错误后,当前订单及后续未处理订单被一起丢掉。原有两笔GTC模拟委托,一笔已累计成交100股,错误后队列直接为空。若前一笔已经在本次调用内部撮合,资金/持仓/手续费和行情消费也可能改变,但整个调用没有返回成功报告,重试将不一致。
## 事务边界
- 只保护一次模拟器调用中尚未成功返回的内部结果:资金、实际批次持仓、订单及累计成交、股票池/ETF顺延目标、执行游标/成交量消费、手续费状态和内部编号,以及临时运行上下文。
- 本次调用明确失败或回调解栈时恢复检查点,错误继续向调用方返回;不吞错、不自动重跑。调用方仍应修复输入后重试原请求或发出明确新请求,不能把失败请求当成已接受的新目标。
- 已成功返回的旧成交和报告、进入本次调用前已确认的手工事实不回滚。真实券商订单和回报不在该内存事务内,不能撤销或伪造实际GT/QMT结果。
- 正常业务拒绝仍是有效结果:报告成功返回时,其他成功成交与拒绝记录一同保留,不因为有Rejected状态就整批回退。
- 普通执行及ETF顺延消费共用边界,嵌套调用只保留一次检查点;临时日期、委托有效期、风险限制等在回调异常后不会泄漏到下一次调用。硬件断电、OOM以及用户自定义钩子的外部副作用不属于此证明。
## 开销控制
初版完整复制全部持仓。现普通单证券指令只保存可能变动的持仓与可被清理的零股记录,保留原位置顺序;完整组合、新类型指令和股票池阶段使用保守的完整检查点。未触及的持仓批次不复制,失败时才重新组装;无工作、无交易的调用不建检查点。
隔离未优化编译配置下,30只证券、每只20个初始批次、500次调用:初版保护样例约35.7—40.2ms,缩小持仓范围后约24.8—26.8ms;无保护对照11.5—22.1ms,首轮/并发噪声存在。保护有成本,不能称无性能回退,更不能据此宣称生产整段回测提速。四次对照的委托、成交和经济账本完全相同,正式Source/Runner性能准入仍保留。
## 验证
七项新增专项覆盖:日线/分钟、买/卖、第一或第二笔失败,已有部分成交;补齐数据后的原编号恢复与正常一次执行逐字段一致;此前成功调用不受后续失败影响;ETF两个顺延目标和进度完整保留;异常解栈;公开回调的临时上下文;局部检查点的位置顺序、零股和未复制批次;成功路径微基准的结果等价。
本机Core926、Trading625、Runner463/API129全量通过,原9/63/16项ignore不计。测试初次String/CompactString赋值错误及筛选名匹配0项已纠正,0项不当作通过;新增批次对照也改用实际更晚的执行时钟,不把未来报价当可立即成交。
未修改UI、在线账户、交易路由或任务;未做新的私有PG或真实券商验收。Source d5冻结保持,跨公司行为的实际券商委托调整、正式换股数据/范围、在线事实重建与真正Source/Runner联合验收仍未完成。Linux使用本轮新只读快照,不复用旧收据;没有release/tag或生产重启。
## Linux配套验收
功能提交 `695fdee4b8ba4b456313f06415c128a828b43f56` 已推送并核对;177引擎开发树已快进到此提交,Service并行5991e77保留。只读快照 `/srv/fidc/programs/runtime-snapshots/order-recovery-20260915-VjcwWa` 含994文件,独立同名build4CPU/12GiB、boris执行、1GiB线不改,manifest SHA `bcefde438955ff4eda51494e96913a23d5e628375d45f8f09a498020224a7bb6`
Linux Core926、Trading625、Runner/API594共2145项全过,原9/63/16项ignore单列;源码前后不变,结束时可用73738203136字节。测试已结束、scope已inactive,不重复本批或覆盖旧收据。新证据为 `docs/evidence/simulator-order-recovery-20260915/{local-tests,linux-tests,runtime}.json`
2026-09-15 01:38 CST逐服务比较,现有UI及五后端PID和实际二进制SHA与上一轮相同,Source d5且tracked clean。没有新release构建、tag、生产重启、配置写入或实际委托。独立Linux测试不替代正式Source/Runner、完整吞吐量或真实券商验收。