get_trade_detail_data 是 QMT 内置 Python 中用于查询账户交易明细数据的函数,可获取账户资产、持仓、委托记录、成交记录及冻结信息。返回值为对象列表,每个对象包含若干属性字段,可通过点号(.)访问。

QMT get_trade_detail_data 函数原型与适用环境

【事实】 函数原型:

get_trade_detail_data(accountid, datatype, accountType)

【事实】 适用环境与权限要求:

环境 是否支持 说明
回测环境 支持 返回回测引擎中的模拟数据
模拟信号环境 支持 返回信号计算时的账户数据
仿真交易环境 支持 返回仿真服务器的交易明细
真实交易环境 支持 返回真实交易服务器的交易明细
所需权限 交易权限 需在客户端中开通对应账户的交易权限

QMT get_trade_detail_data 参数详解

accountid — 账户 ID

【事实】 accountidstr 类型,指定要查询的资金账号。该账号需在客户端中已登录并处于连接状态。

【解释】 可通过 ContextInfo.accountid 获取当前策略绑定的账号 ID。

datatype — 数据类型

【事实】 datatypestr 类型,指定要查询的数据类别,取值如下:

含义 说明
'ACCOUNT' 账户资产 账户的资金、市值、盈亏等信息
'DEAL' 成交记录 当日已成交的委托记录
'ORDER' 委托记录 当日已提交的委托记录
'POSITION' 持仓信息 当前持仓明细
'FROZEN' 冻结信息 冻结的资金和持仓明细

accountType — 账户类型

【事实】 accountTypestr 类型,指定账户的市场类别,取值如下:

含义
'STOCK' 普通股票账户
'CREDIT' 信用(融资融券)账户
'FUTURE' 期货账户

【建议】 accountType 需与实际账户类型一致,否则可能无法返回数据或返回错误数据。

QMT get_trade_detail_data 返回值说明

【事实】 返回值为对象列表list),列表中每个元素是一个对象,包含若干属性字段。属性通过点号访问,如 detail.m_dBalance

【事实】 如果没有数据,返回空列表 []

【解释】 该函数返回的是对象而非字典,访问字段时使用点号(.)语法,不能用方括号([])语法。

QMT get_trade_detail_data 各 datatype 返回字段说明

ACCOUNT — 账户资产字段

【事实】 datatype='ACCOUNT' 时,返回对象的字段:

字段 类型 含义
m_strAccountID str 资金账号
m_strBrokerID str 服务机构代码
m_dBalance float 总资产(资金+市值)
m_dAvailable float 可用资金
m_dFetchBalance float 可取资金
m_dFrozenCash float 冻结资金
m_dPositionValue float 持仓市值
m_dProfit float 当日盈亏
m_dMargin float 保证金(期货/信用)
m_dFrozenMargin float 冻结保证金
m_dAssureAsset float 保证资产
m_dFetchBalance float 可取金额

POSITION — 持仓信息字段

【事实】 datatype='POSITION' 时,返回对象的字段:

字段 类型 含义
m_strInstrumentID str 证券代码
m_strExchangeID str 交易所代码
m_dVolume float 持仓数量
m_dCanCloseVolume float 可平/可卖数量
m_dOpenCost float 开仓成本
m_dPositionCost float 持仓成本
m_dPositionProfit float 持仓盈亏
m_strOpenDate str 开仓日期
m_strExpireDate str 到期日期(期权)
m_dTradeType float 开平标志

ORDER — 委托记录字段

【事实】 datatype='ORDER' 时,返回对象的字段:

字段 类型 含义
m_strInstrumentID str 证券代码
m_strExchangeID str 交易所代码
m_strAccountID str 资金账号
m_dVolume float 委托数量
m_dTradedVolume float 已成交数量
m_dPrice float 委托价格
m_nOrderStatus int 委托状态(见委托状态枚举)
m_strInsertDate str 委托日期
m_strInsertTime str 委托时间
m_strOrderRef str 委托编号
m_strOrderSysID str 撮合编号

DEAL — 成交记录字段

【事实】 datatype='DEAL' 时,返回对象的字段:

字段 类型 含义
m_strInstrumentID str 证券代码
m_strExchangeID str 交易所代码
m_strAccountID str 资金账号
m_dVolume float 成交数量
m_dPrice float 成交价格
m_dTradeAmount float 成交金额
m_strTradeDate str 成交日期
m_strTradeTime str 成交时间
m_strTradeID str 成交编号
m_strOrderSysID str 关联的委托编号

FROZEN — 冻结信息字段

【事实】 datatype='FROZEN' 时,返回对象的字段:

