🚀 AI 一键生成 qmt 策略代码

券商QMT缺少 get_history_trade_detail_data 函数怎么办?

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

问题描述

券商的QMT函数不全?

迅投的知识库里有 get_history_trade_detail_data 函数,但是在华泰的 QMT 上使用,报错:

NameError: name 'get_history_trade_detail_data' is not defined

解决方案

问题分析

在华泰等券商提供的 QMT 平台上遇到 NameError: name 'get_history_trade_detail_data' is not defined 报错,通常是由以下几个原因造成的:

  1. 券商定制版差异:迅投官方的知识库包含了所有最新和全功能的 API,但各个券商(如华泰、国信等)采购的 QMT 版本可能是定制版。出于风控、系统稳定性或权限管理的考虑,券商可能会屏蔽或未开放某些特定的 API 接口。
  2. 版本迭代滞后:券商端的 QMT 客户端更新频率通常慢于迅投官方版本,某些新加入的函数在旧版本的券商客户端中尚未定义。
  3. 标准 API 替代:在 QMT 标准的 Python API 文档中,获取交易明细的标准函数其实是 get_trade_detail_data,而不是带有 history 前缀的函数。

替代解决方案

既然 get_history_trade_detail_data 无法使用,您可以使用 QMT 标准 API 中提供的 get_trade_detail_data 函数来获取交易明细数据(包括委托、成交、持仓等)。

get_trade_detail_data 函数用法

用法:
get_trade_detail_data(accountID, strAccountType, strDatatype, strategyName)
或不区分策略:
get_trade_detail_data(accountID, strAccountType, strDatatype)

参数说明:

  • accountIDstring,资金账号。
  • strAccountTypestring,账号类型。可选值:'STOCK'(股票), 'CREDIT'(信用), 'FUTURE'(期货)等。
  • strDatatypestring,数据类型。可选值:
    • 'POSITION':持仓
    • 'ORDER':委托
    • 'DEAL' :成交
    • 'ACCOUNT':账号资金
    • 'TASK':任务

示例代码:获取当日成交与委托记录

def init(ContextInfo):
    # 设置您的资金账号
    ContextInfo.accid = '您的资金账号'

def handlebar(ContextInfo):
    # 1. 获取当日成交明细 (DEAL)
    deal_list = get_trade_detail_data(ContextInfo.accid, 'stock', 'deal')
    print("=== 当日成交明细 ===")
    for deal in deal_list:
        print(f"合约代码: {deal.m_strInstrumentID}, 成交均价: {deal.m_dPrice}, 成交量: {deal.m_nVolume}, 买卖方向: {deal.m_nDirection}")

    # 2. 获取当日委托明细 (ORDER)
    order_list = get_trade_detail_data(ContextInfo.accid, 'stock', 'order')
    print("=== 当日委托明细 ===")
    for order in order_list:
        print(f"合约代码: {order.m_strInstrumentID}, 委托价格: {order.m_dLimitPrice}, 委托量: {order.m_nVolumeTotalOriginal}, 状态: {order.m_nOrderStatus}")

关于获取“历史”交易记录的建议

需要注意的是,get_trade_detail_data 通常只能获取**当日(当前交易日)**的委托和成交明细。如果您在量化策略中强依赖历史的交割单或历史成交记录,建议采取以下变通方法:

  1. 策略内部自行记录:在策略每次触发下单或收到成交回报(通过 deal_callback)时,将成交信息写入本地的 CSV 文件或 SQLite 数据库中。这样您的策略就可以随时读取自己维护的历史交易记录。
  2. 联系券商客服:如果您确实需要直接通过 API 获取历史交割数据,建议联系华泰证券的专属客户经理或量化技术支持,确认当前版本是否支持该功能,或者是否需要申请开通更高权限的接口(如极速版/专业版)接口。