3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,如果遇到服务器环境重启拉起交易,默认情况下 initialize 和 before_trading_start 函数会被重复调用。这可能会导致变量被重新初始化或发生重复委托等严重逻辑异常。
为了解决 before_trading_start 被重复调用的问题,您可以通过在 initialize 函数中使用 set_parameters 接口进行配置,并优化策略逻辑。
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")
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")
即使配置了上述参数,为了保证策略的健壮性,强烈建议您检查 initialize 和 before_trading_start 的编写逻辑:
__ 开头的不可序列化对象)。变量一旦被重新初始化,会导致策略逻辑异常。initialize 和 before_trading_start 中调用下单接口(如 order、order_target 等),否则一旦函数被重复调用,极易造成重复委托。not_restart_trade 和 server_restart_not_do_before 这两个入参必须在 initialize 模块中设置才能生效。通过合理配置 set_parameters 并规范盘前逻辑,可以有效避免 PTrade 服务器重启带来的重复执行问题。