问题描述
xtdata.download_history_data('600000.SH', period='tick', start_time='20250618', end_time='20250618', incrementally = False)
data_dict=xtdata.get_local_data(field_list=[], stock_list=['600000.SH'], period='tick', start_time='20250618', end_time='20250618', count=-1,dividend_type='none', fill_data=False, data_dir='')
这几天取不到数,为什么
解决方案
在 QMT 平台中,使用历史数据下载接口(如 download_history_data)获取当天的 tick 数据时,经常会遇到取不到数据的情况。这通常是由以下几个原因导致的:
1. 历史数据接口的延迟性(盘中无法获取当天历史Tick)
download_history_data 和 get_local_data 是针对历史数据的接口。QMT 的数据服务器通常会在每天收盘后(通常在 15:30 甚至更晚)才会将当天的 tick 数据打包并更新到历史数据服务器上。因此,如果您在盘中或刚收盘不久调用该接口,服务器上还没有当天的历史 tick 文件,自然就下载不到数据。
2. 盘中获取当天 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)
3. 盘后获取当天 Tick 数据的注意事项
如果您确实是在盘后(例如晚上)运行代码,但依然取不到数据,请检查以下几点:
- 时间格式:确保
start_time和end_time是有效的交易日。您示例代码中的20250618如果是未来的日期或非交易日,肯定是取不到数据的。 - 数据补充:在 QMT 客户端界面,点击【数据管理】->【补充数据】,手动勾选“分笔线”并补充当天的行情,看看是否能成功下载。如果客户端也无法补充,说明券商的数据服务器当天存在异常或尚未就绪。
- 参数设置:
get_local_data的period参数应为'tick',且确保本地确实已经通过download_history_data下载成功(可以通过检查 QMT 安装目录下的userdata_mini/datadir目录是否有对应日期的文件来确认)。