字段 类型 含义
m_strInstrumentID str 证券代码
m_strExchangeID str 交易所代码
m_dFrozenVolume float 冻结数量
m_dFrozenAmount float 冻结金额
m_strFrozenReason str 冻结原因

【建议】 以上字段为常用字段,不同客户端版本可能包含更多或更少字段。具体可用字段以当前客户端版本为准。

QMT get_trade_detail_data 示例代码

查询账户资产

# -*- coding: utf-8 -*- def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return accountid = ContextInfo.accountid # 查询账户资产 acct_list = get_trade_detail_data(accountid, 'ACCOUNT', 'STOCK') if acct_list: acct = acct_list[0] print(f'总资产: {acct.m_dBalance}') print(f'可用资金: {acct.m_dAvailable}') print(f'持仓市值: {acct.m_dPositionValue}') print(f'当日盈亏: {acct.m_dProfit}') else: print('未获取到账户资产数据')

查询持仓信息

def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return accountid = ContextInfo.accountid # 查询所有持仓 pos_list = get_trade_detail_data(accountid, 'POSITION', 'STOCK') for pos in pos_list: print(f'代码: {pos.m_strInstrumentID}, ' f'持仓: {pos.m_dVolume}, ' f'可卖: {pos.m_dCanCloseVolume}, ' f'成本: {pos.m_dOpenCost}, ' f'盈亏: {pos.m_dPositionProfit}')

查询委托记录

def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return accountid = ContextInfo.accountid # 查询当日委托 order_list = get_trade_detail_data(accountid, 'ORDER', 'STOCK') for order in order_list: print(f'委托: {order.m_strInstrumentID}, ' f'价格: {order.m_dPrice}, ' f'数量: {order.m_dVolume}, ' f'已成交: {order.m_dTradedVolume}, ' f'状态: {order.m_nOrderStatus}, ' f'时间: {order.m_strInsertTime}')

查询成交记录

def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return accountid = ContextInfo.accountid # 查询当日成交 deal_list = get_trade_detail_data(accountid, 'DEAL', 'STOCK') for deal in deal_list: print(f'成交: {deal.m_strInstrumentID}, ' f'价格: {deal.m_dPrice}, ' f'数量: {deal.m_dVolume}, ' f'金额: {deal.m_dTradeAmount}, ' f'时间: {deal.m_strTradeTime}')

综合示例:下单前检查资金与持仓

def check_before_buy(ContextInfo, stock_code, price, volume): """买入前检查资金是否充足""" accountid = ContextInfo.accountid # 查询可用资金 acct_list = get_trade_detail_data(accountid, 'ACCOUNT', 'STOCK') if not acct_list: print('无法获取账户信息') return False available = acct_list[0].m_dAvailable cost = price * volume if available < cost: print(f'资金不足: 需要 {cost:.2f}, 可用 {available:.2f}') return False # 查询已有持仓 pos_list = get_trade_detail_data(accountid, 'POSITION', 'STOCK') for pos in pos_list: if pos.m_strInstrumentID in stock_code: print(f'已有持仓: {pos.m_strInstrumentID}, ' f'数量: {pos.m_dVolume}, ' f'可卖: {pos.m_dCanCloseVolume}') return True

QMT get_trade_detail_data 注意事项

【事实】 回测环境与实盘环境的数据差异:

对比项 回测环境 实盘环境
账户资产 回测引擎模拟计算 交易服务器实时返回
持仓数据 回测引擎模拟维护 交易服务器实时返回
委托记录 回测引擎模拟生成 交易服务器实际记录
成交记录 回测引擎模拟生成 交易服务器实际记录
数据延迟 无延迟 可能有网络延迟
字段完整性 部分字段可能为空 字段完整

【建议】 1. 回测中获取的数据可能与实盘不同,策略逻辑不应依赖特定字段的精确值 2. 查询返回空列表时,应检查账户是否已连接、账号类型是否正确 3. 频繁调用该函数可能影响策略性能,建议合理控制查询频率 4. 部分字段在不同客户端版本中命名可能不同,以当前客户端版本为准

QMT get_trade_detail_data 相关函数

函数 说明 链接
passorder 下单函数 passorder
ContextInfo.get_account 获取账户信息(封装) 交易与账户
ContextInfo.get_positions 获取所有持仓(封装) 交易与账户
order_callback 委托状态变化回调 委托回调
deal_callback 成交回报回调 委托回调

QMT get_trade_detail_data 来源与更新时间

【事实】 本页面内容基于 QMT 官方文档整理。

项目
数据来源 QMT 官方文档
更新时间 2026-08-04
验证时间 2026-08-04
适用版本 以当前客户端版本为准