🚀 AI 一键生成 qmt 策略代码
立即体验

QMT 中 get_value_by_order_id 查询多笔成交时返回列表吗?

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

问题描述

get_value_by_order_id的strDataType是deal 时, 返回什么类型

QMT get_value_by_order_id 的 strDataType 是 deal 时, 如果 orderid 有 1 笔交易返回对象, 如果有多笔交易, 该函数返回是列表吗?

解决方案

在 QMT 平台中,当 get_value_by_order_idstrDataType 参数设置为 'DEAL' 时,该函数返回的是单个对象(pythonObj),而不是列表(list

详细解析

根据 QMT 官方 API 文档,get_value_by_order_id 的返回值类型明确为 pythonObj。这意味着:

  1. 单笔成交:如果该 orderid 只有 1 笔成交,函数会返回这笔成交的 deal 对象。
  2. 多笔成交(部分成交):如果该 orderid 发生了多次部分成交,get_value_by_order_id 不会返回一个包含所有成交对象的列表。通常情况下,它只会返回该委托对应的最新一笔成交对象。

如何正确获取一个委托的多笔成交明细?

如果您需要获取某个委托号(orderid)对应的所有成交记录,不能依赖 get_value_by_order_id。正确的做法是使用 get_trade_detail_data 函数获取账户的所有成交记录(该函数返回的是 list),然后在 Python 代码中通过匹配委托号(m_strOrderSysID)来进行筛选。

代码示例

def init(ContextInfo):
    ContextInfo.accid = '6000000248'

def handlebar(ContextInfo):
    # 假设我们要查询的委托号
    target_order_id = '12345678'
    
    # 1. 获取账户所有的成交记录(返回 list)
    all_deals = get_trade_detail_data(ContextInfo.accid, 'stock', 'DEAL')
    
    # 2. 筛选出对应委托号的所有成交记录
    target_deals = []
    for deal in all_deals:
        # deal.m_strOrderSysID 是成交对象中记录的委托号
        if deal.m_strOrderSysID == target_order_id:
            target_deals.append(deal)
            
    # 3. 输出结果
    print(f"委托号 {target_order_id} 共有 {len(target_deals)} 笔成交")
    for d in target_deals:
        print(f"成交时间: {d.m_strTradeTime}, 成交价: {d.m_dPrice}, 成交量: {d.m_nVolume}")

总结

  • get_value_by_order_id 永远只返回单个 pythonObj
  • 要处理多笔成交,请使用 get_trade_detail_data 获取列表后自行过滤。