🚀 AI 一键生成 ptrade 策略代码

ptrade 提示“交易时间段服务器重启后,执行拉起本交易操作”的含义及配置方法

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

问题描述

提示信息INFO - 当前服务器配置为:交易时间段服务器重启后,执行拉起本交易操作。

/

解决方案

提示信息解析

在 ptrade 量化交易平台中,当您看到日志输出 “提示信息INFO - 当前服务器配置为:交易时间段服务器重启后,执行拉起本交易操作” 时,这意味着您的策略当前使用了系统的默认配置。即:如果在交易时间段内(通常为 09:00-11:30、13:00-15:30)券商服务器发生重启或环境升级,系统会在恢复后自动重新启动您的交易策略

潜在风险:为什么需要关注这个提示?

虽然自动拉起交易保证了策略的连续性,但如果不加注意,可能会引发严重的逻辑错误,特别是重复下单问题。具体原因如下:

  1. 函数重复执行:服务器重启拉起交易时,框架会重新执行 initializebefore_trading_start 函数
  2. 变量被重置:如果您在这两个函数中初始化了无法被系统持久化保存的全局变量(如 g.xxx),这些变量会被重置,导致盘中逻辑判断失误。
  3. 重复委托:如果您在 initializebefore_trading_start 中编写了委托下单接口(如 order),重启时会再次触发这些代码,造成重复买入或卖出。

解决方案:如何修改重启配置?

为了避免上述风险,ptrade 提供了 set_parameters 接口,允许您在 initialize 函数中自定义服务器重启后的行为。主要涉及两个参数:

  • not_restart_trade:交易时间段若服务器重启,是否自动执行重新拉起本交易。"0" 为执行(缺省),"1" 为不执行。
  • server_restart_not_do_before:若服务器重启导致重拉交易,是否重复执行 before_trading_start 函数。"0" 为执行(缺省),"1" 为不执行。

推荐配置代码示例

如果您希望在服务器重启后不再自动拉起交易,或者拉起交易但不重复执行盘前函数,可以在策略的 initialize 中进行如下设置:

def initialize(context):
    g.security = "600570.SS"
    set_universe(g.security)
    
    # 方案一:服务器重启后,不再自动拉起本交易(最安全,需人工介入确认)
    set_parameters(not_restart_trade="1")
    
    # 方案二:服务器重启后自动拉起交易,但【不重复执行】 before_trading_start 函数
    # set_parameters(server_restart_not_do_before="1")

def before_trading_start(context, data):
    # 如果 server_restart_not_do_before="1",重启时这里的代码不会被再次执行
    log.info("执行盘前初始化逻辑")

def handle_data(context, data):
    pass

总结建议

  • 检查策略逻辑:绝对不要在 initializebefore_trading_start 中直接调用下单函数。
  • 合理配置参数:对于对状态依赖极强的策略,建议设置 not_restart_trade="1",在服务器异常重启后由人工检查持仓并手动恢复;对于一般策略,建议至少设置 server_restart_not_do_before="1" 以防止盘前逻辑被重复触发。