🚀 AI 一键生成 qmt 策略代码

为什么 QMT 的 get_trade_detail_data 查不到手机 APP 下单的交易?

qmt | 发布时间: 2026/5/21
以下内容由 EasyQuant 生成。

问题描述

get_trade_detail_data查询交易为什么不能查询手机APP下单的交易?

使用 get_trade_detail_data(C.accountid, 'CREDIT', 'deal')查询交易,没有查询到手机 APP 操作下单卖出的交易单,在 QMT 中程序触发的则可以查询出来?

解决方案

在 QMT 量化平台中,使用 get_trade_detail_data 函数查询交易明细时,默认情况下可能无法获取到通过手机 APP、PC 独立交易软件等“外部终端”下的订单。这主要是由 QMT 的底层数据同步机制决定的。

为什么查不到手机 APP 的订单?

  1. 本地缓存机制get_trade_detail_data 函数是从 QMT 客户端本地的内存/数据库中读取交易数据的,而不是每次调用都直接向券商柜台发起实时查询。QMT 程序自己触发的订单会直接记录在本地,因此可以立即查到。
  2. 外部交易未同步:手机 APP 下单是直接发送给券商柜台的。如果 QMT 客户端没有开启“同步外部交易”的功能,或者没有接收到柜台的订单状态推送,本地数据库就不会有这笔交易的记录。
  3. 主推订阅缺失:如果没有在策略初始化时正确订阅该账号的交易主推,QMT 也无法实时获取柜台的外部成交回报。

解决办法

要让 QMT 能够查询到手机 APP 的下单记录,请按照以下步骤进行排查和设置:

1. 在 QMT 终端开启“同步外部交易”

这是最常见的原因。您需要检查 QMT 客户端的系统设置:

  • 打开 QMT 终端,进入 系统设置 -> 交易设置
  • 找到 外部交易同步 或类似的选项(不同券商版本的 QMT 界面可能略有差异),勾选允许同步外部终端的委托和成交数据。
  • 开启后,QMT 会定期或通过主推接收柜台的其他终端交易数据。

2. 在策略中正确订阅账号主推

确保在策略的 init 函数中调用了 set_account,这样 QMT 才会订阅该账号的实时交易回报(包括外部交易的回报)。

def init(ContextInfo):
    # 绑定并订阅资金账号的交易主推
    ContextInfo.set_account(ContextInfo.accountid)

3. 检查函数调用参数

您使用的调用方式是 get_trade_detail_data(C.accountid, 'CREDIT', 'deal'),这是正确的(未传入 strategyName)。
注意:如果传入了第四个参数 strategyName,函数会严格过滤出该策略名称下的订单。手机 APP 下单没有策略名称,如果带了该参数则绝对查不到。您目前没有带此参数,做法是正确的。

4. 手动刷新客户端数据

如果在盘中手机 APP 下了单,且 QMT 客户端由于网络原因没有收到推送,您可以尝试在 QMT 交易界面的“委托”或“成交”列表中点击刷新按钮,强制从柜台拉取最新数据。拉取到本地后,代码中再次调用 get_trade_detail_data 即可查到。

总结

QMT 的 get_trade_detail_data 依赖于本地客户端的数据完整性。只要确保 QMT 客户端开启了外部交易同步,并在代码中通过 set_account 订阅了账号,手机 APP 的交易记录同样可以通过该函数查询到。