QMT 委托状态枚举定义了委托从提交到最终状态的完整生命周期。通过 order_callback 回调函数中的 order_info.m_nOrderStatus 字段,或 get_trade_detail_data 查询委托记录时返回的 m_nOrderStatus 字段,可获取委托的当前状态。本页面列出全部状态码及其含义。
QMT 委托状态枚举完整列表
【事实】 以下为 QMT 委托状态枚举的完整列表:
| 状态码 | 状态名称 | 含义 | 是否终态 |
|---|---|---|---|
| 48 | 待报 | 委托已生成,尚未发送至交易服务器 | 否 |
| 49 | 未报 | 委托未成功报送至交易服务器 | 否 |
| 50 | 已报 | 委托已成功报送至交易服务器 | 否 |
| 51 | 已报待撤 | 委托已报送,用户发起撤单请求,撤单尚未处理 | 否 |
| 52 | 部分成交待撤 | 委托部分成交后,用户发起撤单请求 | 否 |
| 53 | 部分撤单 | 委托部分成交后撤单成功,未成交部分已撤销 | 是 |
| 54 | 已撤 | 委托撤单成功,全部未成交 | 是 |
| 55 | 已报部成 | 委托已报送至交易所并部分成交 | 否 |
| 56 | 部分成交 | 委托部分成交(同已报部成,不同版本命名可能不同) | 否 |
| 57 | 全部成交 | 委托全部成交 | 是 |
| 58 | 已撤 | 委托已撤销(别名) | 是 |
| 59 | 部分撤 | 委托部分撤销 | 是 |
| 60 | 废单 | 委托被交易所或交易服务器拒绝,标记为废单 | 是 |
| 61 | 确认 | 委托已被交易服务器确认 | 否 |
【解释】
- 待报(48):策略调用 passorder 后,委托已生成但尚未发送至交易服务器的中间状态。此状态通常持续时间极短。
- 已报(50):委托已成功发送至交易服务器并等待交易所处理。此状态后委托可能进入部分成交或全部成交。
- 部分成交(56):委托已部分成交,剩余部分仍在交易所等待撮合。
- 全部成交(57):委托已全部成交,为终态状态,不再变化。
- 已撤(54/58):用户主动撤单且撤单成功,为终态状态。
- 废单(60):委托被拒绝(如价格异常、数量不合法等),为终态状态。
- 终态状态:一旦进入终态,委托状态不再发生变化。
【建议】 策略中判断委托是否完成时,应检查终态状态(57 全部成交、54/58 已撤、60 废单),而非仅检查部分成交。
QMT 委托状态流转图
【事实】 委托状态的典型流转路径:
待报(48) → 已报(50) → 部分成交(56) → 全部成交(57)
↘ ↘
已撤(54) 已撤(54)
已报(50) → 废单(60)
已报(50) → 已报待撤(51) → 已撤(54)
部分成交(56) → 部分成交待撤(52) → 部分撤单(53)
【解释】 委托从待报开始,经过已报后可能直接成交(全部成交),也可能部分成交后再全部成交或撤单。废单可能在已报后由交易所拒绝产生。
QMT 委托状态在回调中的使用
【事实】 order_callback 回调函数中通过 order_info.m_nOrderStatus 获取委托状态:
def order_callback(ContextInfo, order_info):
"""委托状态变化回调"""
status = order_info.m_nOrderStatus
stock = order_info.m_strStockCode
if status == 57:
print(f'{stock} 委托全部成交')
elif status == 56:
print(f'{stock} 委托部分成交,已成交 {order_info.m_dTradedVolume}')
elif status == 54 or status == 58:
print(f'{stock} 委托已撤销')
elif status == 60:
print(f'{stock} 委托废单: {order_info.m_strErrorInfo}')
elif status == 50:
print(f'{stock} 委托已报')
else:
print(f'{stock} 委托状态: {status}')
【建议】 在 order_callback 中应处理所有可能的状态,特别是终态状态(全部成交、已撤、废单),避免策略因未处理某些状态而卡住。
QMT 委托状态在查询中的使用
【事实】 使用 get_trade_detail_data 查询委托记录时,可通过 m_nOrderStatus 字段筛选特定状态的委托:
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
accountid = ContextInfo.accountid
order_list = get_trade_detail_data(accountid, 'ORDER', 'STOCK')
# 统计各状态委托数量
status_count = {}
for order in order_list:
status = order.m_nOrderStatus
status_count[status] = status_count.get(status, 0) + 1
for status, count in status_count.items():
status_name = get_status_name(status)
print(f'{status_name}({status}): {count} 笔')
# 筛选未成交委托
pending_orders = [o for o in order_list if o.m_nOrderStatus in (48, 49, 50, 55, 56)]
print(f'未成交委托: {len(pending_orders)} 笔')
# 筛选废单
rejected_orders = [o for o in order_list if o.m_nOrderStatus == 60]
for order in rejected_orders:
print(f'废单: {order.m_strInstrumentID}, '
f'原因: {order.m_strErrorInfo}')
def get_status_name(status):
"""状态码转名称"""
status_map = {
48: '待报',
49: '未报',
50: '已报',
51: '已报待撤',
52: '部分成交待撤',
53: '部分撤单',
54: '已撤',
55: '已报部成',
56: '部分成交',
57: '全部成交',
58: '已撤',
59: '部分撤',
60: '废单',
61: '确认',
}
return status_map.get(status, f'未知({status})')
QMT 委托状态回测与实盘差异
【事实】 委托状态在回测和实盘环境中的差异:
| 对比项 | 回测环境 | 实盘环境 |
|---|---|---|
| 状态数量 | 通常仅出现 50(已报)和 57(全部成交) | 可能出现全部状态码 |
| 废单 | 回测中一般不产生废单 | 实盘中可能因各种原因产生废单 |
| 部分成交 | 取决于回测设置 | 由市场流动性决定 |
| 撤单 | 回测中撤单立即生效 | 实盘中撤单可能失败(如已成交) |
| 状态延迟 | 无延迟,即时更新 | 可能有网络延迟 |
【建议】 策略从回测迁移到实盘时,需确保 order_callback 能正确处理所有状态码,特别是废单(60)和部分成交(56)等在回测中较少出现的状态。
QMT 委托状态注意事项
【事实】 使用委托状态时需注意:
| 注意项 | 说明 |
|---|---|
| 状态码版本差异 | 部分状态码在不同客户端版本中可能不同 |
| 别名状态 | 54 和 58 均表示已撤,56 和 55 均表示部分成交(不同版本命名不同) |
| 状态变化顺序 | 委托状态按生命周期顺序变化,不会回退 |
| 终态判断 | 终态状态包括 57(全部成交)、54/58(已撤)、53(部分撤单)、60(废单) |
| 废单原因 | 废单时可通过 m_strErrorInfo 获取具体原因 |
【建议】 1. 判断委托是否终态时,应检查所有终态状态码,而非仅检查全部成交 2. 不同版本的状态码可能存在差异,建议以当前客户端版本为准 3. 策略中建议维护一个状态码到名称的映射表,便于日志输出和调试
QMT 委托状态相关参考
| 参考内容 | 说明 | 链接 |
|---|---|---|
| passorder | 下单函数 | passorder |
| order_callback | 委托回调函数 | 委托回调 |
| get_trade_detail_data | 查询委托记录 | get_trade_detail_data |
| 账号类型与操作类型 | 账号类型、操作类型、报价类型枚举 | 账号类型 |
| 数据结构与枚举 | Account、Position、Order 对象字段 | 数据结构与枚举 |
QMT 委托状态来源与更新时间
【事实】 本页面内容基于 QMT 官方文档整理。
| 项目 | 值 |
|---|---|
| 数据来源 | QMT 官方文档 |
| 更新时间 | 2026-08-04 |
| 验证时间 | 2026-08-04 |
| 适用版本 | 以当前客户端版本为准 |