3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
get_full_tick 读不到数据的原因分析在使用 QMT 平台(无论是内置的 ContextInfo.get_full_tick 还是独立版的 xtdata.get_full_tick)时,遇到早上读不到数据,但盘中(如10点多)突然又能读取的情况,通常是由以下几个原因造成的:
get_full_tick 接口的机制是获取本地内存中缓存的最新分笔数据,它本身不会主动向服务器发起网络请求去拉取数据。
subscribe_quote),或者没有在 QMT 终端界面上打开该品种(511880.SH)的行情图表,本地就不会有实时的数据推送。511880.SH 的行情,或者运行了其他触发了订阅的策略,导致本地开始接收该品种的 tick 数据,此时 get_full_tick 就能读到缓存了。QMT 的 Python API 依赖于底层的 QMT 客户端。如果早上刚启动客户端,行情服务器可能还在初始化连接中,或者网络存在短暂延迟。确保客户端右下角的“行情”状态显示为已连接。
在 9:15 - 9:25 的集合竞价期间,Tick 数据的推送频率和规则与连续竞价期间不同。如果在 9:30 正式开盘前调用,且没有最新的撮合数据,可能会返回空值或旧数据。
为了确保 get_full_tick 随时都能稳定获取到数据,必须先订阅行情。以下是 QMT 内置策略中的标准写法:
init 中订阅行情使用 ContextInfo.subscribe_quote 订阅你需要的品种的 tick 数据。
#coding:gbk
def init(ContextInfo):
# 设定股票池
stock_list = ['511880.SH']
ContextInfo.set_universe(stock_list)
# 订阅 tick 行情数据,确保本地有实时推送
for stock in stock_list:
ContextInfo.subscribe_quote(stock, period='tick', dividend_type='none')
print(f"已订阅行情: {stock}")
def handlebar(ContextInfo):
# 确保在最后一根 K 线(实时状态)才去获取 tick
if not ContextInfo.is_last_bar():
return
# 获取最新分笔数据
tick_data = ContextInfo.get_full_tick(['511880.SH'])
if tick_data and '511880.SH' in tick_data:
print("最新Tick数据:", tick_data['511880.SH']['lastPrice'])
else:
print("暂未获取到Tick数据,等待推送...")
subscribe_quote。get_full_tick 返回的是一个嵌套字典,结构为 { '511880.SH': { 'lastPrice': 100.0, ... } },请确保解析字典的键值正确。