🚀 AI 一键生成 qmt 策略代码

QMT 平台 get_trade_detail_data 返回对象列表的解决方法

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

问题描述

关于get_trade_detail_data返回值问题

使用 get_trade_detail_data(g.acct, g.acct_type, 'order')获取下单数据,返回值是下面内容,请问题怎么解决。

【2025-03-18 11:18:30.394】 [<COrderDetail object at 0x0000017765249530>, <COrderDetail object at 0x000001776524B520>, <COrderDetail object at 0x00000177652499C0>, <COrderDetail object at 0x000001776524B9B0>, <COrderDetail object at 0x0000017765248780>, <COrderDetail object at 0x000001774EF4E6A0>]

解决方案

问题原因

在 QMT 平台中,调用 get_trade_detail_data(accountID, strAccountType, 'order') 获取委托数据时,平台返回的是一个 Python 对象列表(List of Python Objects)

你看到的 <COrderDetail object at 0x...> 是 Python 中对象的默认打印格式,表示这是一个 COrderDetail 类的实例以及它在内存中的地址。这并不是报错,而是说明你已经成功获取到了数据,只是需要进一步提取对象内部的属性。

解决方法

要获取具体的委托信息(如股票代码、委托价格、委托数量、委托状态等),你需要遍历这个列表,并访问每个对象的具体属性

代码示例

你可以使用以下代码来遍历并打印出你需要的具体数据:

def handlebar(ContextInfo):
    # 假设已经设置了账号信息
    account_id = '你的资金账号'
    account_type = 'STOCK' # 股票账号
    
    # 获取委托数据
    order_list = get_trade_detail_data(account_id, account_type, 'order')
    
    # 遍历对象列表
    for order_obj in order_list:
        # 提取并打印具体属性
        print(f"委托号: {order_obj.m_strOrderSysID}, "
              f"证券代码: {order_obj.m_strInstrumentID}, "
              f"买卖方向: {order_obj.m_nDirection}, "
              f"委托价格: {order_obj.m_dLimitPrice}, "
              f"委托数量: {order_obj.m_nVolumeTotalOriginal}, "
              f"成交数量: {order_obj.m_nVolumeTraded}, "
              f"委托状态: {order_obj.m_nOrderStatus}")

常用的委托对象(order)属性

根据 QMT API 文档,COrderDetail 对象包含以下常用属性,你可以根据需要调用:

  • m_strInstrumentID:证券代码(如 '000001.SZ')
  • m_strInstrumentName:证券名称
  • m_strOrderSysID:合同编号/委托号(用于撤单等操作)
  • m_nDirection:买卖方向(48代表买入,49代表卖出)
  • m_dLimitPrice:委托价格
  • m_nVolumeTotalOriginal:最初委托量
  • m_nVolumeTraded:已成交数量
  • m_nVolumeTotal:委托剩余量
  • m_nOrderStatus:委托状态(如 50:已报, 56:已成, 54:已撤 等)
  • m_strInsertTime:委托时间
  • m_strRemark:投资备注(对应下单时的 userOrderId)

进阶技巧:查看对象的所有属性

如果你想知道这个对象到底包含了哪些所有的属性,可以使用 Python 的内置函数 dir() 来打印对象的所有属性列表:

order_list = get_trade_detail_data(account_id, account_type, 'order')
if len(order_list) > 0:
    # 打印第一个对象的所有属性和方法
    print(dir(order_list[0]))

通过这种方式,你就可以轻松地将 <COrderDetail object> 转换为你策略中实际需要的数值和字符串了。