🚀 AI 一键生成 ptrade 策略代码

Ptrade 中 before_trading_start 能否定时在 9:25 执行?

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

问题描述

before_trading_start(context, data)能否定时在9:25分执行?

/

解决方案

不能直接将 before_trading_start 函数的触发时间修改为 9:25。

根据 Ptrade API 文档的规定,before_trading_start 的执行时间是系统固定的:

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

解决方案:使用 run_daily 实现 9:25 定时执行

如果您希望在盘前 9:25 分准时执行某些逻辑(例如获取集合竞价数据、获取最新的可转债列表等),您应该使用 run_daily 定时任务函数。

您可以在 initialize 函数中配置 run_daily,指定触发时间为 9:25

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 配置定时任务,每天 9:25 执行 my_before_trading_func 函数
    run_daily(context, my_before_trading_func, time='9:25')

def my_before_trading_func(context):
    # 这里编写您希望在 9:25 执行的盘前逻辑
    log.info("现在是 9:25,执行自定义盘前逻辑")
    
    # 例如:获取集合竞价快照
    snapshot = get_snapshot(g.security)
    log.info("9:25 集合竞价快照: %s" % snapshot)

def before_trading_start(context, data):
    # 系统默认的盘前函数,实盘默认 9:10 执行
    # 如果没有需要在 9:10 执行的逻辑,此函数可以留空或不定义
    pass

def handle_data(context, data):
    pass

注意事项

  • 行情数据更新:在实盘中,9:10 之前调用实时行情接口(如 get_snapshot)可能会因为交易所行情未更新而获取到错误或空的数据。因此,将依赖实时行情的盘前逻辑通过 run_daily 延后到 9:25(集合竞价期间)执行是非常推荐的做法。
  • 回测时间限制:在股票策略回测中,当回测周期为分钟时,run_dailytime 取值被限制在 09:31~11:3013:00~15:00 之间。这意味着在回测环境下,run_daily 无法在 9:25 触发。但在交易环境中,run_daily 不受此时间限制,可以正常在 9:25 触发。