问题描述
解决方案
在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。
注意事项
- 避免逻辑错误:如果您的
before_trading_start中包含重置全局变量(如g.xxx = [])或发送信号的逻辑,服务器重启导致的重复执行可能会打乱策略状态或导致重复信号。在这种情况下,强烈建议设置为"1"。 - 相关参数:还有一个相关的参数
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")。这样在交易时间段内如果服务器重启,策略将保持停止状态,不会自动恢复运行。