3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台中,如果您不想使用默认的沪深300指数作为回测基准,而是希望使用自定义的股票组合,可以通过 set_benchmark 函数来实现。
您需要将一个包含标的代码和权重的字典(Dict)传递给 set_benchmark 函数。
initialize(context) 函数中。以下是一个完整的策略初始化代码示例,展示了如何将基准设置为 50% 平安银行 (000001.XSHE) 和 50% 贵州茅台 (600519.XSHG) 的组合:
# -*- coding: utf-8 -*-
def initialize(context):
# 设定自定义组合作为基准
# 格式为 {'标的代码': 权重, ...}
# 这里设置 平安银行 占 50%,贵州茅台 占 50%
custom_benchmark = {
'000001.XSHE': 0.5,
'600519.XSHG': 0.5
}
# 调用API设置基准
set_benchmark(custom_benchmark)
# 其他初始化设置
set_option('use_real_price', True) # 开启动态复权模式(真实价格)
log.info('基准已设置为自定义组合')
def handle_data(context, data):
# 策略逻辑(此处为空,仅作示例)
pass
'000016.XSHG' 上证50)或 ETF 代码(如 '510300.XSHG')。set_benchmark({'000001.XSHG': 0})(权重设为0)。Q: 如果我的自定义组合权重之和大于 1 会怎样?
A: set_benchmark 要求权重之和必须小于等于 1。如果大于 1,通常是不符合逻辑的配置,建议归一化处理,确保总和为 1.0。
Q: 基准组合中的股票如果在回测期间退市了怎么办?
A: 聚宽系统会自动处理退市数据。如果基准中的某只股票退市,系统会按照其退市前的最后价格计算其在组合中的价值贡献,或者按照现金处理,具体表现取决于该标的退市后的数据状态,但通常不会导致回测报错。
Q: 我可以在回测中途(例如 handle_data 中)修改基准吗?
A: 不建议这样做。set_benchmark 通常设计用于 initialize 阶段设定全局基准。回测的基准曲线是用于对比整个策略周期的表现,中途修改可能会导致收益率计算逻辑混乱或图表显示异常。
Q: 能否使用这一功能进行配对交易(Pair Trading)的基准设置?
A: 可以。例如您在做多股票 A 做空股票 B 的策略,您可以设置基准为股票 A 和股票 B 的某种比例组合,但这通常用于衡量多头部分的表现。对于复杂的多空策略基准,通常直接对比大盘指数(如沪深300)更能体现策略相对于市场的 Alpha 能力。