经过前几篇的学习,我们已经掌握了获取历史K线和财务数据的能力,这为我们进行“静态”的盘后分析打下了坚实的基础
然而,真正的交易是实时动态变化的,要想让我们的程序能够实时响应市场变化,我们就必须学会订阅实时行情
核心理念:从“拉取”到“推送”
首先,我们要理解一个核心概念的转变
之前我们使用的 get_market_data 或 get_financial_data 都属于 “拉取”数据模式
而实时行情订阅,则是一种 “推送”数据模式,我们是被动接收方
在xtdata中,这个模式的具体流程是:
1 订阅:我们告诉服务器:“我对这只股票的实时价格很感兴趣,收到了请随时通知我”
2 设置回调函数:专门用来接收通知
3 等待接收:程序进入等待状态,一旦有新的价格数据,就会立刻把新数据传给我们
实时订阅的核心指令:subscribe_quote
subscribe_quote 就是我们用来订阅单只股票实时行情的指令。它的用法和之前的指令有很大不同
返回值:返回一个 订阅号(subscription_id)
实战演练:监控“平安银行”的最新价格、成交量等信息
第一步:定义我们的“信箱”——回调函数
这个函数必须能接收一个参数(我们通常命名为 datas),xtdata会把最新的数据打包成一个字典放进这个参数
# 定义回调函数
def on_quote(datas):
"""这是一个回调函数,每当有新数据推送过来时,xtdata就会自动调用它"""
# datas 是一个字典,key是股票代码,value是具体的行情数据
for stock_code, data in datas.items():
print(f"\n股票代码: {stock_code}")
print(f"最新价: {data['lastPrice'][-1]}")
print(f"开盘价: {data['open'][-1]}")
print(f"最高价: {data['high'][-1]}")
print(f"最低价: {data['low'][-1]}")
print(f"成交量: {data['volume'][-1]}")
print(f"时间: {data['time'][-1]}")第二步:订阅行情,并启动“接收模式”
现在我们来调用 subscribe_quote,并让程序进入等待接收的状态
from xtquant import xtdata
import time
def on_quote(datas):
"""
行情回调函数
"""
for stock_code, data in datas.items():
print(f"{stock_code} 最新行情: {data}")
# 订阅行情数据
stock_code = "000001.SZ"
period = "tick" # 订阅tick级别数据
print(f"开始订阅 {stock_code} 的 {period} 行情...")
# 正确的订阅方式 - 直接传入股票代码,不使用 stock_list 参数
sub_id = xtdata.subscribe_quote(stock_code, period=period, callback=on_quote)
if sub_id > 0:
print(f"订阅成功!订阅号: {sub_id}")
else:
print(f"订阅失败!错误码: {sub_id}")
# 进入接收模式
print("\\n进入实时行情接收模式,按 Ctrl+C 退出")
try:
xtdata.run()
except KeyboardInterrupt:
# 当我们按下 Ctrl+C 时,程序会从 xtdata.run() 退出
print("\n程序退出,正在取消订阅...")
xtdata.unsubscribe_quote(sub_id) # 使用订阅号取消订阅
time.sleep(1) # 等待1秒确保取消成功
print("订阅已取消。")现在,运行这段代码,只要在交易时间,我们就会看到平安银行tick级别的的最新行情!快去试试吧!!!!
日志如下:
总结
今天我们学习了xtdata中一个非常强大的功能——实时行情订阅
我们理解了“推送”模式,掌握了 subscribe_quote、xtdata.run() 和 unsubscribe_quote的用法
这个功能是我们构建实时行情策略、监控股价变动的重要工具之一
QMT/miniQMT免费申请
QMT免费领取学习案例
QMT落地辅助策略代写服务
需要的朋友欢迎联系 ~~~
著作权归文章作者所有。