
前言国内期货实盘程序运行中需要随时知道还有哪些挂单、刚成交了几手、净持仓是多少。新手常每来一个 tick 就get_order()全表扫描、打印全部成交日志爆炸且 CPU 高。高效查询不是“少查”而是在正确的时机、查正确的对象。天勤在每次wait_update()后更新委托、成交、持仓对象你应用is_changing(对象, 字段)过滤本帧。本文说明期货实盘场景下委托/成交/持仓的分工并解释get_trade全量不宜每帧调用官方建议优先trade_records。一、三类数据在期货里各回答什么问题读什么单还在不在、剩几手get_order(order_id)的 status、volume_left某单成交明细该 order 的trade_records当日全部成交get_trade()降频当前净持仓get_position(symbol)的 pos / pos_long / pos_short持仓是交易所认可结果策略自建变量只能作缓存必须以get_position为准对账。二、持仓只在仓位字段变时处理posapi.get_position(SHFE.rb2510)whileTrue:api.wait_update()ifapi.is_changing(pos,pos_long)orapi.is_changing(pos,pos_short):reconcile(pos)reconcile里打日志、改风控状态避免每个 tick 打印。三、在途单status 变再汇总ordersapi.get_order()whileTrue:api.wait_update()ifany(api.is_changing(o,status)foroinorders.values()):alive[oforoinorders.values()ifo.statusALIVE]log_alive(alive)ALIVE含义以 SDK 文档为准表示仍有效挂单。首次get_order()拿引用后续依赖 wait_update 更新内容。四、避免刚下单就断言 status文档写明刚下单后可能尚未收到回单order 字段为空。应继续wait_update不要立刻因空值重复insert_order。五、与 K 线策略节奏配合K 线策略主触发仍是is_changing(kl.iloc[-1], datetime)委托/持仓查询挂在仓位变化或 bar 收盘后即可不必与每个 last_price 绑定。六、断线恢复后恢复连接后做一次get_position与get_order快照与持久化状态对照若使用状态持久化方案。总结期货实盘高效查询对象引用 is_changing字段过滤 优先trade_records 全量get_trade仅收盘或降频。天勤截面已在 wait_update 合并无需模仿 CTP 高频 ReqQry。把查询节奏与策略频率分钟 bar / tick对齐日志与 CPU 会可控。FAQ1get_order 每帧新建不必用引用is_changing。2多合约持仓每 symbol 一个 position。3多账户get_order(account…) 指定账户。4TargetPosTask 单同样 get_order 查看在途。风险提示本文讨论查询性能不构成投资建议。