QMT 使用帮助
为什么必须是「大 QMT」
| 对比项 | 大 QMT(完整版) | miniQMT |
|---|---|---|
| 定位 | 一体化终端,内置策略编辑器与回测 | 轻量,只留行情 + 交易 |
| 本工具的用法 | 把跟单策略放进 QMT 直接跑 | xtquant 外部直连 |
| 可用性 | 可用 | 2026-07 起已停止新申请 |
因此本工具走「大 QMT + 策略内直接跟单」路线。
它在 QMT 里是怎么工作的
聚宽策略 ──①推送信号──▶ 中转站(本站) 信号状态:待领取
│
QMT 策略 ──②领取信号──▶ 中转站
──③回报结果──▶ 中转站 信号状态:已完成
──④心跳─────▶ 中转站 工作台据此显示「已连接」
为什么强调这一点:迅投官方文档明确写了 QMT 的 python 无法使用多线程和多进程,
所有策略都在同一线程中执行。如果反过来让 QMT 在策略里开一个 HTTP 服务端口
(旧版本的做法),负责接收连接的线程永远拿不到调度,症状是
「端口开着、TCP 握手成功、但 5 秒后客户端 Read timed out」——
极难定位。改成由 QMT 主动发起请求,这个问题从根上消失。
第 1 步 · 下载跟单包(三个文件)
在工作台通道详情里点「下载 QMT 跟单包」。包里已经写入你的通道令牌与中转站地址, 不需要手工改任何文件。
<通道名>_QMT跟单包.zip ├── 安装说明.txt # 离线版说明,含逐步操作 ├── <通道名>.py # ★ QMT 侧策略源码(纯英文) └── <通道名>.xml # ★ 参数面板 → 放进 <QMT>\python\formulaLayout\
.rzrk 是迅投专有的加密策略包格式,只有 QMT 自己「导出」时才会生成,
第三方(包括本站)无法凭空造一个出来。所以本包给的是可读的 .py 源码,
由你在 QMT 里新建策略、把源码粘进去 —— 见第 2 步。装好之后你可以在 QMT 里
右键该策略「导出」,得到属于你自己的 .rzrk 备份。
第 2 步 · 把策略装进 QMT(最容易被跳过的一步)
python 文件夹就当装好了。
QMT 那套「放文件夹就自动出现」的机制认的是 .rzrk 加密包,不是明文 .py。
多数券商版把策略加密存储,明文 .py 放进去不会被识别,
策略列表里根本不会出现它 —— 这就是「按说明放了文件却找不到策略」的原因。
方法 A(推荐,最稳)
- 打开 QMT → 左侧「模型研究」(策略列表)。
- 在策略列表空白处右键 → 新建策略 / 新建 Python 策略。
- 先把策略名称改成与包内同名(
<通道名>)—— 要在放文件之前改:QMT 是按「策略名」登记策略的,名字不对,后面放进去的文件就绑不到它。 - 再把包内
<通道名>.py装进去:清空编辑器里的示例代码, 把该文件的全部内容复制粘贴进去(或直接覆盖到 QMT 安装目录的python文件夹里那个同名文件)。 - 点「编译」保存。
- 把
<通道名>.xml复制到 QMT 安装目录python\formulaLayout\下。xml 文件名必须与策略名完全一致, 否则打开策略看不到参数面板。
方法 B(手上已有 .rzrk 时)
把 .rzrk 复制到 QMT 安装目录的 python 文件夹,重启 QMT 即可自动出现;
参数面板 xml 同样放进 python\formulaLayout\。
unicode error。粘贴要整段替换,别只粘一半,
也不要手工改里面的中转站地址和通道令牌(下载时已预填好)。
找不到 python / formulaLayout 目录?在 QMT 安装目录里搜
formulaLayout 即可定位。典型路径:D:\东北证券NET专业版\python\。
装完列表里还看不到?右键空白处看有没有「刷新」,或重启 QMT 再看一次。
第 3 步 · 运行并确认主泵在跑
- 进入模型交易,选中你的策略(前缀是你的通道名)→ 打开参数设置。
- 核对参数:中转站地址(已填好)、通道令牌(已填好)、 资金账号(不是你自己的就改成你的)。
- 保存参数 → 点【运行】。不是只点「编译」——只编译不会启动主泵。
- 看 QMT 日志窗口,30 秒内应出现:
[follower] alive ticks=.. served=0 failed=0 errors=0 requeue=0 dry_run=0
alive 行 = 主泵根本没在跑。
这是「策略没启动」或「跑在回测模式」的问题,不要在代码里找原因。
ContextInfo.run_time 在回测模式下不生效,所以必须进
模型交易界面、以实盘或模拟模式运行。
第 4 步 · 出厂默认与四种联调方式
[测试] 空跑模式 = 否(真实报单)、
[风控] 仅交易时段下单 = 否(不限时段,收盘后也执行)。
这是为了方便盘后联调;要严格管控,把它们改回「是」。
| 联调方式 | 会真实报单吗 | 受限条件 | 用来验什么 |
|---|---|---|---|
| 工作台「发送测试信号」 | 不会 | 无:探针不取价、不报单 | 「中转站 → QMT」这一段,任何时间都可点 |
聚宽研究环境 _jqr_e2e_test() | 不会 | 无 | 完整三跳「聚宽 → 中转站 → QMT」 |
| 工作台「实盘下单(100股)」 | 会 | 必须带精确价格;走完整风控 | passorder 那一段到底通不通 |
| 面板「[测试] 测试模式 = 是」 | 会 | 放开信号时效与交易时段;每笔固定 100 股 | 用模拟账号做压力验证 |
不管你用哪种方式,策略跑起来后工作台「QMT 连接」都应变成已连接,
信号状态从 待领取 → 已领取 → 已完成 依次推进。
只想先看链路、不报单?把面板 [测试] 空跑模式 临时改成「是」即可。
第 5 步 · 上线前确认
- 用最小数量发一条真实信号(工作台「实盘下单」按钮,或聚宽策略), 去 QMT 委托列表核对方向 / 价格 / 数量是否符合预期,核对完自行撤单。
- 确认参数面板
[测试] 空跑模式= 否、[风控] 仅交易时段下单是你想要的档位。 - 确认风控参数(单笔金额上限 / 单笔股数上限)已按资金量设好,再按正常仓位使用。
参数改在哪?
跟单策略自己的面板(QMT 里):下单模式、报价方式、价格笼子、资金使用比例、 信号时效、空跑/测试模式、自动撤单、废单重试、通知渠道。
网站工作台:单笔金额上限、日委托笔数上限、单票集中度、总仓位上限、 日内亏损熔断、价格偏离校验。改完不用动 QMT —— 策略每 30 秒发一次心跳,会自动把新参数领回去。
两层风控是互补的:服务端管「这条信号该不该发」,QMT 侧管 「以我现在的持仓和资金,这单到底下多少」。
上线前的自检清单
常见问题
| 现象 | 原因 / 处理 |
|---|---|
| 打开策略没有参数设置 / 面板是空的 | xml 与策略不同名,或 xml 没放进
python\formulaLayout\。两个文件名要一模一样。 |
QMT 日志没有 alive 行 |
策略没在跑:只点了「编译」没点【运行】,或跑在回测模式。 |
| 工作台 QMT 一直「待验证」 | 策略没发心跳,或通道令牌错误。先确认 alive 行与
CHANNEL_TOKEN 是否为空。 |
日志出现 WARNING CHANNEL_TOKEN is still a placeholder |
参数面板里的通道令牌是空的。回工作台重新下载跟单包。 |
| 日志出现 401 / 通道 token 无效 | 令牌不对,或通道被暂停。到工作台核对通道状态。 |
| 日志出现连接超时 | 这台机器访问不到中转站。先确认地址填对(不要以斜杠结尾), 再排查公司网络 / 杀毒软件 / 防火墙是否拦截出站请求。 |
QMT 报 SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb4 … |
编码问题,不是代码问题:QMT 编辑器把文件存成了 GBK,而运行时按 UTF-8 解码,撞到第一个汉字就报错。跟单包内的策略文件是纯英文,用包内原文件 全选替换重新复制一次即可;不要加中文注释,不要「另存为 ANSI」。 |
QMT 报 invalid character in identifier |
编码已经修好了,但粘贴时混进了全角标点(中文引号、中文逗号)。 用包内原文件重新全选替换一次。 |
| 测试信号一直「待领取」 | 主泵没在跑,或令牌不一致。看 QMT 日志是否在打印 alive。 |
| 比例口径数量算成 0 | percent 需要账户总资产。若 QMT 拿不到资产数据,
建议在聚宽侧改用金额口径(order_target_value)。 |
| 工作台持仓/对账一直空白 | 策略心跳里的持仓字段没被识别。先看 alive 行是否出现,
再看心跳是否返回 200(日志里不会常打印,可用工作台的连接检测)。 |
| 提示权益已到期 | 到「积分与权益」续费即可,续费后通道自动恢复。 |
按说明把 .py 放进 python 文件夹,策略列表里却没有 |
QMT 的「放文件夹自动出现」机制认 .rzrk 加密包,不认明文 .py;
多数券商版把策略加密存储,于是明文 .py 放进去不被识别。请改用第 2 步的
方法 A:模型研究 → 右键新建 Python 策略 → 粘贴源码 → 编译保存,
再重启 QMT 或右键刷新。 |
| 能否直接给一个 .rzrk,导入就能用? | 做不到:.rzrk 是迅投专有加密格式,
只能由 QMT 自己导出,第三方无法生成。按第 2 步方法 A 装好后,
你可以在 QMT 里右键该策略「导出」,得到属于自己的 .rzrk 备份。 |
| 信号被拦截,原因写「信号未携带价格」 | 服务端 v0.7.8 起强制要求真实下单必须带精确价格。 聚宽接入代码取不到该标的行情(停牌 / 冷门 LOF / 非交易时段)时就会这样。 请重新复制一次最新的聚宽接入代码,并确认标的当时有行情。 |
| 点「实盘下单」报「必须填写精确价格」 | 实盘下单是真实报单,必须手动填一个大于 0 的价格 —— 不带价的下单请求会被服务端直接拒收。 |
| 「实盘下单」和「发送测试信号」有什么区别? | 测试信号是链路探针:不取价、不报单,任何时间都能点;
实盘下单会真实报单(固定 100 股、必须带价),
用来验证 passorder 那一段到底通不通。 |
| 工作台显示「已报单」,QMT 委托列表里却什么都没有 | 先看价格:填得离谱的价会被柜台做成废单(低于跌停 /
高于涨停),而废单不会出现在有效委托里。服务端 v0.7.9 起会在入口就拦下
出界的价格并写明「超出当日涨跌停区间」;跟单包 v3.0.5 起还会在报单后
等 1.2 秒确认委托真的出现在列表里,确认不到就回报执行失败
而不是「已提交」。 另一类原因见下一条(同一通道跑了两个实例)。 |
| 工作台出现「⚠ N 个客户端」黄牌 | 同一个通道令牌被多个 QMT 进程同时拉取。
最常见的是同一个策略文件被加载成了两条同名模型,或旧进程没被杀干净。
多出来的那个若跑在回测 / 模拟模式,会把信号抢走并给出
「已提交」的假象,实际不产生任何委托。 处理:到 QMT「模型交易」面板数一数同名策略有几条,只保留一条实盘实例; 停掉后回去看黄牌是否消失(约 35 秒后刷新)。 |
| 信号被拦截,原因写「超出当日涨跌停区间」 | 服务端 v0.7.9 起增加了涨跌停校验:信号价必须落在当日涨跌停之内, 否则柜台必废单。请检查聚宽侧传入的价格是否是该标的的真实价格 (常见于手动测试时填错,或用了别的标的的价格)。 |
安全红线
- 通道令牌在参数面板与策略文件里都是明文,不要截图外发。
- 策略只连你自己配置的中转站地址,不要用来路不明的地址。
- 通道令牌泄露请立刻到工作台「更换 token」,然后重新下载跟单包 (三个文件都要重新放一次)。
- 保持「单笔金额上限」与「单笔股数上限」为有限值 —— 它们是跟单链路上最后一道闸。
- 先用仿真账号和最小资金验证,再逐步放大。
