一、问题
全推订阅是一种高效的数据获取方式,它能够实时推送最新的市场数据到客户端,使得用户无需频繁轮询服务器,从而大大提升了数据处理的速度和效率。
此帖主要介绍,如何使用QMT平台的全推订阅功能,高效地获取全A股的K线数据,并通过代码示例展示具体操作步骤。
二、解答
情况1:内置Python
内置Python需要使用K线全推功能,需要先在 界面端 - 设置 - 行情设置 选择开启 订阅K线全推
注意:部分券商端版本过低,K线全推功能可能不能按预期运行,因此券商端需要使用K线全推功能时,建议先向券商确认版本是否足够。

注:开启后在代码内正常调用get_market_data_ex即可,此时GMD函数的订阅不受订阅数量的限制。
情况2:原生Python
from xtquant import xtdatacenter as xtdc
from xtquant import xtdata
# 设置token
xtdc.set_token("你的token")
# 指定连接VIP行情服务器
sever_list = ['115.231.218.73:55310','115.231.218.79:55310', '218.16.123.11:55310', '218.16.123.27:55310']
xtdc.set_allow_optmize_address(sever_list)
# 开启K线全推
xtdc.set_kline_mirror_enabled(True)
# 设置start_local_service为False,使xtdc监听的端口为我们自己指定的端口
xtdc.init(start_local_service=False)
# 指定xtdc使用 58601 端口
port = 58601
try:
xtdc.listen(port=port)
xtdata.connect(port=port)
except Exception as e:
if "端口" in e.args[0]:
xtdata.reconnect(port = port)
else:
raise KeyboardInterrupt(f"token拉起报错,信息:{e}")
## 上面是防止部分用户不知道port被什么占用做的异常处理
# 一个用来实现主图驱动的回调函数
def handlebar(data):
kline = xtdata.get_market_data_ex([],stock_ls[:30],period=period,count=10)
print(kline)
stock_ls = xtdata.get_stock_list_in_sector("沪深A股") # 股票列表
period = "1m" # 数据周期
for index in range(len(stock_ls)):
stock = stock_ls[index]
xtdata.subscribe_quote(stock,period,count=1) # 这边为了演示,我只向服务器请求最近一条数据,需要当天全部的,要指定count = -1,需要当天之前的历史数据,需要进行下载
xtdata.subscribe_quote(stock,"1d",count= 1) # 要订阅多周期的话,多写一行订阅就可以了
print(f"当前订阅完成{index + 1}/{len(stock_ls)}")
xtdata.subscribe_quote("000001.SH","1d",callback=handlebar) # 定义主图,并使用handlebar实现内置中的handlebar驱动效果
xtdata.run()
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

|