3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 平台中,如果在盘中(开盘期间)手动开启交易,或者因为服务器环境重启拉起交易,系统会默认重新执行 initialize 和 before_trading_start 函数。如果您的策略在这两个函数中定义了无法被系统持久化保存的变量,或者调用了委托下单接口,就会导致变量被重置、策略逻辑异常甚至重复委托下单。
为了避免盘中重启或开启交易带来的逻辑混乱,ptrade 提供了 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
pickle 模块将其保存到本地文件中。这样即使策略在盘中被意外重启,也能从文件中恢复状态,保证逻辑连贯。initialize 和 before_trading_start 中调用 order 等委托接口,所有的下单动作应放在 handle_data、tick_data 或定时任务 run_daily 中执行。