🚀 AI 一键生成 ptrade 策略代码

如何使用 PTrade 的 set_parameters 函数优化策略行为?

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

问题描述

怎样设置策略在服务器重启后不重复执行盘前函数?

解决方案

在PTrade量化交易平台中,若要设置策略在服务器重启后不重复执行盘前函数(before_trading_start),需要在 initialize 函数中使用 set_parameters 接口进行配置。

具体参数为 server_restart_not_do_before="1"

配置方法

您需要在策略的初始化函数 initialize(context) 中调用 set_parameters,并将 server_restart_not_do_before 设置为字符串 "1"

代码示例

def initialize(context):
    # 初始化股票池(示例)
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 关键配置:设置服务器重启重拉交易时,不再重复执行 before_trading_start 函数
    # "0" 为默认值(执行),"1" 为不执行
    set_parameters(server_restart_not_do_before="1")

def before_trading_start(context, data):
    # 如果配置了上述参数,服务器重启后将跳过此函数的执行
    log.info("执行盘前处理函数")
    pass

def handle_data(context, data):
    pass

参数说明

  • 接口名称set_parameters(**kwargs)
  • 参数名称server_restart_not_do_before
  • 参数取值
    • "0"(默认值):服务器重启导致重拉交易时,重复执行 before_trading_start
    • "1":服务器重启导致重拉交易时,不会执行 before_trading_start

注意事项

  1. 避免逻辑错误:如果您的 before_trading_start 中包含重置全局变量(如 g.xxx = [])或发送信号的逻辑,服务器重启导致的重复执行可能会打乱策略状态或导致重复信号。在这种情况下,强烈建议设置为 "1"
  2. 相关参数:还有一个相关的参数 not_restart_trade。如果设置 set_parameters(not_restart_trade="1"),则表示在交易时间段若服务器重启,策略完全不会自动重新拉起(即策略直接停止),自然也就不会执行盘前函数了。请根据实际需求区分使用。

Q&A

Q: 为什么要设置服务器重启不执行盘前函数?
A: 在实盘交易中,服务器可能会因为维护或异常而重启。如果策略重启后再次执行 before_trading_start,可能会导致全局变量被错误重置(例如清空了当日已记录的信号),或者重复进行某些初始化操作,从而引发逻辑错误。

Q: set_parameters 函数可以在 handle_data 中调用吗?
A: 虽然语法上允许,但通常建议在 initialize 中调用,以确保策略启动伊始配置即生效。如果在盘中调用,可能无法覆盖启动时的默认行为。

Q: 如果我希望服务器重启后连策略都不自动启动怎么办?
A: 可以使用 set_parameters(not_restart_trade="1")。这样在交易时间段内如果服务器重启,策略将保持停止状态,不会自动恢复运行。