3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (迅投极速量化交易平台) 中,使用 get_trade_detail_data 函数获取的委托(order)和成交(deal)信息仅限于当日(当前交易日),不包括历史数据。
get_trade_detail_data 是一个用于盘中高频调用的实时状态查询函数。为了保证极低的延迟和极高的查询效率,QMT 终端在内存中只维护当前交易日的委托、成交、持仓和资金状态。盘后结算后,这些数据会被清空或归档。如果您在策略中需要使用历史的委托和成交信息(例如一个月前的数据),可以通过以下几种方式解决:
在策略运行过程中,当发生委托或成交时,将相关信息(如时间、代码、价格、数量、方向等)写入到本地文件(如 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)
如果您只是需要人工查看历史委托和成交,可以直接在 QMT 客户端的【交易】->【历史查询】面板中选择日期范围进行查询和导出,这部分数据是由终端从券商历史结算库中拉取的。
如果您的目的是为了计算当前的持仓成本或持仓周期,可以直接使用 get_trade_detail_data(account, 'stock', 'position') 获取当前的持仓对象(Position),该对象中包含了 m_dOpenPrice(持仓成本)、m_nVolume(当前拥股)等字段,通常可以满足大部分策略对历史交易结果的依赖需求。
get_trade_detail_data 是专为盘中实时交易状态监控设计的接口,仅返回当日数据。对于历史交易流水,量化开发者需要养成盘中自行落盘记录的良好习惯。