🚀 AI 一键生成 qmt 策略代码

QMT平台能用get_trade_detail_data查询历史委托和成交记录吗?

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

问题描述

请问get_trade_detail_data()这个函数只能获取当天的委托或成交记录吗?

比如,我昨天有一笔交易,昨天能用 get_trade_detail_data()这个函数查到委托或成交记录,但今天就只能查到今天的交易记录,查不到昨天的交易记录了,那我今天想查询昨天的某笔交易记录,该怎么查呢?

解决方案

是的,您理解得完全正确。在 QMT 平台中,get_trade_detail_data() 函数主要用于获取**当日(当前交易日)**的账户信息、持仓、委托(ORDER)和成交(DEAL)记录。一旦跨日,系统会进行结算并清空当日的委托和成交缓存,因此第二天无法通过该函数直接获取前一天的交易记录。

如果您需要在策略中查询或使用历史的交易记录,目前 QMT API 并没有直接提供查询“历史交割单”的函数。为了解决这个问题,通常有以下几种解决方案:

方案一:策略自行记录到本地文件(最常用、最推荐)

如果您需要在未来的交易日中用到之前的交易记录,最好的方法是在策略运行期间,将每次的委托或成交信息实时保存到本地文件(如 CSV、TXT 或 SQLite 数据库)中。第二天策略启动时,再从本地文件中读取这些历史记录。

您可以结合 deal_callback(成交主推回调函数)来实现自动记录:

#encoding:gbk
import pandas as pd
import os
import time

# 定义保存历史成交的文件路径
HISTORY_TRADE_FILE = 'D:/QMT_Data/my_history_trades.csv'

def init(ContextInfo):
    ContextInfo.set_account('您的资金账号')
    # 初始化时,如果文件不存在则创建一个带表头的文件
    if not os.path.exists(HISTORY_TRADE_FILE):
        df = pd.DataFrame(columns=['TradeDate', 'TradeTime', 'InstrumentID', 'Direction', 'Price', 'Volume'])
        df.to_csv(HISTORY_TRADE_FILE, index=False)

def handlebar(ContextInfo):
    pass

# 当有成交时触发此回调
def deal_callback(ContextInfo, dealInfo):
    # 提取成交信息
    trade_data = {
        'TradeDate': dealInfo.m_strTradeDate,
        'TradeTime': dealInfo.m_strTradeTime,
        'InstrumentID': dealInfo.m_strInstrumentID,
        'Direction': dealInfo.m_nDirection, # 48买入, 49卖出
        'Price': dealInfo.m_dPrice,
        'Volume': dealInfo.m_nVolume
    }
    
    # 追加写入到本地 CSV 文件
    df = pd.DataFrame([trade_data])
    df.to_csv(HISTORY_TRADE_FILE, mode='a', header=False, index=False)
    print(f"已将成交记录保存至本地: {trade_data}")

这样,您随时可以通过 Python 的 pandas.read_csv() 读取这个文件,获取所有的历史交易记录。

方案二:回测模式下的历史记录查询

如果您是在回测模式下,想要获取策略在历史某天的交易明细,可以使用 get_result_records() 函数。该函数专门用于获取回测面板中的记录结果。

def handlebar(ContextInfo):
    index = ContextInfo.barpos
    # 获取当前 K 线对应的交易明细
    deal_details = get_result_records('dealdetails', index, ContextInfo)
    if deal_details:
        print(f"历史交易明细: {deal_details}")

注意:此函数仅在模型回测时有效,实盘/模拟盘无效。

方案三:通过 QMT 客户端界面手动查询

如果您只是需要人工查看昨天的交易记录,而不需要在代码中自动化处理,您可以直接在 QMT 客户端的**“交易” -> “历史成交” 或 “交割单”**界面中选择日期范围进行查询,并支持导出为 Excel 文件。

总结

对于实盘和模拟盘的自动化量化策略,强烈建议采用“方案一”。在量化交易中,维护一个属于策略自己的本地状态文件(记录历史成交、自定义持仓成本等)是非常标准且稳健的做法,这样可以避免过度依赖柜台接口,也能应对断线重启等复杂情况。