聚宽→QMT 信号同步:延迟优化与实测
这是工程说明,不是荐股。入口仍是 信号同步工具;上手步骤见 聚宽信号接到 QMT。数字来自本站联调实测,环境不同会有偏差。不代操盘。
结论先说
付费档(默认 50 毫秒一轮拉信号,可在转换页自定义;服务器下限约 10 毫秒)在本机 QMT 正常挂着、只开一个执行器时:
- 发信号 → QMT 下单:常见落在几十到一百多毫秒(含 HTTPS 入队与本机轮询)
- 下单后回执:常见约 40~100 毫秒,且不挡下一笔下单
- 顺序:按聚宽发出先后 FIFO;同标的先买后卖
- 去重:同一
signal_id只执行一次;重复清仓不会双卖
免费档仍是约 5 秒一轮,延迟主要卡在轮询间隔,不是下面这些优化项。
优化了什么
早期版本里,体感会像「每笔卡 4~5 秒」。拆开看,瓶颈多半不在 passorder 本身,而在每条信号都同步查仓 + 同步 HTTPS 回执。后来做了这些改动:
| 优化 | 作用 |
|---|---|
| 拉取即出队 | QMT 一拉到信号就从队列拿走,不必等回执才清队,避免重复领取 |
| 回执异步 | 整轮下单后后台批量回执,HTTP 不再堵在下单路径上 |
| HTTP 长连接 | 复用到本站的 TLS 连接,减少反复握手 |
| 买卖不查仓(热路径) | 买入用信号里的价算股数;清仓按本进程记账卖出,少打 get_trade_detail_data |
| FIFO 队列 | Redis RPUSH + 按时间重建,并发下也不倒序 |
| 本地去重 | _done_ids;同标的多余的旧 TARGET_* 在清理时合并 |
| 付费短轮询 | 默认约 50ms 一轮(可自定义再缩短),并带重入锁,避免上一轮没跑完又叠一轮 |
| 墙钟打到毫秒 | 聚宽「发信号」行带毫秒,方便自己对日志 |
改完后请重新转换聚宽代码、重新粘贴 QMT 执行器,旧模板没有异步回执与长连接。
怎么测的
用真实链路做了多轮对照(聚宽模拟盘发单 → 本站入队 → 国金 QMT 模拟端执行):
- 聚宽日志:
KimiQuant 发信号 …(含毫秒) - QMT
FormulaOutput:本轮信号 / 下单 / 回执(含毫秒) - 策略样例含连续买卖、同标的重复清仓,用来看顺序和去重
典型结果(付费档、单 QMT):
- 一批信号里,买卖顺序与聚宽发出顺序一致
- 同标的连发两次清仓:第一次卖出,第二次「无本地仓跳过」,没有双卖
- 回执紧跟下单,间隔多在几十毫秒
- 端到端常见在百毫秒以内;和「几秒一笔」的旧行为不是一个量级
说明:聚宽云端时钟与本机时钟若有偏差,两边时间戳相减可能出现很小的负值,这是时钟差,不是「信号穿越时空」。对延迟结论以数量级为准即可。
可靠性边界(务必看)
这些条件下结果才稳:
- 一个 Token 只挂一台 QMT。两台同时拉,可能抢到同一批信号。
- 付费档才有短轮询(默认 50 毫秒,可自定义);免费档约 5 秒一轮是产品限制。
- 执行器进程重启后,本地仓记账会清空:已有真仓的清仓可能跳过(当前设计是少查仓、求速度)。实盘要自己接受这个取舍,或重启后核对持仓。
- 拉到即出队是至多一次:若领取后、下单前进程崩了,该条不会自动重放(避免双下)。
- 成交仍取决于券商、行情、资金与
passorder规则;信号桥只保证指令按时按序送到本机执行器。
和旧体感对比
| 优化前(常见) | 优化后(付费实测) | |
|---|---|---|
| 每笔额外等待 | 约 4~5 秒(回执/查仓叠在路径上) | 回执异步,约几十毫秒 |
| 多笔堆积 | 容易感觉「永远慢一拍」 | 跟住聚宽发单节奏 |
| 顺序 | 曾出现后进先出 | FIFO,已复测 |
| 重复清仓 | 可能重复打单 | 第二次跳过 |
相关页面
- 工具:聚宽信号同步到 QMT
- 上手:聚宽信号接到 QMT
- 选型:聚宽跟单到自己的 QMT
- 手册:passorder · cancel
搞不定走 关注 留言。完整讨论仍在知识星球。
