3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化平台中,按行业选股是构建板块轮动策略和行业中性策略的基础。通过配合使用 get_industries() 和 get_industry_stocks() API,可以轻松获取申万(申银万国)一级、二级及三级行业的代码及成分股列表。
get_industries(name, date=None)用于获取指定分类的行业列表及行业代码。
name: 行业分类代码
'sw_l1': 申万一级行业'sw_l2': 申万二级行业'sw_l3': 申万三级行业date: 查询日期,默认 None 返回历史上所有行业;若传入日期(如 '2023-01-01'),则返回当天存在的行业。pandas.DataFrame,索引为行业代码(如 '801780'),包含 name(行业名称)和 start_date(创建日期)。get_industry_stocks(industry_code, date=None)用于获取指定行业代码在给定日期的成分股股票列表。
industry_code: 行业编码(如申万银行 I 行业代码 '801780')。date: 查询日期,默认为当前逻辑日期或今天。list(如 ['000001.XSHE', '600000.XSHG', ...])。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())
以下示例展示如何在策略初始化及定期调仓时,获取申万三级/一级行业成分股并进行过滤或买入:
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. 后续选股或建仓逻辑...
get_industries 和 get_industry_stocks 时传入具体历史日期 date。'801780'(银行I)、'801192'(银行II)。