3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,on_order_response 是一个非常重要的委托主推(回调)函数。它的主要作用和优势如下:
on_order_response(context, order_list) 函数会在委托单状态发生变化时被动触发响应。当你的委托单被柜台接收、部分成交、全部成交、撤单或成为废单时,系统会主动将最新的委托单信息通过 order_list 参数推送给该函数。
相比于使用 get_order() 或 get_orders() 主动去查询订单状态,on_order_response 具有显著的优势:
get_order() 等函数通常依赖于引擎的轮询或状态同步,存在一定的延迟。handle_data 或 run_interval 中频繁主动调用查询接口更节省系统资源。order_id 字段会赋值为空字符串 "",因为它们在策略内没有对应的 Order 对象。on_order_response 函数内部再次调用下单接口(如 order()),必须做好逻辑判断(例如使用全局标志位 g.flag),否则新下的单又会触发主推,从而导致无限迭代的死循环。def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
g.flag = 0 # 用于防止死循环的标志位
def on_order_response(context, order_list):
log.info("收到委托主推: %s" % order_list)
# 示例:收到主推后,如果还没下过第二笔单,则触发下单
if g.flag == 0:
order('600570.SS', 100)
g.flag = 1
else:
log.info("已处理完毕,不再下单")
def handle_data(context, data):
# 初始触发一笔委托
if g.flag == 0:
order('600570.SS', 100)