3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (xtquant) 中,调用 xtdata.get_full_tick() 获取到的是上午的旧数据,根本原因是没有提前订阅这些股票的实时行情。
xtdata.get_full_tick() 的工作机制是直接从本地内存中读取最新的 tick 缓存。如果你没有向服务器发送订阅请求,本地内存中的数据就不会更新,因此你取到的只能是之前某次操作遗留下来的旧数据(例如上午断开连接前的数据,或者终端最后一次自动推送的数据)。
要获取最新的实时 tick 数据,必须先使用 xtdata.subscribe_quote() 订阅目标股票的行情,然后再调用 get_full_tick()。
from xtquant import xtdata
import time
stock_list = ['000967.SZ', '600084.SH']
# 1. 订阅实时行情 (period='tick' 表示订阅分笔数据)
for stock in stock_list:
# count=-1 表示只订阅最新行情,不获取历史
xtdata.subscribe_quote(stock, period='tick', count=-1)
print("行情订阅成功,等待数据推送...")
# 等待一小段时间,让底层 C++ 接收到服务器推送的数据并更新到本地内存
time.sleep(1)
# 2. 再次获取全推 tick 数据
res = xtdata.get_full_tick(stock_list)
print("最新 Tick 数据:")
print(res)
如果你是在做盘中实时交易策略,主动轮询 get_full_tick 效率较低且容易漏掉数据。推荐在订阅时传入 callback 函数,当有新的 tick 到来时,系统会自动触发回调:
from xtquant import xtdata
# 定义回调函数
def on_data(datas):
for stock_code, data in datas.items():
print(f"[{stock_code}] 最新价: {data[0]['lastPrice']}, 时间: {data[0]['timetag']}")
stock_list = ['000967.SZ', '600084.SH']
# 订阅并绑定回调函数
for stock in stock_list:
xtdata.subscribe_quote(stock, period='tick', count=-1, callback=on_data)
# 保持主线程运行
xtdata.run()
总结:在 QMT 中获取任何实时数据前,请务必牢记**“先订阅,后获取”**的原则。