问题描述
on_order_response和on_trade_response分别处理什么信息
解决方案
在 PTrade 量化交易平台中,on_order_response(委托主推)和 on_trade_response(交易/成交主推)是两个非常重要的异步回调事件。它们的主要作用是在订单状态或成交状态发生变化时,第一时间通知策略,其响应速度比轮询调用 get_orders() 或 get_trades() 更快,非常适合对速度要求较高的高频或微观交易策略。
以下是两者的核心区别及分别处理的信息:
1. on_order_response(委托主推)
- 触发时机:当委托单(Order)本身的状态发生变化时触发。例如:策略刚刚发出委托(待报/已报)、委托被交易所确认、委托被撤销(已撤/部撤)等。
- 处理的信息:主要处理订单层面的元数据。回调参数
order_list包含发生变化的委托单列表,每个委托单以字典形式展现,包含以下关键信息:entrust_no:委托编号status:委托状态(如 '2'已报, '6'已撤, '9'废单等)price/amount:委托价格与委托数量entrust_type/entrust_prop:委托类别与属性error_info:错误信息(如果有)
- 适用场景:用于监控订单是否成功到达柜台、是否被拒单、撤单操作是否成功执行等。
2. on_trade_response(交易/成交主推)
- 触发时机:当**委托单发生实际的资金/筹码交收(即撮合成交)**时触发。例如:订单部分成交(部成)、全部成交(已成)。
- 处理的信息:主要处理成交层面的具体数据。回调参数
trade_list包含发生变化的成交单列表,每个成交单以字典形式展现,包含以下关键信息:business_price:实际成交价格business_amount:实际成交数量business_balance:实际成交金额business_id:成交编号entrust_bs:成交方向(1-买,2-卖)
- 适用场景:用于精确计算持仓成本、确认实际买入/卖出的数量、在订单成交后立即触发下一步的交易逻辑(如网格交易中的买入成交后立刻挂出卖单)。
核心区别总结
| 特性 | on_order_response (委托主推) |
on_trade_response (交易/成交主推) |
|---|---|---|
| 关注焦点 | 订单的生命周期(报单、撤单、状态流转) | 实际的撮合成交(买到了多少、卖了多少) |
| 触发频率 | 较高(每次状态变更都会触发,如待报->已报) | 仅在发生真实成交(或产生废单结果)时触发 |
| 核心字段 | status, amount (委托量), price (委托价) |
business_amount (成交量), business_price (成交价) |
⚠️ 特别注意事项(废单处理)
根据 PTrade 官方文档的提示,对于废单(例如下单价格超过了价格笼子限制),order() 函数依然会返回一个 order_id,此时:
- 在
on_order_response(委托回调)中,该订单的状态status可能是 '2'(已报)。 - 随后在
on_trade_response(成交回调)中,该订单的状态status会更新为 '9'(废单)。
因此,编写严谨的策略时,不能仅依赖委托主推来判断订单是否有效,必须结合成交主推来确认最终的成交或废单结果。