3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化实盘交易过程中,若券商服务器环境突发异常重启或重启拉起交易,系统默认会重新执行策略的 initialize 和 before_trading_start 函数。如果策略未做防护,容易导致在盘中重新拉起时发生重复委托下单或持久化变量被初始值覆盖等严重问题。
为了保障实盘交易的稳定性,PTrade 提供了 set_parameters 接口来精确控制服务器重启时的策略行为。
set_parameters必须在 initialize 函数中对以下两个关键参数进行设置:
not_restart_trade="1":在交易时间段(如 09:00-11:30、13:00-15:30)内,若服务器重启,不自动重新拉起并执行本交易,从而直接阻断重复下单风险。server_restart_not_do_before="1":若服务器重启导致重拉交易,设定一个交易日内 before_trading_start 函数仅调用一次,避免盘前/盘中初始化逻辑被重复触发。def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 设置关键防御参数:
# not_restart_trade="1" -> 交易时间段服务器重启不再拉起本交易
# server_restart_not_do_before="1" -> 服务器重启重拉交易时不再重复执行 before_trading_start
set_parameters(
not_restart_trade="1",
server_restart_not_do_before="1"
)
def before_trading_start(context, data):
log.info("每日盘前逻辑执行:更新每日指标或状态")
def handle_data(context, data):
# 盘中交易逻辑
pass
not_restart_trade 和 server_restart_not_do_before 参数必须在 initialize 模块内进行配置,在其他事件回调(如 handle_data)中配置将无法生效。initialize 和 before_trading_start 中直接报单:order 系列委托接口。如确需在盘前下单,应结合标记变量及本地持久化文件(如 pickle 存储)判断当天是否已完成委托。initialize 再恢复全局变量 g 的持久化信息。不需要持久化的实例化类对象或文件句柄,变量名请以双下划线 __ 开头(如 g.__class_obj),避免序列化失败或被错误覆盖。