期货报单被拒怎么识别与处理:order 状态与 last_msg 用法

前言

国内期货实盘里,报单不成交是一回事,被柜台或交易所拒绝是另一回事:保证金不足、非交易时段、价格超涨跌停、开平标志错误等,都会让单变成"错单"或快速 FINISHED 且未成交。若策略不读回报,可能以为"已经下单在等",从而阻塞后续逻辑或重复报单。

天勤 TqSdk 的委托对象(get_order 返回)带有 status、last_msg、is_error 等字段(定义见 objs.py 的 Order 类)。下面说明实盘里如何识别拒单、什么情况下可以重报、重报次数上限建议怎么设,无论用手写 insert_order 还是 TargetPosTask 都适用。

一、委托状态字段从哪来

每次 api.wait_update() 后,内存中的 order 对象会更新。刚下单后文档提示各字段可能暂时为空,需继续 wait_update,不要立刻判定失败。

常用字段(以源码为准):

字段 含义(通俗)
status ALIVE 有效在途;FINISHED 已结束
last_msg 委托状态信息文字
volume_left 未成交手数
is_error 是否为错单(注意 False 不代表一定没错,回报可能在途)
is_dead 是否确定不会再成交

策略应在 is_changing(order, "status") 或 last_msg 时记录日志,便于对照期货公司文案。

二、识别拒单示例

python 复制代码
order = api.get_order(order_id)
while True:
    api.wait_update()
    if api.is_changing(order, "status") or api.is_changing(order, "last_msg"):
        print(order.status, order.last_msg, order.volume_left, order.is_error)
        if order.status == "FINISHED" and order.volume_left == order.volume_orign:
            # 可能完全未成交结束,结合 last_msg、is_error 判断
            handle_reject(order)

handle_reject 内解析 last_msg 关键词(团队维护一张"消息→动作"表),不要对所有 FINISHED 无差别重报。

三、要不要重报、重报上限

建议原则:

  1. 不可恢复错误(合约代码错、开平非法):不重报,告警停机。
  2. 资金不足:不重报,减目标仓或停机。
  3. 价格无效:调价后再 set_target_volume,限次数。
  4. 流控:用天勤 TqRuleOrderRateLimit 等风控规则预防(见 risk_rule),而非死循环重报。

重报计数示例:state["retry"] += 1,超过 3 次 set_target_volume(0) 并钉钉告警。

四、TargetPosTask 场景

task 内部报单也产生 order,可通过 get_order 查看。若频繁 FINISHED 未成交,检查 price=ACTIVE/PASSIVE、涨跌停、交易时段。勿同时又手写 insert_order 同一合约。

五、与 get_position 核对

拒单后策略内存目标仓若仍为满仓,应以 get_position 为准 将目标拉回实际,或 set_target_volume(pos.pos) 同步 task。

总结

报单被拒不可怕,可怕的是系统没有把拒单当成流程内事件,而把它当成"没发生/等会儿会好"。把 status、last_msg、is_error 的变化纳入固定处理链路:先在 wait_update 之后识别在途、结束与错单,再按类别做可恢复与不可恢复的分流,同时限制重报次数,避免把报单频率变成新的故障源。最后别忘了把拒单结果反向同步到策略目标(避免 state 还以为已经成交)。当异常都有对应的处理动作与可复盘日志时,你的交易系统才会真正稳定,而不是靠临场经验"猜下次会怎样"。

FAQ

1)刚下单 status 空?

正常,继续 wait_update。

2)部分成交算拒单吗?

volume_left 部分减少,按部分成交专题处理。

3)模拟盘 last_msg 一样吗?

口径接近,实盘以期货公司为准。

4)TqRiskRuleError?

风控规则触发,先查 risk_rule 配置。

风险提示

本文讨论报单处理,不构成投资建议。

相关推荐
SEO_juper7 分钟前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户8356290780511 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
for_ever_love__2 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户8356290780512 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_461769402 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_966949652 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿2 小时前
Python实战第1期:Python环境搭建与第一个程序
python
心易行者2 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
新新学长搞科研3 小时前
【会议征稿】第三届数字经济与计算机科学国际学术会议(DECS 2026)
区块链·计算机科学·数字经济
weixin199701080163 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存