问题描述
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读取。