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

PTrade服务器重启导致 before_trading_start 重复调用怎么办?

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

问题描述

PTrade中before_trading_start函数被重复调用怎么处理?

服务器重启后before_trading_start每天执行多次

解决方案

在 PTrade 量化交易平台中,如果遇到服务器环境重启拉起交易,默认情况下 initializebefore_trading_start 函数会被重复调用。这可能会导致变量被重新初始化或发生重复委托等严重逻辑异常。

为了解决 before_trading_start 被重复调用的问题,您可以通过在 initialize 函数中使用 set_parameters 接口进行配置,并优化策略逻辑。

解决方法

1. 设置 server_restart_not_do_before 参数

为了避免服务器重启导致 before_trading_start 被重复调用,您可以将 server_restart_not_do_before 参数设置为 "1"。这样配置后,一个交易日内 before_trading_start 函数仅会被调用一次。

def initialize(context):
    g.security = "600570.SS"
    set_universe(g.security)
    
    # 设置服务器重启重拉交易时不再执行 before_trading_start 函数
    set_parameters(server_restart_not_do_before="1")

2. 设置 not_restart_trade 参数(可选)

如果您希望在交易时间段(默认 09:00-11:30、13:00-15:30,实际以券商配置为准)内,如果服务器重启,不自动重新拉起本交易,可以将 not_restart_trade 设置为 "1"

def initialize(context):
    g.security = "600570.SS"
    set_universe(g.security)
    
    # 设置交易时间段服务器重启不再拉起本交易
    # 同时设置不再重复执行 before_trading_start
    set_parameters(not_restart_trade="1", server_restart_not_do_before="1")

策略逻辑优化建议(务必检查)

即使配置了上述参数,为了保证策略的健壮性,强烈建议您检查 initializebefore_trading_start 的编写逻辑:

  1. 避免设置无法持久化的变量:避免在这两个函数中设置无法被系统持久化保存的变量(如未以 __ 开头的不可序列化对象)。变量一旦被重新初始化,会导致策略逻辑异常。
  2. 避免调用委托接口:绝对不要在 initializebefore_trading_start 中调用下单接口(如 orderorder_target 等),否则一旦函数被重复调用,极易造成重复委托。
  3. 注意参数设置位置not_restart_tradeserver_restart_not_do_before 这两个入参必须initialize 模块中设置才能生效。

通过合理配置 set_parameters 并规范盘前逻辑,可以有效避免 PTrade 服务器重启带来的重复执行问题。