问题描述
调用set_parameters时报错格式不正确
解决方案
PTrade 中 set_parameters 函数入参格式详解
在 PTrade 量化交易平台中,调用 set_parameters 函数时如果遇到“格式不正确”的报错,通常是因为没有遵循平台规定的参数传递规则。根据 PTrade API 文档,set_parameters 的入参格式有严格的要求。
1. 核心格式要求
set_parameters 函数的入参格式必须为 a=b 样式(即 Python 中的关键字参数形式/kwargs)。
- 键(Key):必须是平台支持的特定配置项名称(如
not_restart_trade)。 - 值(Value):通常需要传入字符串类型的
"1"(表示开启/执行)或"0"(表示关闭/取消)。
2. 常见错误示例与纠正
❌ 错误写法(会导致格式不正确报错):
# 错误1:传入了字典
set_parameters({"not_restart_trade": "1"})
# 错误2:传入了位置参数
set_parameters("1", "1")
# 错误3:值使用了布尔值或整数(部分版本可能严格要求字符串)
set_parameters(not_restart_trade=1)
✅ 正确写法:
# 正确:使用 a=b 的关键字参数形式,值为字符串
set_parameters(not_restart_trade="1", server_restart_not_do_before="1")
3. 支持的配置参数列表
目前 set_parameters 支持以下配置项(具体以券商实际支持为准):
holiday_not_do_before:交易中节假日是否执行before_trading_start。"0"执行(缺省);"1"不执行。tick_data_no_l2:tick_data中 data 是否包含 order 和 transaction。"0"包含(缺省);"1"不包含。receive_other_response:策略中是否接收非本交易产生的主推。"0"不接收(缺省);"1"接收。receive_cancel_response:策略中是否接收撤单委托产生的主推。"0"不接收(缺省);"1"接收。not_restart_trade:交易时间段若服务器重启,是否自动执行重新拉起本交易。"0"执行(缺省);"1"不执行。(注意:必须在initialize中设置)server_restart_not_do_before:若服务器重启导致重拉交易,是否重复执行before_trading_start函数。"0"执行(缺省);"1"不执行。(注意:必须在initialize中设置)
4. 完整代码示例
def initialize(context):
g.security = "600570.SS"
set_universe(g.security)
# 正确调用 set_parameters
# 设置交易时间段服务器重启不再拉起本交易,且不再执行 before_trading_start
set_parameters(not_restart_trade="1", server_restart_not_do_before="1")
def before_trading_start(context, data):
log.info("执行盘前处理")
# 如果想要取消已经设置的配置参数,传入 "0"
# set_parameters(not_restart_trade="0")
def handle_data(context, data):
pass
总结:检查你的代码,确保去掉了字典的大括号 {},直接使用 参数名="值" 的形式传递给 set_parameters 即可解决报错问题。