3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,当您看到日志输出 “提示信息INFO - 当前服务器配置为:交易时间段服务器重启后,执行拉起本交易操作” 时,这意味着您的策略当前使用了系统的默认配置。即:如果在交易时间段内(通常为 09:00-11:30、13:00-15:30)券商服务器发生重启或环境升级,系统会在恢复后自动重新启动您的交易策略。
虽然自动拉起交易保证了策略的连续性,但如果不加注意,可能会引发严重的逻辑错误,特别是重复下单问题。具体原因如下:
initialize 和 before_trading_start 函数。g.xxx),这些变量会被重置,导致盘中逻辑判断失误。initialize 或 before_trading_start 中编写了委托下单接口(如 order),重启时会再次触发这些代码,造成重复买入或卖出。为了避免上述风险,ptrade 提供了 set_parameters 接口,允许您在 initialize 函数中自定义服务器重启后的行为。主要涉及两个参数:
not_restart_trade:交易时间段若服务器重启,是否自动执行重新拉起本交易。"0" 为执行(缺省),"1" 为不执行。server_restart_not_do_before:若服务器重启导致重拉交易,是否重复执行 before_trading_start 函数。"0" 为执行(缺省),"1" 为不执行。如果您希望在服务器重启后不再自动拉起交易,或者拉起交易但不重复执行盘前函数,可以在策略的 initialize 中进行如下设置:
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
# 方案一:服务器重启后,不再自动拉起本交易(最安全,需人工介入确认)
set_parameters(not_restart_trade="1")
# 方案二:服务器重启后自动拉起交易,但【不重复执行】 before_trading_start 函数
# set_parameters(server_restart_not_do_before="1")
def before_trading_start(context, data):
# 如果 server_restart_not_do_before="1",重启时这里的代码不会被再次执行
log.info("执行盘前初始化逻辑")
def handle_data(context, data):
pass
initialize 和 before_trading_start 中直接调用下单函数。not_restart_trade="1",在服务器异常重启后由人工检查持仓并手动恢复;对于一般策略,建议至少设置 server_restart_not_do_before="1" 以防止盘前逻辑被重复触发。