🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

在JoinQuant聚宽平台将沪深300指数成分股设为股票池的方法

joinquant | 发布时间: 2026/6/2
以下内容由 EasyQuant 生成。

问题描述

如何将hs300设为股票池

如果我想将沪深300中的股票作为自选股,代码中应该如何实现?谢谢!

解决方案

在 JoinQuant (聚宽) 平台上,将沪深300指数的成分股设置为策略的股票池非常简单。你可以使用聚宽提供的内置 API 函数 get_index_stocks 来获取指数的成分股列表,并将其保存在全局变量中供策略使用。

核心 API 函数

get_index_stocks(index_symbol, date=None)

  • 功能:获取一个指数在给定日期可交易的成分股列表。
  • 参数
    • index_symbol:指数代码。沪深300的指数代码为 '000300.XSHG'
    • date:查询日期。在回测模块中,如果不填,默认值会随着回测日期变化而变化(等于 context.current_dt)。

Python 代码实现示例

通常,我们会在策略的初始化函数 initialize 中获取并设置股票池。以下是完整的代码示例:

# 导入聚宽函数库
import jqdata

# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 获取沪深300的成分股代码列表,并赋值给全局变量 g.stocks
    g.stocks = get_index_stocks('000300.XSHG')
    
    # 打印日志查看获取到的股票数量
    log.info("成功获取沪深300成分股,共 %d 只股票" % len(g.stocks))
    
    # 如果你需要使用 history 函数的默认股票池,也可以调用 set_universe
    # set_universe(g.stocks)

# 每天开盘时运行的函数
def handle_data(context, data):
    # 在这里你可以遍历 g.stocks 进行你的交易逻辑
    # 例如:打印前5只股票的代码
    # log.info(g.stocks[:5])
    pass

进阶建议:动态更新股票池

需要注意的是,沪深300指数的成分股是会定期调整的(通常在每年的6月和12月)。如果你进行的是长期的历史回测,建议不要只在 initialize 中获取一次,而是定期(例如每月或每周)更新一次股票池,以避免未来函数或使用已经剔除出指数的股票。

动态更新示例:

import jqdata

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 按月运行,每月第一个交易日开盘前更新股票池
    run_monthly(update_universe, 1, time='09:00')

def update_universe(context):
    # 获取当前回测日期的沪深300成分股
    g.stocks = get_index_stocks('000300.XSHG')
    log.info("股票池已更新,当前日期:%s,共 %d 只股票" % (context.current_dt.date(), len(g.stocks)))

通过这种方式,你的策略就能始终保持与真实的沪深300成分股同步。