简介:迅投QMT极速策略交易系统开发文档以PDF形式呈现,内容出自北京睿智融科官方系统说明,面向券商、期货公司及量化交易开发者,用于了解QMT平台在行情显示、投研建模、自动化交易与风控管理等方面的整体架构与操作流程。文档共1个文件,PDF格式,大小约50.77MB,内容按正式系统说明体例编排,开篇为系统概述和交易终端运行环境,随后依次展开功能模块总述、我的板块、模型研究与模型交易、行情模块(含管理面板、个股分析、分时界面、Level2行情)、交易模块(账号管理与各类交易服务)、极简模式、投资研究及其他设置,并附有指定快捷键汇总,目录层级清晰,便于按需定位。全文对多账户批量管理、对冲与组合下单、算法交易、多层次并行风控等能力均有涉及,也覆盖股票、期货、融资融券、组合交易等多种交易类型;正文对每个功能模块的操作界面、入口和适用场景均有分步说明,能帮助读者快速理解各模块联动逻辑,可作为量化策略开发、终端部署和日常运维的配套参考。目前已有945人学习下载,适合需要快速上手QMT终端或搭建极速交易环境的开发者查阅。 干量化的朋友,应该没人不知道迅投QMT。这几年它几乎成了国内中小私募和资深个人玩家跑实盘的主流选择,社区里求开发文档、求教程、求踩坑经验的帖子从来不少。但说句实话,QMT的开发文档一直做得比较零散,官方给的PDF经常更新不及时,接口说明又藏在客户端安装目录里,新手上手最难受的不是策略怎么写,而是“到底该看哪份文档、去哪取、取到之后怎么用”。
这篇文章我把最近这段时间摸过的开发文档、接口资料和实战经验一起整理出来。不管你是刚接触QMT准备跑模拟,还是已经从PTrade转过来准备接实盘,按这篇的路径去拿文档、理解核心接口、排掉高频坑,能省下不少和客服来回扯皮的时间。内容不涉及具体券商内部资料,都是公开文档和代码注释里能拿到的信息。
1. 先想清楚:你拿到的到底是什么版本的QMT
很多人一上来就去搜“QMT开发文档”,下了一大堆文件,结果发现接口对不上、函数找不到。原因很简单:QMT在不同环境下的开发接口根本不是一回事。
1.1 客户端版本和“极简模式”的差别
迅投QMT的客户端,日常我们看到的是集成行情、交易、策略编辑器的完整终端。但真正的程序化开发,大多数走的是“极简模式”,也就是行业里经常说的miniQMT。极简模式不加载图形界面里的策略编辑功能,而是专门为外部Python脚本、VBA脚本提供一个常驻的量化交易服务通道。
两者在开发文档上最大的差异是:
- 完整版终端里的策略编辑器,用VBA或Python编写,文档重点是“策略文件格式、内置函数、回测面板配置”;
- miniQMT外部接口,重点是
xtquant这个Python包,文档核心是“连接、订阅行情、查询账户、下单、接收回调”这一套事务。
我的建议很明确:如果你做的是中低频策略,用外部Python直连miniQMT效率最高,文档也最稳定。别把时间耗在策略编辑器上,那个生态更适合不会写代码的人。
1.2 内置Python环境与外置Python环境
开发文档里隐藏得比较深的一点,是QMT客户端自带了Python环境。你打开安装目录,能看到bin下面就有python.exe和一堆依赖库。如果你在客户端里跑策略,可以用这个内置环境;如果你像大多数人一样,更习惯用自己的PyCharm、VSCode跑脚本,就需要通过xtquant包连接客户端。
需要注意:内置环境的库版本比较固化,装不了太多第三方包,适合轻量运行;外置环境更自由,但文档在配置时容易漏掉一点——必须勾选/开启miniQMT的远程访问支持,具体名称在个别券商版本里可能叫“外部脚本调用”或“免登录导出”。这下你再去翻文档,能看到它讲的其实不是“怎么安装库”,而是“怎么把外部脚本对接进客户端”。
1.3 券商定制版的差异
QMT还有一个让很多人头疼的问题:各家券商拿到的客户端版本不一定完全一样。基础接口一致,但部分券商会在开盘时段限制日内最大撤单次数、限制特定品种权限,甚至修改了少量接口的返回字段名。所以拿到的开发文档只要不是当前当前客户端的配套版本,都会出现对不上的情况。
这也是为什么我一直建议:以xtquant包源码docstring和本地客户端版本为准,网上流传的文档只能当参考,不能当标准。版本号在客户端“关于”页面能查到,对不上就果断去翻本地文件,别硬套旧文档。
2. 文档去哪儿取:官方渠道和安装目录里的“宝藏”
既然标题叫“自己的取”,那核心就是告诉你在哪几个位置能找到一手资料。我不推荐从某度网盘转来转去的分享链接,一是版本老,二是安全性没法保证。
2.1 安装目录里的核心文档
正常情况下,QMT安装完成后,在你安装的磁盘目录下能找到几个关键位置:
- 主目录下的
README或说明.txt,这是最容易被忽略的入门文档,里面通常会写清楚版本特性、账号开通注意事项; bin目录下的xtquant包,里面有完整的.py源码,几乎是活的开发文档,函数参数、返回格式都写在docstring里;- 部分版本会有
docs或帮助文档目录,放着PDF或CHM格式的接口说明。
实际操作中,我最常用的方式是直接用PyCharm打开xtquant包里的xttrader.py和xtdata.py,按住Ctrl点函数名就能看到签名和注释,比自己翻几百页PDF快得多。源码里的注释可能会滞后,但也比从网上找的二手整理准确得多。
2.2 官方社区和开发者通道
迅投有一个官方的量化社区和开发者服务通道,这里面一般能拿到:
- 最新版本发布说明与更新日志;
- 官方QMT量化接口文档的离线版;
- 常见问题FAQ和补丁包;
- 测试环境、模拟环境的申请方式。
想直接和官方技术沟通,走开发者通道的工单系统比在微信群里吼效率高不少。提工单时把版本号、操作步骤、报错截图带上,基本半天内能得到有效回复。如果是实盘遇到资金相关的问题,直接联系开户券商的售后更快,他们和迅投之间有专门的对接通道。
2.3 自己维护一份“接口变更记录”
我自己的习惯是每次客户端升级,都会把xtquant包复制一份出来,按日期归档。别小看这个动作,QMT接口偶尔会调整参数,比如旧版里下单数量用volume字段,新版可能改成了order_volume(具体以实机版本为准)。没归档的话,客户端一升级,老策略跑挂了你都不知道改在哪。
归档之后配合版本对比工具(Beyond Compare或Git),一眼就能看出哪个函数变了,真是省钱又省心的土办法。
3. 核心开发流程拆解:连接、行情、下单三件套
拿到文档之后怎么快速上手?我建议所有的QMT开发都围绕三个核心环节来:连接客户端、获取数据、执行交易。把这三个跑通,一个最简的实盘策略框架就有了。
3.1 初始化和连接状态的管理
xtquant的默认用法是创建一个XtQuantTrader实例,传入一个回调对象和交易路径参数。连接成功之后,需要订阅资产账户,然后才能查询资金、持仓、下单。
一个非常容易踩的坑是路径参数。这个路径指向的是QMT客户端的用户目录,不是程序安装目录。有开发者在文档之外折腾半天,填了安装目录,结果一直报“连接失败”,换成用户名下的userdata_mini目录才通。打开客户端的“数据维护”或交易日志能看到实际用的路径。
回调机制也要提前理解。xtquant用的是异步回调,比如委托回报、成交回报、资金变动都是事件驱动,不是主动轮询。新手最容易犯的错是在主线程里while True死循环检查持仓,结果把回调线程饿死,导致状态刷新异常。正确的姿势是让回调函数快速记录数据,由主线程按自己的节奏去消费这些数据。
3.2 行情数据:先下载再订阅,顺序不能反
QMT的xtdata模块提供两种获取行情的方式:历史数据下载和实时行情订阅。这两个的方向完全不一样。
download_history_data:把历史K线或分笔数据拉到本地,之后再读取就很快;subscribe_quote:实时订阅某合约的行情,数据通过回调推送,也可以主动查询最新行情。
关键点是“先下载再看”。很多新手直接用get_market_data_ex拿数据,拿回来空列表,以为是没有权限。其实是因为本地还没下载过对应的合约周期数据。先调一次download_history_data把时间范围下载好,再查询,基本就有了。
这里还要注意合约代码的标准格式。QMT里股票是600000.SH这种带后缀的格式,期货是IF2409.CCF,期权是10004567.OF之类的。格式不统一经常会报“合约不存在”,做多市场的时候最好自己写一个转换函数。
3.3 下单接口和订单状态管理
下单接口分为同步和异步两种。同步接口order_stock会返回一个委托编号(order_id),异步接口order_stock_async则把下单动作放在回调里执行。
我个人偏好用异步下单,理由是实盘环境里同步接口容易出现阻塞,尤其在程序需要同时处理多个合约时。订单提交之后,真正的确认是以on_order_callback回调为准的,不要在提交后立刻查持仓,很大概率还是旧状态。
止损止盈这类风控,更推荐放在本地逻辑里做。有一些策略调cancel_order_stock撤单时,会发现撤不掉。常见原因是该笔委托已经部分成交或已进入不可撤状态。正确做法是先从回调里拿到最新订单状态,再做撤单决策,而不是盲目撤。
4. 开发过程中怎么用AI工具提效
最近这段时间,身边不少人问“QMT开发能不能也结合AI提效”。我的回答是:能,但得用对位置。AI不是替你写策略逻辑,而是帮你加速“文档理解、代码翻译、报错排查”这三块。
4.1 用AI读源码和整理接口说明书
xtquant包动辄上千行,源码里信息密度很高,但人工读完确实耗时间。我会直接把关键源码文件丢给AI,让它按“函数清单+参数说明+使用示例”输出一份精简版文档,效率很高。
不过要注意:不要让AI凭空“脑补”QMT的接口用法。它记忆里的QMT知识可能混合了不同版本,甚至包含其他平台的接口,必须结合本地源码核对。我在实际操作中会让AI给出结论时带上源码里的docstring片段,方便我一眼确认有没有胡编。
4.2 用AI辅助排错和生成辅助代码
遇到报错,与其一条条消息问客服,不如把完整回调和堆栈信息贴给AI,让它先梳理可能原因,再动手改。QMT的错误信息有时候比较隐晦,比如明明没连上,报的却是“取数超时”。AI可以根据上下文快速把常见异常成组列出来,帮你缩小范围。
还有一块是造测试数据和模拟场景。比如你想验证策略在涨跌停、停牌、除权除息各种边缘状态下的表现,直接写数据太费劲。可以用AI生成这些特殊状态下的数据样本,搭一个小批量测试脚本,提前验逻辑,而不必拿实盘资金去试错。
5. 高频问题排查清单和避坑要点
最后把这段时间整理出来的高频问题直接列成一个速查表,全是那种“排查一小时,解决一分钟”的问题。
| 现象 | 最常见原因 | 处理方式 |
|---|---|---|
| 外部Python报“连接超时” | 路径填错,或客户端没有启动 | 启动QMT客户端并确认极简模式开启,核对用户目录路径 |
| 连接成功但查不到资金 | 未订阅资金/账户账号不匹配 | 调用subscribe_account订阅当前登录账号 |
| 历史K线返回空 | 未先下载历史数据 | 先调用download_history_data下载对应合约代码和周期 |
| 实时行情不推送 | 合约代码格式不带后缀 | 检查是否为600000.SH这种带市场后缀格式 |
| 下单后一直没有成交回报 | 订单被拒或价格超出涨跌停范围 | 查询订单状态回调,核对价格限制和可用持仓 |
| 撤单失败 | 订单状态已是“部分成交/已报待撤”之外的状态 | 先查询最新订单状态再撤单,不要盲目反复撤 |
| 客户端升级后策略报错 | xtquant接口发生了变化 | 对比本地归档的旧版本源码,定位变更点再修改 |
5.1 回测和实盘差异
还有一个没法通过排查单解决,但必须明确认知的问题:回测和实盘之间存在巨大差异。QMT的策略编辑器回测撮合相对理想化,容易忽略滑点和成交量约束。实盘遇到涨停板附近的大单,就算价格到了也很难买进,成交量不够就是不够。
我在做实盘前都会加一道“模拟盘验证”流程,至少在QMT模拟环境跑两个星期,把策略的委托日志和回报日志拉出来看,对比回测结果里的成交位置和实际成交位置。这一步能过滤掉大量回测“看着很美”的策略。
5.2 回调线程和主线程的资源竞争
QMT的回调是独立线程,如果程序同时用多线程写数据库或发送通知,就会涉及线程安全问题。比如你直接在回调里写变量,主线程可能读不到最新值,或者读到半新半旧的状态。推荐做法是回调函数只负责把数据放进队列(queue.Queue),主线程从队列里取,再统一处理。这是通用技巧,但在QMT开发里尤其重要,因为回调频率可能很高,处理不当会导致数据错乱。
5.3 盘后维护和定时任务
还有一个被忽略的细节:QMT客户端不一定要一直开着,但在实盘交易时段,开着最稳妥。很多开发者会写一个盘后采集程序,晚上自动下载第二天需要的数据。定时任务里尽量不要用Windows计划任务直接启动python脚本,因为脚本依赖客户端环境,而客户端环境可能需要先登录。可以写一个小的启动器,先检测客户端进程是否在运行,不在就拉起,然后等3到5分钟再跑数据程序,这样能避开客户端初始化还没完成导致的数据读取异常。
6. 一些资料和学习路径的最终建议
QMT开发文档千千万,最容易让人盲目的是“越存越多,越看越乱”。按我个人的经验,整理一套自己的资料体系比收集资料本身重要得多。
我现在的做法是本地维护一个项目目录,里面按“文档、源码归档、策略模板、问题笔记”四类存放。文档放官方PDF和整理后的精简版,源码归档放每个版本的xtquant包,策略模板放可以直接跑的完整框架,问题笔记就是每一次排错的记录,包括错误信息和解决过程。这套体系帮我迭代了很多次,每次客户端升级,问题笔记都能让我快速定位以前踩过的坑。
回到最初的问题,QMT的开发文档到底怎么取?顺着官方渠道和本地源码这两个方向走,配合版本归档和AI辅助整理,基本就已经超过九成还在到处找资料的人了。开发QMT本质是搞清楚“数据怎么来、订单怎么发、回调怎么收”,这三个点通了,往上加什么策略模型都只是时间问题。
本文还有配套的精品资源,点击获取