问题描述
无法下载或者获取 tick 数据,试过最近一天也不行
解决方案
在QMT平台中遇到无法获取或下载Tick(分笔)数据的问题,通常是由本地数据未补充、API接口使用不当或参数格式错误引起的。请按照以下步骤进行排查和解决:
1. 检查并补充本地数据(最常见原因)
QMT的回测和历史数据获取依赖于本地数据。如果您没有在客户端手动下载Tick数据,API将无法读取。
- 操作步骤:打开QMT客户端 -> 点击左侧或顶部的【数据管理】 -> 选择【补充数据】 -> 选择您需要的市场和品种 -> 周期务必勾选【分笔】(Tick) -> 设定时间范围(注意Tick数据量极大,建议每次只下载最近几天) -> 点击【开始补充】。
2. 检查股票代码格式
QMT的股票代码必须包含市场后缀,格式为 代码.市场。例如:平安银行必须写为 000001.SZ,贵州茅台为 600051.SH。如果只写 000001,将无法获取数据。
3. 使用正确的API接口获取Tick数据
根据您的需求(实时最新Tick还是历史Tick),请使用不同的API接口:
A. 获取最新分笔数据(实盘/模拟盘中)
建议使用 ContextInfo.get_full_tick() 接口,该接口直接返回最新的Tick快照。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取平安银行的最新Tick数据
tick_data = ContextInfo.get_full_tick(['000001.SZ'])
print(tick_data)
B. 获取历史/本地分笔数据
建议使用 ContextInfo.get_local_data() 或 ContextInfo.get_market_data_ex(),并将 period 参数设置为 'tick'。
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 使用 get_local_data 获取本地Tick数据
# 注意:必须先在【数据管理】中下载了对应时间段的分笔数据
local_tick = ContextInfo.get_local_data(
stock_code='000001.SZ',
start_time='20231010',
end_time='20231010',
period='tick'
)
print("本地Tick数据:", local_tick)
# 或者使用 get_market_data_ex
ex_tick = ContextInfo.get_market_data_ex(
fields=[],
stock_code=['000001.SZ'],
period='tick',
start_time='20231010093000',
end_time='20231010150000'
)
print("MarketDataEx Tick:", ex_tick)
4. 检查订阅状态(针对实盘推送)
如果您希望在盘中实时接收Tick推送,需要使用 ContextInfo.subscribe_quote() 接口订阅Tick周期的数据,并绑定回调函数。
def on_quote(datas):
print("收到Tick推送:", datas)
def init(ContextInfo):
# 订阅平安银行的分笔数据
ContextInfo.subscribe_quote('000001.SZ', period='tick', dividend_type='none', callback=on_quote)
总结:请务必先去【数据管理】下载分笔数据,然后再使用 get_local_data 或 get_market_data_ex 提取。如果仅需最新盘口,直接调用 get_full_tick 即可。