问题描述
在handle_data函数中调用set_benchmark报错
解决方案
在 PTrade 量化交易平台中,set_benchmark 函数用于设置策略的比较基准,前端展现的策略评价指标都基于此处设置的基准标的。
为什么在 handle_data 中调用会报错?
根据 PTrade API 文档的明确规定,set_benchmark 函数只能在 initialize 函数中使用。
initialize 函数在策略启动时仅运行一次,用于初始化全局变量和策略的基础配置(如股票池、基准、滑点、手续费等)。而 handle_data 函数是按指定的周期频率(如每分钟或每天)重复运行的,用于处理盘中的交易逻辑。如果在 handle_data 中调用 set_benchmark,不仅不符合框架的设计规范,还会导致重复设置基准,从而引发报错。
正确的调用位置及示例
您应该将 set_benchmark 放在 initialize 函数中。如果不做基准设置,系统默认选定沪深300指数(000300.SS)的每日价格作为判断策略好坏和一系列风险值计算的基准。
正确的代码示例:
def initialize(context):
# 设置我们要操作的股票池
g.security = '000001.SZ'
set_universe(g.security)
# 正确位置:在 initialize 中将上证50(000016.SS)设置为参考基准
set_benchmark('000016.SS')
def handle_data(context, data):
# 盘中交易逻辑处理
order('000001.SZ', 100)
总结
- 可用模块:仅在回测、交易模块可用。
- 调用位置:必须且只能在
initialize(context)函数中调用。 - 参数说明:传入股票、指数或 ETF 的代码(字符串类型),例如
'000016.SS'。