中金财富 QMT 作为跳板数据源对接 VN.PY 二开全流程

张开发
2026/4/16 14:33:42 15 分钟阅读

分享文章

中金财富 QMT 作为跳板数据源对接 VN.PY 二开全流程
一、前言 适用场景在量化开发中很多同学会遇到券商原生 API 难申请、配置复杂VN.PY 直接对接不稳定想把 QMT 当作稳定跳板数据源只拿行情不做交易需要对 VN.PY QMT 网关进行二次开发模拟账户无法开通交易权限导致对接失败本文提供一套从 0 到 1 可复现的完整流程基于 venv 虚拟环境 Python3.10 推荐版本适合二次开发。 二、环境准备2.1 软件要求Python 3.10.xVN.PY QMT 最兼容版本Git用于克隆源码中金财富 QMT 终端Windows 系统2.2 工作目录plaintextD:\new_work 三、完整搭建流程一步复制执行3.1 进入工作目录cmdD: cd D:\new_work3.2 创建 Python3.10 虚拟环境cmdpy -3.10 -m venv vnpy_env3.3 激活虚拟环境必须执行cmdvnpy_env\Scripts\activate出现(vnpy_env)代表激活成功。3.4 升级基础包cmdpython -m pip install --upgrade pip setuptools wheel3.5 安装 VN.PY 源码二开专用cmdgit clone https://gitee.com/vnpy/vnpy.git cd vnpy pip install -e . cd ..3.6 安装 QMT 对接网关解决原仓库 404cmdgit clone https://gitee.com/ruyisee/vnpy_qmt.git cd vnpy_qmt pip install -e . cd ..3.7 安装 QMT 底层依赖 xtquantcmdpip install xtquant --upgrade 四、编写启动脚本 run.py在D:\new_work下新建run.py使用正确导入路径避免 ImportError。python运行from vnpy.event import EventEngine from vnpy.trader.engine import MainEngine from vnpy.trader.ui import MainWindow, create_qapp # 正确导入修复无法导入 QmtGateway 问题 from vnpy_qmt.qmt_gateway import QmtGateway def main(): app create_qapp() event_engine EventEngine() main_engine MainEngine(event_engine) # 加载 QMT 网关 main_engine.add_gateway(QmtGateway) main_window MainWindow(main_engine, event_engine) main_window.show() app.exec() if __name__ __main__: main()⚙️ 五、QMT 终端配置关键5.1 配置步骤打开 QMT 登录点击顶部系统 → 系统设置找到Python 接口选项卡勾选✅ 启用 Python 接口✅ 自动启动 Python 服务端口默认8888保存并重启 QMT必须重启5.2 配图说明文字版系统 → 系统设置 → Python 接口 → 勾选两个开关 → 重启生效 六、启动 VN.PY 并连接 QMTcmdpython run.py连接步骤左侧点击连接选择QmtGateway直接点连接无需账号密码 七、高频报错终极解决方案7.1 ImportError: cannot import name QmtGateway原因导入路径错误解决使用python运行from vnpy_qmt.qmt_gateway import QmtGateway7.2 订阅账户【失败】-1模拟账户必出现原因模拟账户无程序化交易权限解决纯数据源模式使用最终无报错版纯行情网关代码python运行from vnpy.event import EventEngine from vnpy.trader.engine import MainEngine from vnpy.trader.ui import MainWindow, create_qapp from vnpy_qmt.qmt_gateway import QmtGateway class DataOnlyQmtGateway(QmtGateway): 纯行情数据源网关模拟账户专用 彻底解决订阅账户失败 -1 修复 AttributeError 缺失 md_api def connect(self, settings: dict) - None: # 先执行父类初始化必须 super().connect(settings) # 关闭交易接口仅保留行情 self.td_api None self.write_log(✅ QMT 纯数据源模式启动仅行情) def main(): app create_qapp() event_engine EventEngine() main_engine MainEngine(event_engine) main_engine.add_gateway(DataOnlyQmtGateway) main_window MainWindow(main_engine, event_engine) main_window.show() app.exec() if __name__ __main__: main()7.3 本 gateway 不支持的标的 XXX.IF正常现象QMT 网关不支持期权、期货只支持股票 / ETF不影响使用。7.4 VN.PY 界面空白、无行情数据原因VN.PY 不会自动加载全市场行情必须手动添加合约解决打开左侧【行情】面板在空白表格处右键 → 添加合约输入股票代码600036/000001点击确认立刻显示实时行情7.5 AttributeError: DataOnlyQmtGateway object has no attribute md_api原因自定义网关未执行父类初始化api 对象未创建解决必须先调用super().connect(settings)再修改接口逻辑使用 7.2 最终代码即可 八、二次开发说明核心8.1 二开主要文件plaintextvnpy_qmt/qmt_gateway.py # 行情与交易核心 vnpy/* # VN.PY 主框架8.2 可扩展功能自定义 Tick 格式加入盘口十档 / 千档数据行情转发至内部策略系统写入数据库、日志、监控纯数据源跳板禁用交易 九、日常启动流程cmdcd D:\new_work vnpy_env\Scripts\activate python run.py 十、注意事项Python 3.10 最稳定3.11 可能出现 xtquant 兼容问题模拟账户只能用行情不能交易报 -1 属于正常QMT 修改 Python 接口必须重启才能生效实盘如需交易需联系券商开通程序化交易权限VN.PY 行情面板必须手动添加合约才会显示数据连接顺序先启动 QMT → 再运行 VN.PY 十一、最终验证标准出现以下日志即代表对接完全成功plaintext[QMT] [ md ] 获取标的信息完成 [QMT] ✅ QMT 纯数据源模式启动仅行情

更多文章