快速上手:完成中转配置、测试并接入自己的策略
按首次使用顺序创建通道、安装 QMT、运行聚宽自检,并通过网站预检和真实委托验证后接入自己的策略。
先看完成标准
本教程按首次使用的顺序,带你完成一条通道的配置和验证。 你不需要先编写 HTTP 测试脚本,也不需要下载额外的研究测试文件。 需要复制的聚宽接入代码和自检代码,都由你自己的通道工作台提供。
完成后你应当看到:
- 工作台显示 QMT 已连接,账户信息能正常读取。
- 从聚宽研究运行自检,三跳都成功。
- 买卖预检通过,真实委托能在 QMT 柜台找到。
- 自己的策略产生第一条信号时,聚宽、中转站、QMT 三处能对应起来。
“收到信号”“提交委托”“实际成交”是不同结果。不要只凭连接测试成功,就认定自己的策略已能正确交易。
开始前准备好三样东西
- 一个可运行的聚宽策略,以及聚宽研究环境。策略接入测试需要可运行的模拟交易环境。
- 已开通相应权限、能够登录交易账户的 QMT。先确认 QMT 原生资金和持仓页面能刷新。
- 中转站账户和有效的通道服务。
先明确最终要连接的资金账户。模拟账户与实盘账户不能混用配置;下面的真实报单会作用于当前绑定账户。 QMT 的具体菜单名称可能因券商版本不同略有差异,安装时也请参考跟单包内的安装说明。
第一步:创建一条通道
登录中转站,进入“工作台”,创建通道并打开这条通道的详情页。 通道名称用容易识别的策略名称;不要将多个首次接入的策略混在一条通道里排查。
接下来所有操作都在这条通道上完成:
- 复制聚宽接入代码。
- 下载 QMT 跟单包。
- 复制自检代码。
- 查看信号和执行结果。
同一条通道生成的两端材料必须配套。不要复制 A 通道的聚宽代码,又安装 B 通道的跟单包。 如果更换通道 token,旧材料会失效,需要同步更新两端。
第二步:先安装并启动 QMT 跟单策略
在通道详情页“完成基础配置”中点击“下载跟单包”,解压后打开安装说明。 跟单包内的服务器地址和通道令牌已经填好,不需要自己重新输入。
- 在 QMT“模型研究”中新建 Python 策略,名称与包内策略文件名一致。
- 把包内 .py 文件的完整内容复制到策略编辑器,替换示例代码并编译保存。
- 按安装说明把同名 .xml 参数面板放到 QMT 的 python/formulaLayout 目录。
- 在“模型交易”打开策略参数,填写正确的资金账号和账户类型:普通账户通常为 STOCK,两融账户按实际类型设置。
- 核对每手数量、最小价位、单笔上限和资金使用比例,使其符合准备测试的证券与账户。
- 启动策略,查看“策略日志”,应有启动版本和持续的 alive 日志。
仅把 .py 文件复制到目录,不一定完成策略安装。必须在策略列表中找到它,并实际启动模型交易。 资金等待功能需要跟单脚本 3.1.2;使用更新版本时按相应版本说明操作。
回到工作台,等待心跳更新,确认 QMT 显示“已连接”。 如果暂未连接,停在这里检查策略是否启动、地址和通道是否匹配,不继续发送真实订单。
第三步:在聚宽运行一次全链路自检
通道详情页找到“一键全链路测试(聚宽 → 中转站 → QMT)”,点击“复制自检代码”。
- 打开聚宽“研究”,新建 Python Notebook。
- 将工作台复制的完整自检代码粘贴到一个单元格。
- 运行一次,等待输出;回到工作台查看三跳时间轴。
这一过程不用手填 token,不需要上传测试 .py 文件,不需要从 jqdata 导入 read_file/write_file。 自检代码随通道生成,请直接使用工作台当前提供的版本。
通过标准:聚宽到中转站、中转站到 QMT、QMT 回报均显示成功;QMT 回报包含 link OK。 这一步是无交易探针,任何时间可验证,柜台不应产生测试委托。
| 自检卡在哪一跳 | 先检查什么 |
|---|---|
| 聚宽 → 中转站 | 是否复制完整代码、通道服务是否有效、聚宽请求是否成功 |
| 中转站 → QMT | 跟单策略是否运行、是否下载了同一通道的包、QMT 是否在线 |
| QMT 回报 | QMT 策略日志和网络异常;不要连续新建测试信号 |
工作台“发送测试信号”只验证中转站到 QMT,不能替代这里从聚宽发起的全链路自检。
第四步:用网站测试台检查账户是否能交易
回到通道详情页,点击“打开测试台”。 测试台里有方向、股票代码、数量、价格,以及三个动作:发送测试信号、预检(不下单)、实盘报单。
先选“买入”,填写你准备测试的证券和明确的数量,再点击“预检(不下单)”。 再选“卖出”,使用 QMT 账户中已有可卖持仓的证券,填写不超过可卖数量的测试数量,做一次预检。 也可以从工作台持仓列表点击标的,将它带入卖出测试。
第一次测试不要把数量留空。留空可能使用执行端的仓位口径,不适合作为小额验收参数。 预检可以触发而不实际下单,但交易时段、行情和账户数据会影响结论。 建议在交易时段用当前参数做最终预检;非交易时段的拒绝结论不能直接认定账户故障。
通过标准:回执显示预检“可执行”,没有账户读取、价格、数量、持仓、资金或风控拒绝。 它只说明当时的决策检查通过,还没有验证券商实际接单。
遇到以下报错先处理,不要关闭资金保护来强行报单:
- cannot read ACCOUNT:读取不到账户资金,不等于资金不足。检查交易登录、资金账号、账户类型和资金页面是否能刷新。
- position lookup unreadable:持仓接口读取失败,先恢复账户查询。
- no position / frozen:检查持仓是否真实存在、是否有可卖数量、是否已被其他委托占用。
- no valid price:检查行情订阅、证券代码和报价参数。
- 预检按钮不可用:检查当前跟单包是否支持预检,以及更新脚本后是否已重新启动并上报心跳。
第五步:在测试台验证一笔真实委托
确认绑定账户正确,在实际交易日的交易时段完成这一步。 如果尚未熟悉操作,先在模拟账户走一遍。
- 服务端制动关闭;QMT DRY_RUN=0、TEST_MODE=0。
- 选“买入”,填写自己选定的证券、符合申报规则的少量数量,以及当前有效限价。
- 检查可用资金足够。默认资金比例为 80%,需同时考虑比例限制和手续费余量。
- 再做一次同参数预检,确认通过后点击“实盘报单”,核对页面确认内容。
- 查看测试回执和“最近策略信号”,随后到 QMT“委托”页面核对实际证券、方向、数量、价格及委托编号。
只触发一次。点击后先查看原信号,不因页面短暂等待就再次点击。 acked 或“已收到”不能独立证明真实委托已提交;无交易回报也会使用 acked。 必须看到券商委托并核对参数,才算真实报单通路通过。
如果还要验证卖出,在测试台切换方向,使用已有可卖持仓做一次同样的流程。 限价挂单不保证成交;“委托验证通过、尚未成交”和“成交验证通过”应分别记录。 未成交委托需要自己在 QMT 核对和处理,不能把停止测试工具当作已经撤单。
第六步:接入自己的聚宽策略
通信和账户报单通路通过后,回到同一通道详情页,点击“一键复制聚宽代码”。 保存自己的原策略副本,将复制的完整接入代码按其说明粘贴到策略最前面,编译检查。 不要把 QMT 的跟单源码粘到聚宽,也不要改成另一通道的 token。
先让自己的策略在聚宽模拟交易环境产生一轮正常信号,核对:
| 位置 | 应看到的证据 |
|---|---|
| 聚宽策略日志 | 买卖方向、证券、数量/参考价,以及推送结果 |
| 中转站最近策略信号 | 对应策略信号入队、QMT 领取与执行回报 |
| QMT 委托与成交 | 实际报单参数;成交后再核对成交量和持仓变化 |
第一轮检查建议让 QMT 先使用模拟账户;如果当前 QMT 绑定实盘,聚宽模拟策略产生的信号也可能在 QMT 实盘报单。 “聚宽模拟运行”并不自动让 QMT 变成模拟交易。 只想观察意图时可开启制动/空跑,但这种回报不能替代第五步的真实委托验收。
手动测试台证明的是中转站到券商的通路,第三步证明聚宽到中转站的通信。 自己的策略仍需验证接入包装是否正确产生信号,尤其是清仓目标、子账户 pindex、数量和价格口径。 不要为了触发测试随意修改策略条件,等待策略正常产生信号即可。
第七步:确认可以进入正常使用
逐项确认:
- 同一通道的聚宽代码和 QMT 包已配套配置。
- 聚宽全链路自检通过,账户数据和买卖预检正常。
- 券商实际委托已核对;需要成交验证的订单已有对应成交证据。
- 自己策略第一轮信号的方向、数量、价格和账户一致。
- 测试挂单及待处理信号已检查,避免与业务策略重叠。
满足以上条件后,按既定策略运行自己的业务通道。保持 QMT 在线,并观察首次运行的回报。
满仓换仓:什么时候需要额外测试
只有策略会在满仓时卖出旧标的并买入新标的,才需要额外验证资金等待。 不要把这个进阶测试作为所有新客户的首次配置步骤。
3.1.2 中,待处理卖单优先;买单资金不足会进入等待,每轮按实际可用资金重新判断。 卖单提交不代表资金释放,必须实际成交、资金更新。 默认资金使用比例仍为 80%,买单还必须满足该比例及目标数量。 等待沿用信号时效,默认 120 秒;到期后旧买单不再继续执行。
先在模拟账户使用自己的换仓策略验证“卖出成交 → 可用资金更新 → 买单提交”。 网站测试台的单笔点击不是同时调仓批次,不能通过快速连点来代替策略同批信号测试。 如果只看到资金等待,尚未证明资金释放后的买入已通过;需要保留最终委托/成交证据。
查错时用这张表
| 状态或日志 | 含义 | 下一步 |
|---|---|---|
| pending | 已入队,尚未完成 | 查 QMT 在线、策略运行及是否正在冷却等待 |
| link OK | 探针回报正常 | 继续做账户预检,不宣告实盘报单通过 |
| waiting for sell proceeds | 资金可读但不够 | 查卖出是否成交、实际可用资金及比例 |
| cannot read ACCOUNT | 资金数据不可读 | 修复交易登录/账号/类型或查询连接 |
| NoneType ... request_id | QMT 查询内部对象异常 | 查看交易连接及策略日志,不能只凭这行确定根因 |
| Retryable / 待自动重投 | 系统可能再次尝试 | 查原信号状态,不再补发同一交易意图 |
| expired / failed | 原信号已结束 | 查是否存在在途委托,再决定是否重新测试 |
| 已报单未成交 | 柜台已有委托 | 查委托状态;不要重新发单冒充成交重试 |
如果需要协助,提供通道名称、测试时间、信号编号、完整失败文案和 QMT 对应日志。 截图前遮住资金账号及通道 token。排查时不要同时切换通道、重装脚本和重复发单,避免证据无法对应。
需要详细安装说明时
- [聚宽侧配置及测试](./tutorial-2-joinquant)
- [中转站配置及测试](./tutorial-3-relay)
- [QMT 安装与参数说明](./tutorial-4-qmt)
