问题描述
想了解set_parameters的必选参数
解决方案
在 PTrade 量化交易平台中,set_parameters 接口用于设置策略的各项配置参数。为了保证策略在服务器重启或异常恢复时的逻辑正确性,有几个关键参数必须在 initialize 函数中进行设置。
必须在 initialize 中设置的参数
根据 PTrade API 文档,以下两个参数必须在 initialize 模块中设置:
not_restart_tradeserver_restart_not_do_before
参数详细说明
1. not_restart_trade (交易场景务必了解)
- 作用:控制在交易时间段内,若服务器重启,是否自动重新拉起本交易。
- 取值:
"0":执行(缺省/默认值)。"1":不执行。
- 配置说明:
- 当服务器环境重启并拉起交易时,
initialize和before_trading_start函数会被重复调用。 - 风险提示:请务必检查策略编写逻辑。避免在这两个函数中设置无法被系统持久化保存的变量(变量一旦被初始化会导致策略逻辑异常),并绝对避免在这两个函数中调用委托接口,否则会造成重复委托。
- 建议:您可以将
not_restart_trade入参设置为"1",以在交易时间段避免重复执行的问题。交易时间段默认为 09:00-11:30、13:00-15:30(实际以券商的配置为准)。
- 当服务器环境重启并拉起交易时,
2. server_restart_not_do_before (交易场景务必了解)
- 作用:控制若服务器重启导致重拉交易时,是否重复执行
before_trading_start函数。 - 取值:
"0":执行(缺省/默认值)。"1":不执行。
- 配置说明:
- 服务器环境重启拉起交易时,
before_trading_start函数默认会被调用。 - 为了避免重复调用带来的一系列问题(如重复初始化变量、重复下单等),您可以将
server_restart_not_do_before入参设置为"1",这样在一个交易日内before_trading_start函数仅会调用一次。
- 服务器环境重启拉起交易时,
代码示例
以下是如何在 initialize 函数中正确设置这些参数的示例:
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"
)
def before_trading_start(context, data):
log.info("do before_trading_start")
# 这里的逻辑在一个交易日内只会被执行一次(如果设置了 server_restart_not_do_before="1")
def handle_data(context, data):
pass
总结
在编写实盘交易策略时,处理好服务器重启等异常情况至关重要。强烈建议在 initialize 函数中将 not_restart_trade 和 server_restart_not_do_before 设置为 "1",以确保策略的稳定性和安全性,防止因重复执行初始化逻辑而导致的意外交易损失。