passorder 是 QMT 内置 Python 中最底层的下单函数,通过指定操作类型、订单类型、账户、证券代码、价格类型等参数向交易服务器发送委托。该函数为异步执行——调用后立即返回,不等待交易所撮合结果,实际成交状态通过 order_callbackdeal_callback 回调函数通知。

QMT passorder 函数原型与适用环境

【事实】 函数原型:

passorder(opType, orderType, accountid, orderCode, prType, price, volume, strategyName, quickTrade, userOrderId, optional)

【事实】 适用环境与权限要求:

环境 是否支持 说明
回测环境 支持 模拟撮合,不发送真实委托
模拟信号环境 支持 生成信号但不实际下单(取决于配置)
仿真交易环境 支持 向仿真服务器发送委托
真实交易环境 支持 向交易所发送真实委托
所需权限 交易权限 需在客户端中开通对应账户的交易权限

【建议】 在真实交易环境使用前,务必先在回测环境和仿真交易环境中充分验证策略逻辑。

QMT passorder 参数详解

opType — 操作类型

【事实】 opTypeint 类型,指定买卖方向及操作类别。

含义 说明
0 买入 普通买入
1 卖出 普通卖出
2 融资买入 信用账户融资买入
3 融券卖出 信用账户融券卖出
4 买券还券 信用账户买券还券
5 卖券还款 信用账户卖券还款
6 现券还券 信用账户现券还券
23 申购 ETF/基金申购
24 赎回 ETF/基金赎回
25 合并 期权合并
26 拆分 期权拆分
27 现金认购 现金认购
28 证券认购 证券认购
29 现金赎回 现金赎回
30 证券赎回 证券赎回

orderType — 订单类型

【事实】 orderTypeint 类型,指定交易品种所属的市场类别。

含义
0 股票
1 期货
2 期权
3 融资融券
4 沪港通
5 询价
6 上交所 fdr
7 深交所 fdr
8 ETF 申赎
9 回购
10 结构性互换询价

accountid — 账户 ID

【事实】 accountidstr 类型,指定交易使用的资金账号。该账号需在客户端中已登录并处于连接状态。

【解释】 账号 ID 可通过 ContextInfo.accountid 获取,也可在客户端的交易界面中查看。

orderCode — 证券代码

【事实】 orderCodestr 类型,指定委托的证券代码,格式为 代码.市场,如 '600000.SH'(上海)、'000001.SZ'(深圳)。

prType — 价格类型

【事实】 prTypeint 类型,指定委托的报价方式。

含义 说明
0 限价 price 参数指定的价格委托
1 最新价 按当前最新成交价委托
2 市价 按市场价委托
3 五档即成剩撤 最优五档即时成交,剩余撤销
4 五档即成转限价 最优五档即时成交,剩余转限价
5 全额成交或撤销 全额成交或全部撤销

【解释】 不同交易所支持的市价类型有所不同,具体可用类型以当前客户端版本为准。当 prType 为 0(限价)时,委托价格取 price 参数的值;当为其他市价类型时,price 参数通常可设为 0。

price — 委托价格

【事实】 pricefloat 类型,指定委托价格。当 prType 为 0(限价)时该值生效;当为市价类型时该值通常被忽略,可设为 0。

volume — 委托数量

【事实】 volumeint 类型,指定委托数量(股数或手数)。

【建议】 股票买入委托数量需为 100 的整数倍(1 手 = 100 股),卖出时不足 100 股的部分应一次性卖出。

strategyName — 策略名称

【事实】 strategyNamestr 类型,指定策略名称,用于在客户端中标识委托来源。

quickTrade — 快速交易模式

【事实】 quickTradeint 类型,控制下单的触发方式,取值为 0、1 或 2。

含义 触发方式 适用场景
0 弹窗确认 调用后弹出确认窗口,用户手动确认后下单 回测环境、仿真调试
1 立即触发(单标的) 不弹窗,在当前 Bar 立即触发下单 盘中实盘快速下单(仅单标的)
2 回调触发 不弹窗,在回调函数或定时任务中触发下单 回调函数、定时任务中下单

