问题描述
想了解盘后事件函数的使用场景
解决方案
PTrade after_trading_end 函数详解
在 PTrade 量化交易引擎中,策略的运行基于事件驱动框架。after_trading_end 是四大核心事件函数之一(盘后事件),专门用于处理每个交易日收盘后的逻辑。
1. 函数的作用
after_trading_end(context, data) 函数会在每天交易结束之后被调用,主要用于处理每天收盘后的收尾操作。如果你的策略不需要进行盘后处理,这个函数是可选的,可以在策略代码中不进行定义。
2. 执行时间
- 执行频率:每个交易日只会执行一次。
- 具体时间:执行时间由券商的实际配置决定,一般默认在 15:30 左右触发。
3. 典型使用场景
盘后事件函数非常适合执行那些不需要在盘中高频触发,但对策略复盘和次日准备至关重要的任务:
- 盘后数据统计与对账:
- 调用
get_trades_file()获取当天的对账数据文件(CSV格式),用于核对订单和成交。 - 调用
get_deliver()获取历史交割单信息。 - 调用
get_fundjour()获取资金流水信息。
- 调用
- 策略状态持久化:
- 将策略运行过程中产生的中间变量(如自定义的仓龄记录、动态计算的阈值等)通过
pickle模块保存到本地,确保第二天重启策略时逻辑连贯。
- 将策略运行过程中产生的中间变量(如自定义的仓龄记录、动态计算的阈值等)通过
- 盘后固定价格委托:
- 虽然盘后固定价委托(如科创板/创业板)通常在 15:00-15:30 进行,但可以在盘后事件中对当天的委托结果进行最终确认。
- 发送交易总结报告:
- 统计当天的盈亏、持仓变化,并通过邮件或企业微信发送给策略管理者。
4. 可调用的 API 接口
在 after_trading_end 函数中,不能调用下单接口(如 order),但可以调用大量查询类接口,例如:
- 账户与订单查询:
get_open_orders,get_individual_entrust,get_individual_transcation - 行情与基础数据:
get_history,get_price,get_stock_info,get_fundamentals - 其他:
get_trades_file,get_deliver,get_fundjour,get_research_path等。
5. 代码示例
以下是一个包含 after_trading_end 的简单策略框架示例:
def initialize(context):
# 初始化全局变量和股票池
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 盘中交易逻辑
pass
def after_trading_end(context, data):
# 盘后处理逻辑
log.info("交易日结束,开始执行盘后处理...")
# 1. 打印当天关注标的的信息
log.info("今日关注标的: %s" % g.security)
# 2. 获取并打印当天未完成的订单
open_orders = get_open_orders()
log.info("今日未完成订单: %s" % open_orders)
# 3. 获取对账文件路径
try:
file_path = get_trades_file()
log.info("今日对账文件已生成,路径为: %s" % file_path)
except Exception as e:
log.error("获取对账文件失败: %s" % e)
总结:after_trading_end 是 PTrade 策略中用于“打扫战场”的函数,合理利用它可以让你的量化策略更加健壮,便于后期的归因分析与实盘监控。