🚀 AI 一键生成 qmt 策略代码

miniQMT 交易接口 subscribe() 订阅失败返回 -1 怎么办?

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

问题描述

MINIQMT的subscribe()不成功,如何解决

用券商的 MINIQMT,已经成功登陆 MINIQMT, 无论用 miniqmt 内部 python 还是外部 pycharm 都出现错误。

代码如下(教程中的代码)
xt_trader = XtQuantTrader(path, session_id)
acc = StockAccount('*****') #******是券商资金账号
xt_trader.start()
connect_result = xt_trader.connect()
print('建立交易连接,返回 0 表示连接成功', connect_result)

subscribe_result = xt_trader.subscribe(acc)
print('对交易回调进行订阅,订阅后可以收到交易主推,返回 0 表示订阅成功', subscribe_result)
#取账号信息
account_info = xt_trader.query_stock_asset(acc)
print('account_info =',account_info )

运行后发现错误如下:

连接函数 connect()连接成功返回 0,
但订阅函数 subscribe()不成功,返回-1,
函数 query_stock_asset()返回 None, 也不成功, account_info =None

这是为什么,如何解决?

解决方案

在 miniQMT (XtQuant) 中,connect() 返回 0 说明您的 Python 代码已经成功与 miniQMT 客户端建立了底层通信连接。但是 subscribe() 返回 -1 以及 query_stock_asset() 返回 None,说明客户端无法识别或无权访问您指定的资金账号

这通常是由以下几个原因引起的,请逐一排查:

1. 账号类型设置错误(最常见)

您在代码中使用了 StockAccount('*****'),这代表普通股票账户。如果您登录的是信用账户(融资融券账号),必须使用 CreditAccount 类。

  • 普通账户from xtquant.xttype import StockAccount; acc = StockAccount('资金账号')
  • 信用账户from xtquant.xttype import CreditAccount; acc = CreditAccount('资金账号')

2. 资金账号字符串不匹配

请检查传入的资金账号字符串是否与 miniQMT 客户端左上角或交易面板中显示的账号完全一致。不要包含多余的空格,也不要误填为客户号或登录账号(有些券商的登录号和资金账号不同)。

3. path 路径指向错误

XtQuantTrader(path, session_id) 中的 path 必须指向当前正在运行且已登录的 miniQMT 客户端的 userdata_mini 文件夹。如果您的电脑上安装了多个 QMT/miniQMT,或者路径指向了普通的 userdata 文件夹,就会出现连接成功(连到了另一个进程)但找不到账号的情况。

  • 正确路径示例:r'D:\国信证券QMT交易端\userdata_mini'

4. 客户端交易连接未就绪

虽然您已经登录了 miniQMT,但请检查客户端右下角的连接状态。如果“交易”显示为红色断开状态,API 同样无法订阅和查询资产。请确保客户端内的交易模块已成功连接到券商服务器。

💡 建议的调试代码

您可以加上账号类型的判断和更详细的打印信息来排查:

from xtquant.xttrader import XtQuantTrader
from xtquant.xttype import StockAccount, CreditAccount
import random

# 1. 确保路径是 userdata_mini
path = r'D:\您的券商QMT安装目录\userdata_mini'
session_id = int(random.randint(100000, 999999))
xt_trader = XtQuantTrader(path, session_id)

# 2. 根据实际情况选择账户类型
account_id = '您的资金账号'
# 如果是普通账户:
acc = StockAccount(account_id)
# 如果是两融账户,请注释上一行并取消注释下一行:
# acc = CreditAccount(account_id)

xt_trader.start()
connect_result = xt_trader.connect()
print('建立交易连接,返回 0 表示连接成功:', connect_result)

if connect_result == 0:
    subscribe_result = xt_trader.subscribe(acc)
    print('交易回调订阅状态 (0为成功):', subscribe_result)
    
    if subscribe_result == 0:
        account_info = xt_trader.query_stock_asset(acc)
        if account_info:
            print('资产查询成功,总资产:', account_info.m_dBalance)
        else:
            print('资产查询返回 None,请检查账号是否有资产或是否为信用账户未正确声明。')
    else:
        print('订阅失败!请严格检查:1.账号是否与客户端一致 2.是否为信用账户 3.path是否指向userdata_mini')