【解释】 三种模式的详细区别:

  • quickTrade=0:调用 passorder 后,客户端弹出委托确认窗口。在回测环境中,弹窗由系统自动确认;在仿真和真实交易环境中,需要用户手动点击确认。该模式适合回测和仿真调试阶段,可人工干预防止误操作。

  • quickTrade=1:调用 passorder 后不弹窗,在当前 Bar 立即执行下单逻辑。仅支持单标的(每次调用只传一个证券代码)。适合盘中需要快速反应的场景。使用该模式需确保策略中已正确设置账户和交易权限。

  • quickTrade=2:调用 passorder 后不弹窗,在回调函数(如 order_callbackdeal_callback)或通过 ContextInfo.run_time 设置的定时任务中触发下单。适合需要异步处理或周期性下单的场景。

【建议】 真实交易环境中推荐使用 quickTrade=2,在 handlebar 中通过 ContextInfo.run_time 设定的定时任务调用 passorder,可兼顾灵活性和安全性。

userOrderId — 自定义委托号

【事实】 userOrderIdint 类型,用户自定义的委托编号,用于在回调中识别委托来源。可设为 0 表示不使用。

optional — 可选参数

【事实】 optional 为可选参数,类型和用途以当前客户端版本为准。通常可传入 None 或不传。

QMT passorder 返回值说明

【事实】 passorder 函数无返回值(返回 None)。函数调用后立即返回,委托的执行状态通过回调函数异步通知。

【解释】 如需获取委托结果,应在 order_callback 中处理委托状态变化,在 deal_callback 中处理成交回报。

QMT passorder 执行机制

【事实】 passorder 采用异步执行机制:

  1. 函数被调用后,将委托请求发送至交易服务器(或回测引擎)
  2. 函数立即返回,不阻塞当前策略执行
  3. 交易服务器处理委托后,通过回调函数通知结果
  4. order_callback 收到委托状态变化通知
  5. deal_callback 收到成交回报通知

【解释】 异步机制意味着在 handlebar 中调用 passorder 后,同一根 Bar 内无法立即获取成交结果。如需在同一根 Bar 内判断成交状态,应使用 get_trade_detail_data 查询。

QMT passorder 最小示例代码

以下为完整的可运行示例,展示在 handlebar 中以限价买入 100 股 600000.SH

# -*- coding: utf-8 -*- def init(ContextInfo): """策略初始化""" ContextInfo.accountid = 'YOUR_ACCOUNT_ID' # 替换为实际资金账号 # 设置定时任务,每日 09:35 执行 ContextInfo.run_time('my_trade_task', '35min9?09:00-15:00', '20200101', '20991231') def my_trade_task(ContextInfo): """定时任务:执行下单""" accountid = ContextInfo.accountid stock_code = '600000.SH' # 买入 100 股,限价 10.50 元 passorder( 0, # opType: 买入 0, # orderType: 股票 accountid, # accountid: 资金账号 stock_code, # orderCode: 证券代码 0, # prType: 限价 10.50, # price: 委托价格 100, # volume: 委托数量 'my_strategy', # strategyName: 策略名称 2, # quickTrade: 回调触发 1001, # userOrderId: 自定义委托号 None # optional: 可选参数 ) print(f'已发送买入委托: {stock_code} 100股 @ 10.50') def handlebar(ContextInfo): """K 线回调""" pass def order_callback(ContextInfo, order_info): """委托状态变化回调""" print(f'委托回调: 代码={order_info.m_strStockCode}, ' f'状态={order_info.m_nOrderStatus}, ' f'委托号={order_info.m_strOrderSysID}') def deal_callback(ContextInfo, deal_info): """成交回报回调""" print(f'成交回调: 代码={deal_info.m_strStockCode}, ' f'价格={deal_info.m_dPrice}, ' f'数量={deal_info.m_nVolume}')

QMT passorder 预期日志输出

运行上述示例后,预期日志输出如下(具体内容以实际运行为准):

已发送买入委托: 600000.SH 100股 @ 10.50 委托回调: 代码=600000.SH, 状态=50, 委托号=202608040000001 委托回调: 代码=600000.SH, 状态=55, 委托号=202608040000001 成交回调: 代码=600000.SH, 价格=10.50, 数量=100

