🚀 AI 一键生成 joinquant 策略代码

JoinQuant API 教程:如何使用字典构建自定义组合并设为回测基准?

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

问题描述

如何设置一个由几只股票和不同权重组成的自定义组合作为回测基arctic-wolf?

解决方案

在 JoinQuant(聚宽)平台中,如果您希望将回测的基准(Benchmark)设置为由几只股票或指数按不同权重组成的自定义组合,可以使用 set_benchmark 函数,并传入一个**字典(dict)**作为参数。

以下是具体的实现方法和代码示例。

核心代码实现

您需要在策略的 initialize(context) 函数中调用 set_benchmark

# -*- coding: utf-8 -*-

def initialize(context):
    # 设定自定义组合作为基准
    # 格式为 {'标的代码': 权重, ...}
    # 示例:50%的平安银行,30%的沪深300指数,20%的浦发银行
    custom_benchmark = {
        '000001.XSHE': 0.5,  # 平安银行
        '000300.XSHG': 0.3,  # 沪深300
        '600000.XSHG': 0.2   # 浦发银行
    }
    
    # 调用API设置基准
    set_benchmark(custom_benchmark)
    
    # 其他初始化代码...
    set_option('use_real_price', True)
    log.info("基准已设置为自定义组合")

def handle_data(context, data):
    pass

详细说明

  1. 函数位置set_benchmark 通常在 initialize 函数中调用,只需设置一次。
  2. 参数格式
    • 参数必须是一个字典(dict)。
    • Key(键):股票、指数或 ETF 的代码(字符串),如 '000001.XSHE'
    • Value(值):对应的权重(浮点数)。
  3. 权重规则
    • 字典中所有 Value(权重)之和必须 小于等于 1
    • 如果权重之和小于 1(例如总和为 0.8),剩余的部分(0.2)将被视为持有现金(收益率为 0)。
    • 如果权重之和大于 1,系统会报错。

常见应用场景

  • 对冲策略:如果您做的是多空对冲策略,可能需要将基准设为特定的指数(如中证500)或一篮子股票。
  • 行业轮动:如果您只关注特定行业,可以将基准设为该行业几只龙头股的加权组合,以更准确地衡量超额收益(Alpha)。
  • FOF/MOM:模拟基金组合的表现作为基准。

Q&A

Q: 如果我设置的权重之和小于1,剩余的部分怎么计算收益?
A: 如果权重之和小于1(例如0.8),剩余的0.2部分代表基准中这部分资金闲置(持有现金),其收益率为0。这意味着基准的波动率会降低,通常也会拉低基准在牛市中的表现。

Q: set_benchmark 可以动态调整吗?
A: set_benchmark 主要用于设定回测整体的参考标准,通常在 initialize 中设定一次。虽然技术上可以在运行过程中再次调用,但基准收益曲线的计算通常是基于初始设定的,中途修改可能会导致收益曲线计算逻辑混乱或不符合预期,因此建议仅在初始化时设定。

Q: 自定义基准支持期货合约吗?
A: 支持。您可以传入期货合约代码。如果在期货策略中不希望看到基准曲线,可以设置 set_benchmark({"000001.XSHG":0}),即权重为0,这样基准收益将一直为0。