🚀 AI 一键生成 qmt 策略代码

QMT 平台 subscribe_quote 返回的 int 值代表订阅数量吗?

qmt | 发布时间: 2026/5/27
以下内容由 EasyQuant 生成。

问题描述

关于subscribe_quote的返回值

返回值
int:订阅号,用于反订阅

如果没有反订阅,是不是值是多少就是订阅了多少个标的?
比如,返回的是1000,就是订阅了1000个股票?

解决方案

不是的。subscribe_quote 返回的 int并不代表你当前订阅了多少个标的。

1. 返回值的真实含义:订阅号(subId)

subscribe_quote 返回的整数是一个订阅号(subId),你可以把它理解为这次订阅操作的“订单号”或“任务ID”。

这个 ID 是系统为了唯一标识你这一次的订阅请求而生成的。它的主要作用只有一个:当你不再需要这些数据时,将这个 ID 传给 unsubscribe_quote(subId) 函数来进行反订阅(取消订阅)。

因此,如果返回的是 1000,它仅仅意味着系统分配给这次订阅请求的编号是 1000,绝对不代表你已经订阅了 1000 个股票。

2. 如何正确获取当前订阅了多少个标的?

如果你想知道当前策略到底订阅了哪些标的、总共有多少个,你应该使用 QMT 提供的另一个专门的 API:ContextInfo.get_all_subscription()

用法示例:

def handlebar(ContextInfo):
    # 获取当前所有的行情订阅信息
    sub_data = ContextInfo.get_all_subscription()
    
    # 打印订阅信息字典
    print(sub_data)
    
    # 获取订阅的标的数量
    sub_count = len(sub_data)
    print(f"当前共订阅了 {sub_count} 个标的")

get_all_subscription() 会返回一个字典(dict),里面包含了当前所有生效的订阅信息(包括合约代码、周期、除权方式等)。通过计算这个字典的长度(len()),你就可以准确知道当前订阅了多少个标的。