问题描述
前置条件
1、安装了 python 3.10、3.13,都试了一下,都是-1
2、pip install xtquent 安装好了
3、path 的路径
path = 'D:\\Program Files\\东北证券NET专业版\\userdata_mini' ,确定存在
极速交易客户端打开的,可以获取历史数据和订阅股票数据。
这是什么问题可能存在 connect 不上?
解决方案
在使用 QMT(xtquant)进行量化交易开发时,connect 函数返回 -1 通常表示与本地 QMT 客户端的交易服务建立连接失败。结合您提供的前置条件,行情数据可以正常获取,说明底层通信部分是通的,但交易接口未能成功连接。请按照以下几个常见原因进行逐一排查:
1. 路径中包含空格或中文字符(最常见原因)
您提供的路径是 D:\Program Files\东北证券NET专业版\userdata_mini。QMT 的底层 C++ 核心库对路径中的空格(如 Program Files)和中文字符支持较差,极易导致连接初始化失败。
- 解决方案:强烈建议将 QMT 客户端卸载,并重新安装到一个全英文、无空格的简单路径下,例如
D:\QMT_DBZQ。然后将 path 修改为D:\QMT_DBZQ\userdata_mini再试。
2. 交易账号未登录或未开通 API 权限
您提到“可以获取历史数据和订阅股票数据”,这只需要行情服务连通即可。但 connect 主要是连接交易服务。
- 排查点 A:请确认在 QMT 极简版(MiniQMT)客户端中,是否已经成功登录了资金账号。如果只登录了行情而未登录交易,
connect会返回 -1。 - 排查点 B:请确认您的证券账户是否已经向券商正式申请并开通了 QMT 量化交易 API 权限。如果没有权限,即使客户端登录成功,外部 Python 脚本也无法接入交易。
3. Session ID 冲突
在调用 xt_trader = XtQuantTrader(path, session_id) 时,如果 session_id 是固定的,且上一次运行的进程没有正常退出(或者在后台残留),会导致端口被占用,再次 connect 就会返回 -1。
- 解决方案:使用随机生成的
session_id。
import random
session_id = int(random.randint(100000, 999999))
xt_trader = XtQuantTrader(path, session_id)
4. Python 版本兼容性
您提到测试了 Python 3.10 和 3.13。目前 xtquant 官方对 Python 3.6 - 3.11 的支持是比较稳定的,Python 3.13 可能存在兼容性问题。既然您有 Python 3.10,建议在排查其他问题时,全程使用 Python 3.10 环境进行测试。
5. xtquant 版本与客户端版本不匹配
通过 pip install xtquant 安装的库版本,可能与您电脑上安装的“东北证券NET专业版”客户端内置的底层接口版本不一致。
- 解决方案:不要使用 pip 下载的通用版本。请进入您的 QMT 安装目录,找到
bin.x64\Lib\site-packages\xtquant文件夹,将这个文件夹直接复制到您当前 Python 3.10 环境的site-packages目录下,或者将其路径加入到sys.path中,确保使用的是与客户端完全配套的xtquant库。
6. 防火墙或杀毒软件拦截
xtquant 与 QMT 客户端之间是通过本地回环地址(127.0.0.1)和特定端口进行 Socket 通信的。某些杀毒软件或 Windows 防火墙可能会拦截这种本地端口通信。
- 解决方案:尝试临时关闭防火墙或杀毒软件,或者将 Python 解释器和 QMT 客户端加入白名单。
总结排查顺序:
- 首要操作:重装客户端到
D:\QMT(无空格无中文路径)。 - 确认客户端已登录交易账号。
- 使用 Python 3.10,并使用随机
session_id。 - 确保使用的是客户端自带的
xtquant库文件。