问题描述
解决方案
在PTrade量化交易引擎中,策略的运行基于事件触发机制。为了保证策略的正常运行,平台规定了两个必选函数,同时提供了多个可选函数以满足不同复杂度的业务需求。\n\n### 一、 必选函数(必须定义)\n\n一个最基础的PTrade策略必须包含以下两个函数:\n\n1. initialize(context) - 初始化函数\n - 触发时机:仅在回测或交易启动时运行一次。\n - 作用:用于初始化全局变量、设置股票池(set_universe)、设置基准、费率以及定义定时任务(run_daily、run_interval)等。\n \n2. handle_data(context, data) - 盘中处理函数\n - 触发时机:在交易时间内按指定的周期频率(日线或分钟线)运行。\n - 作用:处理策略交易的主要模块。在这里获取行情数据、执行买卖逻辑(如调用 order 系列函数)。\n\n### 二、 可选函数(按需定义)\n\n根据策略的复杂程度,您可以选择性地实现以下事件函数:\n\n1. before_trading_start(context, data) - 盘前处理函数\n - 触发时机:每天开始交易前被调用一次(回测中通常为8:30,实盘中为9:10)。\n - 作用:用于处理每天开盘前需要初始化的信息,如获取昨日收盘数据、更新股票池等。\n\n2. after_trading_end(context, data) - 盘后处理函数\n - 触发时机:每天交易结束后调用一次(通常为15:30)。\n - 作用:用于处理每天收盘后的操作,如盘后清算、数据统计、日志记录或持久化保存。\n\n3. tick_data(context, data) - Tick行情处理函数\n - 触发时机:仅在交易模块可用,每隔3秒执行一次(9:30 - 14:59)。\n - 作用:用于处理Tick级别的极高频交易逻辑,只能使用 order_tick 进行下单。\n\n4. on_order_response(context, order_list) - 委托主推事件\n - 触发时机:当委托单状态发生变化时实时回调。\n - 作用:比轮询 get_orders() 更快地获取订单状态,适合对速度要求高的策略。\n\n5. on_trade_response(context, trade_list) - 成交主推事件\n - 触发时机:当有新成交发生时实时回调。\n - 作用:快速获取成交回报信息。\n\n### 三、 基础策略结构示例\n\npython\n# 必选:初始化\ndef initialize(context):\n g.security = '600570.SS'\n set_universe(g.security)\n\n# 可选:盘前准备\ndef before_trading_start(context, data):\n log.info("盘前准备工作...")\n\n# 必选:盘中交易逻辑\ndef handle_data(context, data):\n order(g.security, 100)\n\n# 可选:盘后总结\ndef after_trading_end(context, data):\n log.info("今日交易结束。")\n