PTrade中除了四个主要事件函数外还支持哪些事件?
问题描述
解决方案
在PTrade量化引擎中,除了最基础的四个主要事件函数(initialize、before_trading_start、handle_data、after_trading_end)之外,为了满足更高频和更精细的交易需求,还支持以下几个重要的事件函数:
1. tick_data(context, data) - Tick级别数据处理
- 使用场景:仅在交易模块可用。
- 功能说明:用于处理tick级别的策略交易逻辑,每隔3秒执行一次。如果策略对速度要求极高,需要基于逐笔委托、逐笔成交或Tick快照进行判断,则必须使用此函数。
- 注意事项:
- 执行时间为 9:30 -- 14:59。
- 在该函数中只能使用
order_tick进行对应的下单操作。 - 参数
data中包含的逐笔委托(order)、逐笔成交(transcation)数据需开通Level2行情才有数据推送。
2. on_order_response(context, order_list) - 委托主推事件
- 使用场景:仅在交易模块可用。
- 功能说明:该函数会在委托主推回调时响应。相比于引擎轮询或调用
get_order()/get_orders()函数,它更新Order状态的速度更快,非常适合对速度要求比较高的策略。 - 注意事项:
- 目前可接收股票、可转债、ETF、LOF、期货代码的主推数据。
- 当在主推里调用委托接口时,需要进行判断处理,避免无限迭代循环下单的问题。
3. on_trade_response(context, trade_list) - 成交主推事件
- 使用场景:仅在交易模块可用。
- 功能说明:该函数会在成交主推回调时响应。与委托主推类似,它能以最快速度获取订单的成交状态变化,适合高频或需要立即根据成交结果进行下一步操作的策略。
- 注意事项:
- 同样需要注意避免在回调中无条件触发新的委托,导致死循环。
补充:定时触发机制
除了上述被动触发的事件函数外,PTrade还支持通过在 initialize 中设定定时任务来主动触发自定义函数:
run_daily(context, func, time):按日周期在指定时间点(如time='09:31')触发自定义函数。run_interval(context, func, seconds):按设定的时间间隔(如seconds=10,最小3秒)周期性触发自定义函数,仅交易模块可用。
合理利用这些高级事件和定时机制,可以极大地丰富PTrade策略的交易维度和响应速度。