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

PTrade 策略引擎中有哪些事件函数?完整框架解析

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

问题描述

PTrade策略引擎中有哪些事件函数,完整的框架是什么?

想了解ptrade完整的策略引擎框架

解决方案

PTrade 量化引擎以事件触发为基础,通过在特定的时间点或行情变化时触发相应的函数来完成交易逻辑。一个完整的 PTrade 策略框架主要由初始化、盘前、盘中、盘后等事件函数构成。

以下是 PTrade 策略引擎的完整框架及各事件函数的详细介绍:

一、 核心事件函数(按执行顺序)

1. initialize(context) —— 初始化事件(必选)

  • 触发时机:策略启动时(回测和交易启动时)仅运行一次。
  • 功能:用于初始化全局变量(如 g.xxx)、设置股票池(set_universe)、设置基准、费率、滑点以及注册定时任务(run_daily, run_interval)等。
  • 注意:这是策略运行唯二必须定义的函数之一。

2. before_trading_start(context, data) —— 盘前事件(可选)

  • 触发时机:每天交易开始前调用一次。回测中通常在 8:30 执行;实盘交易中从隔日开始每天 9:10 执行。
  • 功能:用于处理每天开盘前需要初始化的信息,如获取历史数据、计算昨日指标、更新股票池等。

3. handle_data(context, data) —— 盘中事件(必选)

  • 触发时机:在交易时间内按指定的周期频率(日线或分钟线)运行。日线策略每天执行一次(回测15:00,实盘尾盘);分钟策略每分钟执行一次。
  • 功能:策略的核心交易逻辑处理模块。根据传入的 data(当前周期的行情数据)进行条件判断并执行下单操作(如 order)。
  • 注意:这是策略运行唯二必须定义的函数之一。

4. after_trading_end(context, data) —— 盘后事件(可选)

  • 触发时机:每天交易结束后调用一次(通常为 15:30)。
  • 功能:用于处理收盘后的清算、日志记录、数据落地保存或盘后分析等操作。

二、 高频与主推事件函数(可选,主要用于实盘交易)

5. tick_data(context, data) —— Tick 级盘中事件

  • 触发时机:交易时间内每隔 3 秒执行一次(需开通 Level2 行情)。
  • 功能:用于处理 Tick 级别的极高频策略逻辑,包含逐笔委托、逐笔成交和当前 Tick 快照数据。只能使用 order_tick 进行下单。

6. on_order_response(context, order_list) —— 委托主推事件

  • 触发时机:当委托单状态发生变化时立即回调。
  • 功能:比轮询查询订单状态更快,适合对速度要求极高的策略,用于实时监控订单的报出、撤销或废单情况。

7. on_trade_response(context, trade_list) —— 成交主推事件

  • 触发时机:当委托单发生实际成交时立即回调。
  • 功能:实时获取成交回报,用于快速更新持仓状态或触发后续的连环交易逻辑。

三、 定时任务函数(在 initialize 中注册)

除了上述固定的生命周期事件,PTrade 还支持自定义定时任务:

  • run_daily(context, func, time):按日周期在指定时间(如 time='09:31')触发自定义函数。
  • run_interval(context, func, seconds):按设定的秒数间隔(最小3秒)循环触发自定义函数(仅交易模块可用)。

四、 完整策略框架代码示例

def initialize(context):
    # 1. 初始化:设置股票池和全局变量
    g.security = '600570.SS'
    set_universe(g.security)
    # 注册定时任务,每天 14:50 执行
    run_daily(context, my_daily_task, time='14:50')

def before_trading_start(context, data):
    # 2. 盘前处理:打印日志或获取昨日数据
    log.info("盘前准备,当前标的: %s" % g.security)

def handle_data(context, data):
    # 3. 盘中处理:核心交易逻辑
    current_price = data[g.security]['close']
    if current_price > 40:
        order(g.security, 100)
        log.info("价格突破40,买入100股")

def after_trading_end(context, data):
    # 4. 盘后处理:总结当日交易
    log.info("今日交易结束,进行盘后清算")

def my_daily_task(context):
    # 自定义定时任务逻辑
    log.info("执行尾盘定时任务")

总结:PTrade 的策略引擎通过 initialize -> before_trading_start -> handle_data (或 tick_data/定时任务) -> after_trading_end 构成了一个完整的时间轴闭环,开发者只需在对应的事件函数中填入业务逻辑即可实现自动化交易。