3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 实盘交易中,如果服务器环境发生重启并重新拉起交易,默认情况下系统会重新执行 initialize 和 before_trading_start 函数。这可能会导致盘前初始化逻辑被重复触发,甚至造成重复委托等严重问题。
为了解决这一痛点,ptrade 提供了专门的策略配置参数。您可以通过在 initialize 函数中调用 set_parameters 接口来进行配置。
server_restart_not_do_before
before_trading_start 函数。"0":执行(缺省值)。"1":不执行。设置后,一个交易日内 before_trading_start 函数仅会被调用一次,即使服务器重启也不会重复执行。not_restart_trade
"0":执行(缺省值)。"1":不执行。设置后,可避免在交易时段因系统重启而自动重新拉起交易。⚠️ 注意事项:
not_restart_trade和server_restart_not_do_before这两个参数必须在initialize模块中设置,在其他事件函数中设置将无法生效。
以下是一个完整的配置示例,展示了如何在初始化时规避服务器重启带来的重复执行风险:
def initialize(context):
# 1. 设置要操作的股票池
g.security = '600570.SS'
set_universe(g.security)
# 2. 配置策略参数,防止服务器重启导致重复执行
# server_restart_not_do_before="1" 表示重启时不重复执行 before_trading_start
# not_restart_trade="1" 表示交易时段服务器重启时不自动重新拉起本交易(根据实际需求配置)
set_parameters(
server_restart_not_do_before="1",
not_restart_trade="1"
)
log.info("策略初始化完成,已配置防重复执行参数。")
def before_trading_start(context, data):
# 该函数在一个交易日内只会执行一次
log.info("执行盘前初始化逻辑...")
def handle_data(context, data):
# 盘中交易逻辑
pass