🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

PTrade量化平台中委托主推与交易主推事件详解及区别

ptrade | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

PTrade中委托主推和交易主推事件有什么区别?

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,此时:

  1. on_order_response(委托回调)中,该订单的状态 status 可能是 '2'(已报)
  2. 随后在 on_trade_response(成交回调)中,该订单的状态 status 会更新为 '9'(废单)

因此,编写严谨的策略时,不能仅依赖委托主推来判断订单是否有效,必须结合成交主推来确认最终的成交或废单结果。