问题描述
path = "C:/QMT/userdata"
session_id = int(time.time())
xt_trader = XtQuantTrader(path, session_id)
xt_trader.start()
connect_result = xt_trader.connect()
print("建立交易连接,返回0表示连接成功", connect_result)
解决方案
在使用 XtQuant 进行 QMT 外部 API 开发时,xt_trader.connect() 返回 -1 代表连接 QMT 客户端失败。这通常是由路径配置错误或客户端状态异常引起的。请按照以下步骤逐一排查:
1. 检查 QMT 客户端是否已启动并登录
XtQuant 并不是直接连接券商服务器,而是通过本地的 QMT 客户端进行中转。因此,在运行 Python 代码之前,必须确保 QMT 客户端(通常是 MiniQMT 极简模式)已经启动并且成功登录了交易账号。
2. 检查 path 路径是否正确(最常见原因)
你代码中的 path = "C:/QMT/userdata" 可能不正确。根据你使用的 QMT 模式,路径有所不同:
- MiniQMT(极简模式):路径必须是
userdata_mini文件夹。例如:r"C:\国信证券QMT交易端\userdata_mini"。 - 完整版 QMT:路径是
userdata文件夹。例如:r"C:\国信证券QMT交易端\userdata"。
建议:右键点击你桌面上启动 QMT 的快捷方式,选择“打开文件所在的位置”,找到对应的 userdata_mini 或 userdata 文件夹,将绝对路径复制到代码中。注意在 Python 中使用原始字符串 r"路径" 或将反斜杠改为正斜杠 /。
3. 确认账号是否开通了外部 API 权限
并非所有 QMT 账号默认都支持外部 Python (XtQuant) 连接。请联系你的券商客户经理,确认你的账号是否已经开通了 QMT 外部 API 权限。
4. 检查防火墙或杀毒软件拦截
XtQuant 与 QMT 客户端之间通过本地端口进行通信。请检查是否有杀毒软件(如 360、火绒等)或 Windows 防火墙拦截了 Python 或 QMT 的本地网络通信。
5. 检查版本兼容性
确保你安装的 xtquant 库版本与本地 QMT 客户端的版本相匹配。通常建议从 QMT 安装目录下的 bin.x64/Lib/site-packages 中提取最新的 xtquant 包使用。
修正后的代码示例
假设你使用的是 MiniQMT 极简模式,且安装在 D:\QMT 目录下:
import time
from xtquant.xttrader import XtQuantTrader
# 1. 修改为正确的 userdata_mini 路径(请根据实际安装目录修改)
path = r"D:\QMT\userdata_mini"
session_id = int(time.time())
# 2. 初始化 Trader
xt_trader = XtQuantTrader(path, session_id)
# 3. 启动后台线程
xt_trader.start()
# 4. 建立连接
connect_result = xt_trader.connect()
if connect_result == 0:
print("连接成功!")
else:
print(f"连接失败,错误码:{connect_result}。请检查 QMT 是否已登录,且路径 {path} 是否正确。")