🚀 AI 一键生成 joinquant 策略代码

如何使用 set_benchmark 将自定义投资组合设置为回测基准?

joinquant | 发布时间: 2025/12/19
以下内容由 EasyQuant 生成。

问题描述

我不想用沪深300做基准,如何把我自己的一个股票组合设为回测基准?

解决方案

在聚宽(JoinQuant)平台中,如果您不想使用默认的沪深300指数作为回测基准,而是希望使用自定义的股票组合,可以通过 set_benchmark 函数来实现。

您需要将一个包含标的代码权重的字典(Dict)传递给 set_benchmark 函数。

实现方法

  1. 函数位置:代码需写在 initialize(context) 函数中。
  2. 参数格式:传入一个字典,Key 为标的代码(字符串),Value 为权重(浮点数)。
  3. 权重规则:权重的总和通常应等于 1(即 100%)。如果小于 1,系统会认为基准中包含部分闲置资金(现金)。

代码示例

以下是一个完整的策略初始化代码示例,展示了如何将基准设置为 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

关键点说明

  • 标的类型:字典中的 Key 不仅可以是股票代码,也可以是指数代码(如 '000016.XSHG' 上证50)或 ETF 代码(如 '510300.XSHG')。
  • 权重计算:系统会根据您设定的权重,计算该组合在回测期间的每日收益率,并在回测结果图中绘制出基准收益曲线(蓝色线)。
  • 空仓基准:如果您希望基准是一条水平线(即基准收益为0,不对比任何指数),可以设置 set_benchmark({'000001.XSHG': 0})(权重设为0)。

Q&A

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 能力。