3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,on_order_response 属于委托主推回调函数,能够在柜台产生委托状态变更时第一时间响应。相比在 handle_data 中轮询 get_order(),使用委托主推能大幅提升订单状态监控的实时性,是低延迟与高可靠性策略的核心组件。
on_order_response(context, order_list) 中的 order_list 是一个包含字典对象的列表,每个字典包含以下关键诊断字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
status |
str | 委托状态,常见取值:'2'(已报)、'6'(已撤)、'7'(部成)、'8'(已成)、'9'(废单) |
error_info |
str | 柜台或系统返回的错误描述信息,若报单正常则为空字符串 "" |
entrust_no |
int/str | 柜台委托编号 |
order_id |
str | 策略内部 Order 订单编号(若接收到策略外交易主推,则为空字符串 "") |
stock_code |
str | 标的代码 |
在交易场景中(如下单价格超出价格笼子、资金不足、超过持仓限制等),订单可能会被柜台拒单或判定为废单:
status == '9'。此时订单已被交易所或柜台拒绝,不会再有后续撮合成交。error_info != "" 或 status == '9' 时,提取 error_info 字段获取具体拒单原因(例如:"超出涨跌停限制"、"可用资金不足")。order_id == "",说明该主推为策略外手动或第三方软件下单回报。以下示例展示了如何在 on_order_response 回调函数中高效捕获废单和报错信息,并进行相应的日志记录与逻辑处理:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 开启接收撤单与第三方主推(可选)
set_parameters(receive_other_response="1", receive_cancel_response="1")
def on_order_response(context, order_list):
for order_info in order_list:
symbol = order_info.get('stock_code')
status = order_info.get('status')
error_msg = order_info.get('error_info')
order_id = order_info.get('order_id')
entrust_no = order_info.get('entrust_no')
# 1. 捕获废单状态 (status == '9')
if status == '9':
log.error(f"[废单告警] 标的: {symbol}, 订单ID: {order_id}, 委托号: {entrust_no}, 错误原因: {error_msg}")
# 此处可触发补单或风控逻辑
# 2. 捕获存在错误信息的异常回报
elif error_msg:
log.warning(f"[委托异常] 标的: {symbol}, 当前状态: {status}, 错误描述: {error_msg}")
# 3. 正常成交/已报等状态处理
else:
if status == '2':
log.info(f"[已报柜台] 标的: {symbol}, 委托号: {entrust_no}")
elif status == '8':
log.info(f"[全部成交] 标的: {symbol}, 委托号: {entrust_no}")
def handle_data(context, data):
# 示例:下单触发
pass
on_order_response 中编写补单逻辑(如废单后自动重新下单),务必加入计数或状态标记,防止因重复拒单导致无限触发下单回路。on_order_response 主要用于监控委托状态,如需精准追踪具体成交价格和金额,建议结合 on_trade_response 回调配合使用。