问题描述
解决方案
在聚宽(JoinQuant)平台中,将一个自定义的股票组合设置为回测的业绩基准,需要使用 set_benchmark 函数。
设置方法
你可以向 set_benchmark 函数传入一个字典(dict),其中:
- Key(键):为股票、指数或 ETF 的代码(字符串格式)。
- Value(值):为该标的在基准组合中的权重(浮点数)。
代码示例
以下代码展示了如何在 initialize 函数中,将基准设置为由 50% 平安银行 和 50% 万科A 组成的投资组合:
# -*- coding: utf-8 -*-
def initialize(context):
# 定义股票组合及其权重
# 权重之和建议等于 1.0
custom_benchmark = {
'000001.XSHE': 0.5, # 平安银行 50%
'000002.XSHE': 0.5 # 万科A 50%
}
# 设置该组合为业绩基准
set_benchmark(custom_benchmark)
# 其他初始化代码...
g.security = '000001.XSHE'
set_option('use_real_price', True)
def handle_data(context, data):
pass
注意事项
- 权重总和:字典中所有 Value(权重)相加通常应等于 1.0。如果小于 1.0,剩余部分将被视为持有现金(收益率为 0)。
- 标的类型:组合中可以混合包含股票、指数和 ETF。
- 调用位置:通常在
initialize函数中调用一次即可。
Q&A
Q: 如果我的基准组合权重加起来超过 1.0 会怎么样?
A: 系统通常要求权重之和小于等于 1.0。如果超过 1.0,可能会导致基准计算逻辑不符合预期或报错,建议严格控制权重之和为 1。
Q: 能否在回测过程中动态修改基准?
A: set_benchmark 通常在 initialize 中设置一次。如果在回测中途再次调用,会重置后续日期的基准,但为了保证回测结果的可解释性,通常不建议在运行过程中频繁变更基准。
Q: 如果我想用某一只特定的指数(如中证500)做基准,怎么写?
A: 直接传入指数代码字符串即可,无需使用字典。例如:set_benchmark('000905.XSHG')。