问题描述
【2025-03-21 11:08:42.876】 start back test mode
【2025-03-21 11:08:42.876】 0D:\quant\国金 QMT 交易端模拟\python\函数测试用.py_SH00030075NameError:name 'get_history_trade_detail_data' is not defined
【2025-03-21 11:08:42.877】 Traceback (most recent call last):
File "", line 49, in handlebar
NameError: name 'get_history_trade_detail_data' is not defined
我的券商版为什么提示没有这个函数?哪位大神帮帮忙,想要获取股票成交的时间
解决方案
错误原因分析
在 QMT 平台的 Python API 中,并没有 get_history_trade_detail_data 这个函数,因此在调用时会抛出 NameError: name 'get_history_trade_detail_data' is not defined 的错误。
如果您想要获取账户的交易明细(包括股票的成交时间),应该使用 QMT 官方提供的 get_trade_detail_data 函数。
正确的函数:get_trade_detail_data
get_trade_detail_data 函数用于获取交易明细数据,包括持仓、委托、成交、账号和任务信息。
函数用法
get_trade_detail_data(accountID, strAccountType, strDatatype, strategyName)
# 或不区分策略
get_trade_detail_data(accountID, strAccountType, strDatatype)
参数说明
- accountID:
string,资金账号。 - strAccountType:
string,账号类型。股票账户填'STOCK',信用账户填'CREDIT',期货填'FUTURE'等。 - strDatatype:
string,数据类型。要获取成交信息,请填'DEAL'。 - strategyName:
string,(可选)策略名,用于过滤特定策略的成交。
返回值
返回一个包含 Python 对象的列表(list)。当 strDatatype 为 'DEAL' 时,返回的是 成交对象(deal) 列表。
如何获取股票成交时间?
在返回的成交对象(deal)中,包含以下两个属性用于表示成交时间:
m_strTradeDate:成交日期(如 "20231025")m_strTradeTime:成交时间(如 "14:30:00")
示例代码
以下是一个完整的示例,展示如何在 handlebar 中获取并打印股票的成交时间:
#coding:gbk
def init(ContextInfo):
# 设置您的资金账号
ContextInfo.accid = '您的资金账号'
ContextInfo.set_account(ContextInfo.accid)
def handlebar(ContextInfo):
# 获取股票账户的成交明细
deal_list = get_trade_detail_data(ContextInfo.accid, 'STOCK', 'DEAL')
if deal_list:
for deal_obj in deal_list:
# 获取证券代码
stock_code = deal_obj.m_strInstrumentID
# 获取成交日期
trade_date = deal_obj.m_strTradeDate
# 获取成交时间
trade_time = deal_obj.m_strTradeTime
# 获取成交均价
trade_price = deal_obj.m_dPrice
# 获取成交数量
trade_volume = deal_obj.m_nVolume
print(f"代码: {stock_code}, 成交日期: {trade_date}, 成交时间: {trade_time}, 价格: {trade_price}, 数量: {trade_volume}")
else:
print("当前无成交记录")
注意事项
- 运行模式:
get_trade_detail_data函数在实盘运行和模拟运行模式下有效。在回测模式下,由于是虚拟撮合,该函数可能无法返回真实的成交明细。 - 属性查看:如果您想知道成交对象还有哪些属性,可以使用
print(dir(deal_obj))打印出该对象的所有可用属性。