🚀 AI 一键生成 ptrade 策略代码

PTrade 运行机制:before_trading_start 在回测与交易中的时间差异

ptrade | 发布时间: 2025/12/20
以下内容由 EasyQuant 生成。

问题描述

before_trading_start 函数在回测和实盘交易里分别是几点执行的?

解决方案

根据 PTrade API 文档说明,before_trading_start 函数在回测和实盘交易环境中的执行时间如下:

1. 回测环境

  • 执行时间:每个回测交易日的 08:30

2. 实盘交易环境

  • 首日启动时:在点击“启动交易”时 立即执行 一次。
  • 隔日运行时:从策略运行的第二天开始,默认在每天 09:10 执行。

注意事项

  • 实盘启动时间风险:如果在实盘交易中于 09:10 之前 手动启动策略,before_trading_start 会立即执行。此时由于交易所行情尚未更新,在该函数内调用实时行情接口(如 get_snapshot)可能会导致数据有误或获取不到数据。
  • 避免措施:如果需要在盘前获取数据,建议在函数内添加 time.sleep 等待至 09:10 之后,或者将获取实时行情的逻辑放入 run_daily 并指定时间(如 time='09:15')来执行。
  • 重启机制:如果服务器重启拉起交易,默认会再次执行该函数。可以通过在 initialize 中设置 set_parameters(server_restart_not_do_before="1") 来避免重启时重复执行。

Q&A

Q: 实盘交易中,before_trading_start 的执行时间可以修改吗?
A: 不可以,该函数的默认触发时间由柜台系统配置决定(通常为 09:10)。如果需要在特定时间(如 09:25 或 09:30)执行盘前逻辑,建议使用 run_daily(context, func, time='09:25') 来替代。

Q: 在 before_trading_start 中可以进行下单交易吗?
A: 不可以。该函数主要用于盘前的数据初始化和信号计算。如果在回测模式下(08:30 执行)下单,撮合系统尚未开启;在实盘模式下,虽然部分券商支持夜市委托,但通常建议在 handle_data 或定时任务中进行交易操作。

Q: 为什么回测和实盘的时间不一致?
A: 回测为了提高效率,通常在数据准备好后(08:30)尽早开始计算。而实盘交易需要等待券商柜台系统初始化完成以及交易所数据接入,09:10 是一个相对安全且接近开盘的时间点,确保账户信息和基础行情已就绪。