QMT内置账户查询示例代码
本页面展示如何在QMT内置Python环境中通过 get_trade_detail_data 接口查询账户资产、持仓、委托和成交信息,实现账户状态的实时监控与管理。
功能说明
该示例代码运行于QMT内置Python环境(策略编辑器)中,实现以下功能:
- 在
init初始化函数中设置账户并执行查询 - 查询账户资产:总资产、市值、可用资金、持仓盈亏
- 查询委托订单:代码、委托量、价格、委托号、状态等
- 查询成交记录:代码、成交量、均价、成交额、成交编号等
- 查询持仓信息:代码、持仓量、可用量、冻结量、成本、市值、浮动盈亏等
- 使用pandas DataFrame格式化输出查询结果
使用方法
- 登录QMT软件,进入「模型研究」
- 新建Python策略文件
- 点击下方「复制代码」按钮复制完整代码
- 将代码粘贴到QMT策略编辑器中
- 修改
ACCOUNT_ID为您的资金账号 - 点击「编译」保存策略
- 在「模型交易」中运行策略,查看日志输出
示例代码
account_query_internal.py
#coding:gbk import pandas as pd import logging logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") logger = logging.getLogger(__name__) ACCOUNT_ID = "55011888" ACCOUNT_TYPE = "STOCK" def init(ContextInfo): logger.info("===== QMT 账户查询启动 =====") ContextInfo.set_account(ACCOUNT_ID) # 定义查询函数 def fetch(data_type): return get_trade_detail_data(ACCOUNT_ID, ACCOUNT_TYPE, data_type) or [] # 查询资金 accs = fetch("ACCOUNT") if accs: a = accs[0] logger.info(f"总资产:{a.m_dBalance} 市值:{a.m_dInstrumentValue} 可用:{a.m_dAvailable} 持仓盈亏:{a.m_dPositionProfit}") # 查询委托 orders = fetch("ORDER") df_orders = pd.DataFrame([( o.m_strInstrumentID, o.m_nVolumeTotalOriginal, o.m_dLimitPrice, o.m_strOrderSysID, o.m_nOrderStatus, o.m_nVolumeTraded, o.m_nVolumeTotal ) for o in orders]) if orders else pd.DataFrame() if not df_orders.empty: df_orders.columns = ["代码","委托量","价格","委托号","状态","已成交","剩余"] logger.info("\n【委托】\n" + df_orders.to_string(index=False)) # 查询成交 deals = fetch("DEAL") df_deals = pd.DataFrame([( d.m_strInstrumentID, d.m_nVolume, d.m_dPrice, d.m_dTradeAmount, d.m_strOrderSysID, d.m_strTradeID, d.m_strTradeTime ) for d in deals]) if deals else pd.DataFrame() if not df_deals.empty: df_deals.columns = ["代码","成交量","均价","成交额","委托号","成交编号","时间"] logger.info("\n【成交】\n" + df_deals.to_string(index=False)) # 查询持仓 positions = fetch("POSITION") df_pos = pd.DataFrame([( p.m_strInstrumentID, p.m_nVolume, p.m_nCanUseVolume, p.m_nFrozenVolume, p.m_dOpenPrice, p.m_dMarketValue, p.m_dFloatProfit, p.m_dProfitRate ) for p in positions]) if positions else pd.DataFrame() if not df_pos.empty: df_pos.columns = ["代码","持仓","可用","冻结","成本","市值","浮动盈亏","盈亏率"] logger.info("\n【持仓】\n" + df_pos.to_string(index=False)) logger.info(f"委托:{len(orders)} 成交:{len(deals)} 持仓:{len(positions)}") logger.info("查询完成") def handlebar(ContextInfo): pass def stop(ContextInfo): logger.info("策略已停止")
代码说明
该示例代码主要包含以下功能模块:
- 初始化配置:设置资金账号和账户类型,定义通用查询函数
fetch - 资金查询:通过
ACCOUNT类型查询总资产、市值、可用资金和持仓盈亏 - 委托查询:通过
ORDER类型查询委托订单明细,含委托量、价格、状态等 - 成交查询:通过
DEAL类型查询成交记录,含成交量、均价、成交额等 - 持仓查询:通过
POSITION类型查询持仓明细,含持仓量、成本、市值、盈亏等 - 数据格式化:使用pandas DataFrame将原始数据转换为表格形式,便于阅读
注意事项
- 该代码运行于QMT内置Python环境,需在QMT策略编辑器中运行
- 请确保已在QMT中登录并开通交易权限
- 修改
ACCOUNT_ID为您的实际资金账号 - 查询结果仅在策略日志中输出,不会触发任何交易
- 如查询返回空列表,可能是当前无对应数据或账号配置有误