3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 的独立 Python 环境(xtquant)中使用 xtdata.subscribe_whole_quote 或 xtdata.subscribe_quote 订阅行情时,如果返回值是 1(表示订阅请求发送成功)但回调函数 on_data 没有任何输出,最常见的原因是主线程在发送订阅请求后直接执行完毕退出了。
行情订阅是一个异步过程,底层会在后台线程接收数据并触发回调。如果主线程没有保持阻塞运行,Python 脚本会直接结束,后台线程也会随之销毁,从而导致回调函数无法执行。
xtdata.run() 阻塞主线程你需要在代码的最后加上 xtdata.run(),让主线程保持运行状态,持续监听行情推送。
from xtquant import xtdata
# 1. 定义回调函数
def on_data(data):
# data 是一个字典,包含了推送的行情快照数据
print("接收到行情推送:", data)
if __name__ == '__main__':
# 2. 发起订阅
# 注意:如果是订阅特定几只股票,建议使用 subscribe_quote
# subscribe_whole_quote 通常用于订阅整个市场(如 ['SH', 'SZ'])
seq = xtdata.subscribe_quote(
stock_code=['600000.SH', '000001.SZ'],
period='tick',
start_time='',
end_time='',
count=0,
callback=on_data
)
print(f"订阅请求已发送,返回序号: {seq}")
# 3. 阻塞主线程,保持程序运行以接收回调(关键步骤!)
print("开始监听行情数据...")
xtdata.run()
如果加上 xtdata.run() 后仍然没有数据输出,请检查以下几点:
xtdata.subscribe_quote:用于订阅指定股票列表的实时行情(推荐你当前的需求使用此接口)。xtdata.subscribe_whole_quote:用于订阅全市场的行情快照,参数通常传入市场代码(如 ['SH', 'SZ'])。on_data 函数只接收一个参数(即推送的数据字典),如果参数签名不匹配,底层在调用回调时可能会抛出异常被吞掉。