聚宽信号中转站
默认蓝
主题色
明暗
选择会记在本机浏览器,下次打开保持。
登录 免费注册

QMT 使用帮助

跟单逻辑在你自己的 QMT 里跑,账户和资金全程不经过平台。

为什么必须是「大 QMT」

对比项大 QMT(完整版)miniQMT
定位一体化终端,内置策略编辑器与回测轻量,只留行情 + 交易
本工具的用法把跟单策略放进 QMT 直接跑xtquant 外部直连
可用性可用2026-07 起已停止新申请

因此本工具走「大 QMT + 策略内直接跟单」路线。

它在 QMT 里是怎么工作的

聚宽策略  ──①推送信号──▶  中转站(本站)      信号状态:待领取
                             │
QMT 策略  ──②领取信号──▶  中转站
          ──③回报结果──▶  中转站              信号状态:已完成
          ──④心跳─────▶  中转站              工作台据此显示「已连接」
关键:QMT 是「主动去领」的那一方。 它自己不开端口、不监听、不需要多线程 —— 所以一个策略文件就够了。

为什么强调这一点:迅投官方文档明确写了 QMT 的 python 无法使用多线程和多进程, 所有策略都在同一线程中执行。如果反过来让 QMT 在策略里开一个 HTTP 服务端口 (旧版本的做法),负责接收连接的线程永远拿不到调度,症状是 「端口开着、TCP 握手成功、但 5 秒后客户端 Read timed out」—— 极难定位。改成由 QMT 主动发起请求,这个问题从根上消失。

第 1 步 · 下载跟单包(三个文件)

在工作台通道详情里点「下载 QMT 跟单包」。包里已经写入你的通道令牌与中转站地址, 不需要手工改任何文件。

<通道名>_QMT跟单包.zip
├── 安装说明.txt                  # 离线版说明,含逐步操作
├── <通道名>.py                  # ★ QMT 侧策略源码(纯英文)
└── <通道名>.xml                 # ★ 参数面板 → 放进 <QMT>\python\formulaLayout\
两个文件必须同名(前缀都是你的通道名)——QMT 靠 「xml 文件名 = 策略名」去匹配参数面板。改名或放到别的目录,打开策略时就看不到设置项。
为什么没有 .rzrk 这种格式? .rzrk 是迅投专有的加密策略包格式,只有 QMT 自己「导出」时才会生成, 第三方(包括本站)无法凭空造一个出来。所以本包给的是可读的 .py 源码, 由你在 QMT 里新建策略、把源码粘进去 —— 见第 2 步。装好之后你可以在 QMT 里 右键该策略「导出」,得到属于你自己的 .rzrk 备份。

第 2 步 · 把策略装进 QMT(最容易被跳过的一步)

不要只把 .py 丢进 QMT 的 python 文件夹就当装好了。 QMT 那套「放文件夹就自动出现」的机制认的是 .rzrk 加密包,不是明文 .py。 多数券商版把策略加密存储,明文 .py 放进去不会被识别, 策略列表里根本不会出现它 —— 这就是「按说明放了文件却找不到策略」的原因。

方法 A(推荐,最稳)

  1. 打开 QMT → 左侧「模型研究」(策略列表)。
  2. 在策略列表空白处右键 → 新建策略 / 新建 Python 策略。
  3. 先把策略名称改成与包内同名(<通道名>)—— 要在放文件之前改:QMT 是按「策略名」登记策略的,名字不对,后面放进去的文件就绑不到它。
  4. 再把包内 <通道名>.py 装进去:清空编辑器里的示例代码, 把该文件的全部内容复制粘贴进去(或直接覆盖到 QMT 安装目录的 python 文件夹里那个同名文件)。
  5. 点「编译」保存。
  6. 把 <通道名>.xml 复制到 QMT 安装目录 python\formulaLayout\ 下。xml 文件名必须与策略名完全一致, 否则打开策略看不到参数面板。

方法 B(手上已有 .rzrk 时)

把 .rzrk 复制到 QMT 安装目录的 python 文件夹,重启 QMT 即可自动出现; 参数面板 xml 同样放进 python\formulaLayout\。

本文件是纯英文的,GBK / UTF-8 两种编码下字节完全一致, 不会出现 unicode error。粘贴要整段替换,别只粘一半, 也不要手工改里面的中转站地址和通道令牌(下载时已预填好)。

