如何获取指数成分股票列表

主要参考Bigquant中以下两个数据表:
In [3]:
# 导入dai
import dai
一、如何获取指数成分股
In [6]:
# 获取股票指数代码
sql = '''
select 
distinct instrument,name
from cn_stock_index_component
where date > '2015-01-01'
'''

df = dai.query(sql).df()
df
Out[6]:
instrument name
0 000001.SH 上证指数
1 000905.SH 中证500
2 399006.SZ 创业板指
3 000016.SH 上证50
4 000300.SH 沪深300
5 000852.SH 中证1000
6 000903.SH 中证100
7 399001.SZ 深证成指
8 399330.SZ 深证100
9 000688.SH 科创50
10 899050.BJ 北证50
In [8]:
# 上证50指数成分
sql = '''
select 
    date,
    member_code as instrument
from cn_stock_index_component
where instrument = '000016.SH'
and date = '2024-05-30'
limit 10
'''
df = dai.query(sql).df()
df
Out[8]:
date instrument
0 2024-05-30 600028.SH
1 2024-05-30 600030.SH
2 2024-05-30 600031.SH
3 2024-05-30 600036.SH
4 2024-05-30 600048.SH
5 2024-05-30 600050.SH
6 2024-05-30 600089.SH
7 2024-05-30 600104.SH
8 2024-05-30 600111.SH
9 2024-05-30 600150.SH
In [9]:
# 沪深300指数成分
sql = '''
select 
    date,
    member_code as instrument
from cn_stock_index_component
where instrument = '000300.SH'
and date = '2024-05-30'
limit 10
'''
df = dai.query(sql).df()
df
Out[9]:
date instrument
0 2024-05-30 000001.SZ
1 2024-05-30 000002.SZ
2 2024-05-30 000063.SZ
3 2024-05-30 000069.SZ
4 2024-05-30 000100.SZ
5 2024-05-30 000157.SZ
6 2024-05-30 000166.SZ
7 2024-05-30 000301.SZ
8 2024-05-30 000333.SZ
9 2024-05-30 000338.SZ
In [10]:
# 中证500指数成分
sql = '''
select 
    date,
    member_code as instrument
from cn_stock_index_component
where instrument = '000905.SH'
and date = '2024-05-30'
limit 10
'''
df = dai.query(sql).df()
df
Out[10]:
date instrument
0 2024-05-30 000009.SZ
1 2024-05-30 000021.SZ
2 2024-05-30 000027.SZ
3 2024-05-30 000031.SZ
4 2024-05-30 000039.SZ
5 2024-05-30 000050.SZ
6 2024-05-30 000060.SZ
7 2024-05-30 000066.SZ
8 2024-05-30 000089.SZ
9 2024-05-30 000155.SZ
二、如何获取股票行业成分
In [17]:
# 获取股票行业成分
# 申万行业通常取 industry=sw2021,即:申万行业分类标准 2021 版
sql = '''
select 
distinct industry,industry_level1_code,industry_level1_name
from cn_stock_industry_component
where date > '2015-01-01' and industry = 'sw2021'
order by industry,industry_level1_name
'''

df = dai.query(sql).df()
df
Out[17]:
industry industry_level1_code industry_level1_name
0 sw2021 420000 交通运输
1 sw2021 720000 传媒
2 sw2021 410000 公用事业
3 sw2021 110000 农林牧渔
4 sw2021 370000 医药生物
5 sw2021 450000 商贸零售
6 sw2021 650000 国防军工
7 sw2021 220000 基础化工
8 sw2021 330000 家用电器
9 sw2021 610000 建筑材料
10 sw2021 620000 建筑装饰
11 sw2021 430000 房地产
12 sw2021 240000 有色金属
13 sw2021 640000 机械设备
14 sw2021 280000 汽车
15 sw2021 740000 煤炭
16 sw2021 760000 环保
17 sw2021 630000 电力设备
18 sw2021 270000 电子
19 sw2021 750000 石油石化
20 sw2021 460000 社会服务
21 sw2021 350000 纺织服饰
22 sw2021 510000 综合
23 sw2021 770000 美容护理
24 sw2021 710000 计算机
25 sw2021 360000 轻工制造
26 sw2021 730000 通信
27 sw2021 230000 钢铁
28 sw2021 480000 银行
29 sw2021 490000 非银金融
30 sw2021 340000 食品饮料
In [25]:
# 获取国防军工行业股票列表
sql = '''
select 
    date,
    instrument,industry_level1_code,industry_level1_name,industry_name,
from cn_stock_industry_component
where industry_level1_code = '650000' and industry = 'sw2021'
and date = '2024-05-30'
limit 10
'''
df = dai.query(sql).df()
df
Out[25]:
date instrument industry_level1_code industry_level1_name industry_name
0 2024-05-30 000519.SZ 650000 国防军工 地面兵装Ⅲ
1 2024-05-30 000547.SZ 650000 国防军工 军工电子Ⅲ
2 2024-05-30 000561.SZ 650000 国防军工 航空装备Ⅲ
3 2024-05-30 000576.SZ 650000 国防军工 地面兵装Ⅲ
4 2024-05-30 000638.SZ 650000 国防军工 军工电子Ⅲ
5 2024-05-30 000697.SZ 650000 国防军工 航空装备Ⅲ
6 2024-05-30 000733.SZ 650000 国防军工 军工电子Ⅲ
7 2024-05-30 000738.SZ 650000 国防军工 航空装备Ⅲ
8 2024-05-30 000768.SZ 650000 国防军工 航空装备Ⅲ
9 2024-05-30 001270.SZ 650000 国防军工 军工电子Ⅲ