🚀 AI 一键生成 qmt 策略代码

QMT 平台调用 get_full_tick 获取不到实时行情数据怎么办?

qmt | 发布时间: 2026/5/27
以下内容由 EasyQuant 生成。

问题描述

xtdata.get_full_tick(['511880.SH'])读不到数据

有人知道xtdata.get_full_tick(['511880.SH'])读不到数据,是因为时间限制还是什么原因嘛?昨天也是这样,但10点多不知道为什么就又能读取了~:'(

解决方案

QMT 中 get_full_tick 读不到数据的原因分析

在使用 QMT 平台(无论是内置的 ContextInfo.get_full_tick 还是独立版的 xtdata.get_full_tick)时,遇到早上读不到数据,但盘中(如10点多)突然又能读取的情况,通常是由以下几个原因造成的:

1. 未进行行情数据订阅(最常见原因)

get_full_tick 接口的机制是获取本地内存中缓存的最新分笔数据,它本身不会主动向服务器发起网络请求去拉取数据。

  • 如果你没有在代码中显式调用订阅接口(subscribe_quote),或者没有在 QMT 终端界面上打开该品种(511880.SH)的行情图表,本地就不会有实时的数据推送。
  • 为什么10点多又能读了? 可能是你在10点多的时候,在 QMT 客户端界面上点击查看了 511880.SH 的行情,或者运行了其他触发了订阅的策略,导致本地开始接收该品种的 tick 数据,此时 get_full_tick 就能读到缓存了。

2. 行情服务器连接延迟或未登录

QMT 的 Python API 依赖于底层的 QMT 客户端。如果早上刚启动客户端,行情服务器可能还在初始化连接中,或者网络存在短暂延迟。确保客户端右下角的“行情”状态显示为已连接。

3. 交易时间段的限制

在 9:15 - 9:25 的集合竞价期间,Tick 数据的推送频率和规则与连续竞价期间不同。如果在 9:30 正式开盘前调用,且没有最新的撮合数据,可能会返回空值或旧数据。


解决方案与标准代码写法

为了确保 get_full_tick 随时都能稳定获取到数据,必须先订阅行情。以下是 QMT 内置策略中的标准写法:

步骤 1:在 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数据,等待推送...")

核心排查清单:

  1. 检查订阅:确保代码中包含了 subscribe_quote
  2. 检查客户端状态:确保 QMT 终端已登录,且行情连接正常。
  3. 检查返回值get_full_tick 返回的是一个嵌套字典,结构为 { '511880.SH': { 'lastPrice': 100.0, ... } },请确保解析字典的键值正确。