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

ptrade 平台 before_trading_start 盘前函数执行时间详解与定点执行方案

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

问题描述

def before_trading_start(context, data):盘前函数可以定点执行吗

解决方案

在 ptrade 平台中,before_trading_start(context, data) 函数本身不能随意指定时间执行,它有系统默认的触发时间。但如果您需要盘前定点执行某些逻辑,可以通过 run_daily 函数来实现。

1. before_trading_start 的默认执行时间

根据 ptrade API 文档,before_trading_start 的执行时间如下:

  • 回测环境:在每个回测交易日的 8:30分 执行。
  • 交易(实盘/模拟)环境:在开启交易时立即执行一次,从隔日开始每天 9:10分(默认)执行。

注意:当在9:10前开启交易时,受行情未更新原因,在该函数内调用实时行情接口会导致数据有误。

2. 盘前定点执行的替代方案:使用 run_daily

如果您希望在盘前的特定时间(例如 09:15 或 09:25)执行某个函数,可以在 initialize 中使用 run_daily 进行定时任务配置。ptrade 的交易环境支持运行在 run_daily 中指定盘前时间运行的函数。

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 使用 run_daily 设置盘前定点执行(例如每天 09:15 执行)
    run_daily(context, my_pre_market_func, time='09:15')

def my_pre_market_func(context):
    # 这里编写您需要在 09:15 执行的盘前逻辑
    log.info("盘前定点任务执行,当前时间:09:15")
    # 获取昨日收盘价等操作
    history = get_history(1, '1d', 'close', g.security)
    log.info(history)

def before_trading_start(context, data):
    # 这里依然可以放置每天 9:10 默认执行的初始化逻辑
    log.info("执行默认盘前函数 before_trading_start")

def handle_data(context, data):
    pass

总结

  • before_trading_start 只能在系统默认时间(回测8:30,实盘默认9:10)执行。
  • 盘前定点执行 请使用 run_daily(context, func, time='09:xx')initialize 中进行配置。