找不到 python / formulaLayout 目录?在 QMT 安装目录里搜 formulaLayout 即可定位。典型路径:D:\东北证券NET专业版\python\。 装完列表里还看不到?右键空白处看有没有「刷新」,或重启 QMT 再看一次。

第 3 步 · 运行并确认主泵在跑

  1. 进入模型交易,选中你的策略(前缀是你的通道名)→ 打开参数设置。
  2. 核对参数:中转站地址(已填好)、通道令牌(已填好)、 资金账号(不是你自己的就改成你的)。
  3. 保存参数 → 点【运行】。不是只点「编译」——只编译不会启动主泵。
  4. 看 QMT 日志窗口,30 秒内应出现:
    [follower] alive ticks=.. served=0 failed=0 errors=0 requeue=0 dry_run=0
没有 alive 行 = 主泵根本没在跑。 这是「策略没启动」或「跑在回测模式」的问题,不要在代码里找原因。 ContextInfo.run_time 在回测模式下不生效,所以必须进 模型交易界面、以实盘或模拟模式运行。

第 4 步 · 出厂默认与四种联调方式

出厂默认是「真实报单」,请先看清楚再点运行。 跟单包 v3.0.4 起两个开关的出厂默认都改成了「否」: [测试] 空跑模式 = 否(真实报单)、 [风控] 仅交易时段下单 = 否(不限时段,收盘后也执行)。 这是为了方便盘后联调;要严格管控,把它们改回「是」。
联调方式会真实报单吗受限条件用来验什么
工作台「发送测试信号」不会 无:探针不取价、不报单「中转站 → QMT」这一段,任何时间都可点
聚宽研究环境 _jqr_e2e_test()不会 无完整三跳「聚宽 → 中转站 → QMT」
工作台「实盘下单(100股)」会 必须带精确价格;走完整风控passorder 那一段到底通不通
面板「[测试] 测试模式 = 是」会 放开信号时效与交易时段;每笔固定 100 股用模拟账号做压力验证

不管你用哪种方式,策略跑起来后工作台「QMT 连接」都应变成已连接, 信号状态从 待领取 → 已领取 → 已完成 依次推进。 只想先看链路、不报单?把面板 [测试] 空跑模式 临时改成「是」即可。

第 5 步 · 上线前确认

  1. 用最小数量发一条真实信号(工作台「实盘下单」按钮,或聚宽策略), 去 QMT 委托列表核对方向 / 价格 / 数量是否符合预期,核对完自行撤单。
  2. 确认参数面板 [测试] 空跑模式 = 否、[风控] 仅交易时段下单 是你想要的档位。
  3. 确认风控参数(单笔金额上限 / 单笔股数上限)已按资金量设好,再按正常仓位使用。
执行前务必确认 QMT 登录的是你要用的那个账号。 另外「测试模式」虽然叫测试,但它仍会真实报单(每笔固定 100 股), 请配合模拟账户使用。

参数改在哪?

跟单策略自己的面板(QMT 里):下单模式、报价方式、价格笼子、资金使用比例、 信号时效、空跑/测试模式、自动撤单、废单重试、通知渠道。

网站工作台:单笔金额上限、日委托笔数上限、单票集中度、总仓位上限、 日内亏损熔断、价格偏离校验。改完不用动 QMT —— 策略每 30 秒发一次心跳,会自动把新参数领回去。

两层风控是互补的:服务端管「这条信号该不该发」,QMT 侧管 「以我现在的持仓和资金,这单到底下多少」。

上线前的自检清单

QMT 日志出现 [follower] alive 存活行
参数面板的通道令牌不是空的(没有 placeholder 告警)
工作台显示「QMT 连接 / 已连接」
单轮执行:一条信号 → 一笔委托
重复推送只成交一笔(signal_id 幂等生效)
断网恢复后能自动继续领取
风控生效(超金额被拒、超笔数被拒、超时效被拒)
单笔金额上限与单笔股数上限已按资金量设好
已确认空跑模式 = 否(出厂默认);需要纯日志联调时临时改「是」
已确认「仅交易时段下单」是你想要的档位(出厂 = 否)
用「实盘下单」真实下过一笔,并在 QMT 委托列表核对无误
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」,然后重新下载跟单包 (三个文件都要重新放一次)。
  • 保持「单笔金额上限」与「单笔股数上限」为有限值 —— 它们是跟单链路上最后一道闸。
  • 先用仿真账号和最小资金验证,再逐步放大。
?帮助 ◎知识库
帮助