【解释】 日志含义:

日志行 含义
已发送买入委托... passorder 调用成功,委托请求已发送
状态=50 委托已提交至交易服务器
状态=55 委托已确认
成交回调... 委托已成交,成交价为 10.50,数量 100 股

QMT passorder 常见错误

错误现象 可能原因 解决方法
委托被拒,提示价格异常 委托价格超出涨跌停板限制 检查委托价格是否在当日涨跌停范围内
委托被拒,提示数量不合法 买入数量不是 100 的整数倍 确保买入数量为 100 的整数倍
委托被拒,提示资金不足 账户可用资金不足以支付委托金额 下单前检查可用资金,或减少委托数量
委托被拒,提示持仓不足 卖出数量超过可用持仓 下单前检查可用持仓数量
委托无响应,无回调 交易账户未连接或未登录 确认客户端中交易账户已登录并处于连接状态
弹窗不出现 quickTrade 设置为 1 或 2 该行为符合预期,quickTrade=1/2 不弹窗
委托状态一直为待报 非交易时间段下单 确认在交易时间段内下单
提示账号类型不匹配 orderType 与账号类型不一致 确认 orderType 与账号类型对应(如信用账户用 3)

【建议】 在策略中加入资金和持仓检查逻辑,避免因资金不足或持仓不足导致委托被拒:

def safe_buy(ContextInfo, accountid, stock_code, price, volume): """安全买入:检查资金后下单""" # 获取账户资产 acct_data = get_trade_detail_data(accountid, 'ACCOUNT', 'STOCK') if not acct_data: print('无法获取账户信息,可能账户未连接') return False available = acct_data[0].m_dAvailable cost = price * volume if available < cost: print(f'可用资金不足: 需要 {cost:.2f}, 可用 {available:.2f}') return False # 发送委托 passorder(0, 0, accountid, stock_code, 0, price, volume, 'safe_buy', 2, 0, None) return True

QMT passorder 回测与盘中差异

【事实】 回测环境与盘中(仿真/真实交易)环境的主要差异:

对比项 回测环境 盘中环境
委托发送 不发送真实委托,由回测引擎模拟撮合 向交易服务器发送真实委托
成交价格 根据回测设置(如按收盘价、开盘价等)撮合 由交易所实际撮合决定
成交时间 在当前 Bar 或下一 Bar 撮合 取决于市场流动性
quickTrade=0 弹窗自动确认 需要手动确认
quickTrade=1 在当前 Bar 模拟触发 在当前 Bar 立即触发
回调函数 回测引擎模拟触发 交易服务器实际触发
滑点 可通过回测参数设置 实际市场滑点
手续费 按回测参数计算 按实际费率收取

【建议】 从回测迁移到实盘时,重点关注以下差异: 1. 回测中的成交假设(如按收盘价成交)在实盘中可能无法实现 2. 实盘中的滑点和手续费可能与回测设置不同 3. 实盘中需要处理网络延迟、委托排队等情况 4. 建议先在仿真交易环境中验证,再切换至真实交易环境

QMT passorder 版本差异说明

【事实】 passorder 函数在不同客户端版本中可能存在以下差异:

  • 部分旧版本不支持 optional 参数
  • quickTrade=1 的单标的限制在不同版本中实现细节可能不同
  • 部分价格类型(prType)的支持范围随交易所规则调整而变化
  • 操作类型(opType)的可用值随业务扩展可能增加

【建议】 具体参数支持范围以当前客户端版本为准。升级客户端版本后,建议重新验证策略中的 passorder 调用逻辑。

QMT passorder 相关函数

函数 说明 链接
get_trade_detail_data 获取交易明细数据(资产、持仓、委托、成交) get_trade_detail_data
order_callback 委托状态变化回调函数 委托回调
deal_callback 成交回报回调函数 委托回调
ContextInfo.cancel 撤销委托 交易与账户
ContextInfo.order_volume 按数量下单(封装函数) 交易与账户

QMT passorder 来源与更新时间

【事实】 本页面内容基于 QMT 官方文档整理。

项目
数据来源 QMT 官方文档
更新时间 2026-08-04
验证时间 2026-08-04
适用版本 以当前客户端版本为准