🚀 AI 一键生成 qmt 策略代码
立即体验
👉 AI 生成代码 👈

为什么 xtdata.get_full_tick 经常返回空数据?如何解决?

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

问题描述

为什么最近xtdata.get_full_tick经常返回空数据,是行情源的问题吗,求解

from xtquant import xtdata
data=xtdata.get_full_tick(['000001.SZ'])
print(data)
{}

这个是登录 miniqmt 后自动连接的行情源

解决方案

这不是行情源的问题,而是因为没有提前订阅行情数据

在 QMT/xtquant 的设计机制中,xtdata.get_full_tick() 函数是直接从本地内存/缓存中读取最新的 tick 数据,它本身不会向服务器发送获取数据的网络请求。

如果你没有在代码中主动订阅该股票的行情,且 miniqmt 客户端界面也没有正好停留在该股票的 K 线图上(客户端会自动订阅当前浏览的股票),本地缓存中就没有数据,因此会返回空字典 {}

解决方法:先订阅,再获取

在调用 get_full_tick 之前,必须先使用 xtdata.subscribe_quote 订阅对应股票的 tick 周期数据。订阅后,后台会持续接收服务器推送的数据并更新到本地缓存中,此时再调用 get_full_tick 就能拿到数据了。

正确的代码示例:

from xtquant import xtdata
import time

stock_code = '000001.SZ'

# 1. 订阅 tick 行情数据
# 参数:股票代码, 周期, 起始时间, 结束时间, 数量, 回调函数
seq = xtdata.subscribe_quote(stock_code, period='tick', start_time='', end_time='', count=0, callback=None)

# 等待一小段时间,让后台接收到第一笔推送数据
time.sleep(1)

# 2. 获取本地缓存中的最新 tick 数据
data = xtdata.get_full_tick([stock_code])
print("获取到的 tick 数据:", data)

# 3. 如果不再需要,可以取消订阅以节省资源
# xtdata.unsubscribe_quote(seq)

进阶用法:使用回调函数实时接收

如果你需要实时处理每一个 tick,建议直接在 subscribe_quote 中传入回调函数,而不是用 get_full_tick 去轮询:

from xtquant import xtdata

def on_data(data):
    print("收到实时行情推送:", data)

# 订阅并绑定回调函数
seq = xtdata.subscribe_quote('000001.SZ', period='tick', callback=on_data)

# 保持主线程运行
xtdata.run()

总结

  • get_full_tick 只读本地缓存,不发网络请求。
  • 必须先 subscribe_quote 订阅,本地才会有数据。
  • 如果需要获取历史的 tick 数据,请使用 xtdata.download_history_data 进行下载,然后再使用 xtdata.get_market_data 读取。