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

PTrade 的 before_trading_start 函数在回测和实盘中执行时间有什么不同?

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

问题描述

PTrade的before_trading_start函数在回测和实盘中执行时间有什么不同?

解决方案

在 PTrade 量化交易平台中,before_trading_start 函数用于在每天开始交易前执行一些初始化操作(如获取盘前数据、更新股票池等)。该函数在回测环境实盘(交易)环境中的执行时间有显著差异,具体如下:

1. 回测环境中的执行时间

在回测模块中,before_trading_start 函数会在每个回测交易日的 8:30 分准时执行。

2. 实盘(交易)环境中的执行时间

在实盘交易模块中,执行时间相对复杂,分为以下两种情况:

  • 首次开启交易时:该函数会在你开启交易的瞬间立即执行一次
  • 后续交易日:从开启交易的隔日开始,该函数默认在每天的 9:10 分执行。

⚠️ 实盘环境的重要注意事项

由于实盘中首次开启交易时会立即执行该函数,如果你在 9:10 之前开启了交易策略,可能会遇到以下问题:

  • 行情数据未更新:此时交易所的最新行情可能尚未推送,如果在 before_trading_start 内调用了实时行情接口(如 get_snapshot 等),可能会获取到错误或昨日的数据。
  • 解决方案
    1. 延迟执行:在函数内部使用 time.sleep() 强制等待至 9:10 分之后再执行获取行情的逻辑。
    2. 改用定时任务:将需要调用实时行情接口的逻辑从 before_trading_start 中移出,改用 run_daily 函数,并指定在 9:15 或更晚的时间执行(例如 run_daily(context, func, time='09:15'))。

总结来说,编写兼容回测与实盘的策略时,务必考虑到实盘中 before_trading_start 可能在行情未就绪时被触发的风险,做好相应的异常处理或逻辑后置。