🚀 AI 一键生成 qmt 策略代码

QMT get_trade_detail_data 获取的委托和成交包含历史数据吗?

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

问题描述

get_trade_detail_data获取的委托和成交,其时间范围?

orders = get_trade_detail_data(account, 'stock', 'order')
deals = get_trade_detail_data(account, 'stock', 'deal')

以上函数获取的委托和成交信息,仅限于当日,还是包括历史?比如,一个月前的委托和成交信息,是否可以获取?

解决方案

在 QMT (迅投极速量化交易平台) 中,使用 get_trade_detail_data 函数获取的委托(order)和成交(deal)信息仅限于当日(当前交易日)不包括历史数据

为什么只能获取当日数据?

  1. 内存机制与性能get_trade_detail_data 是一个用于盘中高频调用的实时状态查询函数。为了保证极低的延迟和极高的查询效率,QMT 终端在内存中只维护当前交易日的委托、成交、持仓和资金状态。盘后结算后,这些数据会被清空或归档。
  2. 柜台接口限制:底层对接的券商交易柜台(如集中交易系统)在盘中提供的实时查询接口,通常也只返回当日的流水。历史流水属于结算后的数据,通常存放在历史数据库中,需要通过专门的历史查询接口获取。

无法获取一个月前的数据,该如何解决?

如果您在策略中需要使用历史的委托和成交信息(例如一个月前的数据),可以通过以下几种方式解决:

1. 策略自行记录(推荐)

在策略运行过程中,当发生委托或成交时,将相关信息(如时间、代码、价格、数量、方向等)写入到本地文件(如 CSV、JSON)或本地数据库(如 SQLite、MySQL)中。这样您的策略在后续运行时,就可以直接读取本地存储的历史记录。

# 示例:将当日成交记录保存到本地文件
import pandas as pd
import os

def save_deals_to_csv(ContextInfo):
    account = ContextInfo.accid
    deals = get_trade_detail_data(account, 'stock', 'deal')
    
    deal_list = []
    for d in deals:
        deal_list.append({
            'trade_time': d.m_strTradeTime,
            'code': d.m_strInstrumentID,
            'price': d.m_dPrice,
            'volume': d.m_nVolume,
            'direction': d.m_nDirection
        })
    
    if deal_list:
        df = pd.DataFrame(deal_list)
        # 追加写入CSV
        df.to_csv('C:/my_strategy_deals.csv', mode='a', header=not os.path.exists('C:/my_strategy_deals.csv'), index=False)

2. 通过 QMT 客户端界面查询

如果您只是需要人工查看历史委托和成交,可以直接在 QMT 客户端的【交易】->【历史查询】面板中选择日期范围进行查询和导出,这部分数据是由终端从券商历史结算库中拉取的。

3. 依赖持仓推算

如果您的目的是为了计算当前的持仓成本或持仓周期,可以直接使用 get_trade_detail_data(account, 'stock', 'position') 获取当前的持仓对象(Position),该对象中包含了 m_dOpenPrice(持仓成本)、m_nVolume(当前拥股)等字段,通常可以满足大部分策略对历史交易结果的依赖需求。

总结

get_trade_detail_data 是专为盘中实时交易状态监控设计的接口,仅返回当日数据。对于历史交易流水,量化开发者需要养成盘中自行落盘记录的良好习惯。