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

joinquant 平台如何按申万一二三级行业获取成分股?(API使用指南)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 申万行业选股:get_industry_stocks 三级分类获取指南

Question: joinquant 如何按申万一级、二级和三级行业代码获取成分股列表?

解决方案

JoinQuant 申万行业选股:get_industry_stocks 三级分类获取指南

在 JoinQuant(聚宽)量化平台中,按行业选股是构建板块轮动策略和行业中性策略的基础。通过配合使用 get_industries()get_industry_stocks() API,可以轻松获取申万(申银万国)一级、二级及三级行业的代码及成分股列表。


1. 主要 API 函数说明

1.1 get_industries(name, date=None)

用于获取指定分类的行业列表及行业代码。

  • name: 行业分类代码
    • 'sw_l1': 申万一级行业
    • 'sw_l2': 申万二级行业
    • 'sw_l3': 申万三级行业
  • date: 查询日期,默认 None 返回历史上所有行业;若传入日期(如 '2023-01-01'),则返回当天存在的行业。
  • 返回值: pandas.DataFrame,索引为行业代码(如 '801780'),包含 name(行业名称)和 start_date(创建日期)。

1.2 get_industry_stocks(industry_code, date=None)

用于获取指定行业代码在给定日期的成分股股票列表。

  • industry_code: 行业编码(如申万银行 I 行业代码 '801780')。
  • date: 查询日期,默认为当前逻辑日期或今天。
  • 返回值: 股票代码的 list(如 ['000001.XSHE', '600000.XSHG', ...])。

2. 详细获取步骤与示例代码

示例:查询申万各级行业代码及获取成分股

from jqdata import *
import pandas as pd

# 1. 获取申万一级行业列表
sw_l1_df = get_industries(name='sw_l1', date='2023-01-01')
print("--- 申万一级行业(前5个)---")
print(sw_l1_df.head())

# 获取申万一级行业“银行I”(代码:801780)的成分股
bank_stocks = get_industry_stocks('801780', date='2023-01-01')
print(f"\n申万一级【银行I】成分股数量: {len(bank_stocks)}")
print(f"前5只股票: {bank_stocks[:5]}")

# 2. 获取申万二级行业列表
sw_l2_df = get_industries(name='sw_l2', date='2023-01-01')
print("\n--- 申万二级行业(前5个)---")
print(sw_l2_df.head())

# 3. 获取申万三级行业列表
sw_l3_df = get_industries(name='sw_l3', date='2023-01-01')
print("\n--- 申万三级行业(前5个)---")
print(sw_l3_df.head())

3. 在 JoinQuant 策略中应用(按行业选股)

以下示例展示如何在策略初始化及定期调仓时,获取申万三级/一级行业成分股并进行过滤或买入:

import jqdata

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 设定每月初第一个交易日运行调仓
    run_monthly(rebalance, monthday=1, time='09:30')

def rebalance(context):
    # 1. 获取特定申万行业成分股(以申万一级银行行业 801780 为例)
    industry_code = '801780'
    stocks = get_industry_stocks(industry_code, date=context.current_dt)
    
    # 2. 过滤停牌及ST股票
    current_data = get_current_data()
    valid_stocks = [
        stock for stock in stocks 
        if not current_data[stock].paused 
        and not current_data[stock].is_st
    ]
    
    log.info(f"当前交易日申万行业 {industry_code} 可交易成分股: {valid_stocks}")
    
    # 3. 后续选股或建仓逻辑...

4. 注意事项

  1. 申万行业分类变更:申万行业分类标准曾进行过多次调整(例如 2014 年、2021 年大调整)。为了避免未来函数,建议在调用 get_industriesget_industry_stocks传入具体历史日期 date
  2. 行业代码格式:申万行业代码通常为 6 位数字字符串,如 '801780'(银行I)、'801192'(银行II)。