3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,使用历史数据下载接口(如 download_history_data)获取当天的 tick 数据时,经常会遇到取不到数据的情况。这通常是由以下几个原因导致的:
download_history_data 和 get_local_data 是针对历史数据的接口。QMT 的数据服务器通常会在每天收盘后(通常在 15:30 甚至更晚)才会将当天的 tick 数据打包并更新到历史数据服务器上。因此,如果您在盘中或刚收盘不久调用该接口,服务器上还没有当天的历史 tick 文件,自然就下载不到数据。
如果您需要在盘中获取当天的 tick 数据,不能使用历史数据下载接口,而应该使用实时行情订阅接口或实时快照接口。
根据 QMT 内置 Python API 文档,推荐使用以下方法:
ContextInfo.subscribe_quote 订阅实时 Tick这是最推荐的盘中获取 Tick 的方式,当有新的 Tick 到来时会触发回调函数。
def on_quote(datas):
print("收到实时Tick数据:", datas)
def init(ContextInfo):
# 订阅 600000.SH 的实时 tick 数据
ContextInfo.subscribe_quote('600000.SH', period='tick', dividend_type='none', callback=on_quote)
def handlebar(ContextInfo):
pass
ContextInfo.get_full_tick 获取最新分笔快照如果您只需要在特定时刻(如每根 K 线结束时)获取最新的一个 Tick 状态,可以使用此接口。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取最新分笔数据
tick_data = ContextInfo.get_full_tick(['600000.SH'])
print("最新Tick快照:", tick_data)
ContextInfo.get_market_data_ex 获取当天已走完的 Tick 序列如果您在盘中需要获取当天从开盘到当前时刻的所有 Tick 序列,可以使用 get_market_data_ex 并开启 subscribe=True。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取当天的 tick 序列
data = ContextInfo.get_market_data_ex(
fields=[],
stock_code=['600000.SH'],
period='tick',
start_time='',
end_time='',
count=-1,
subscribe=True
)
print("当天Tick序列:", data)
如果您确实是在盘后(例如晚上)运行代码,但依然取不到数据,请检查以下几点:
start_time 和 end_time 是有效的交易日。您示例代码中的 20250618 如果是未来的日期或非交易日,肯定是取不到数据的。get_local_data 的 period 参数应为 'tick',且确保本地确实已经通过 download_history_data 下载成功(可以通过检查 QMT 安装目录下的 userdata_mini/datadir 目录是否有对应日期的文件来确认)。