基于Python的指数基金量化投资——指数包含的个股数据获取

要计算指数的加权值,指数的市盈率、市净率,或者指数的净资产收益率,都需要用到指数所包含的个股信息,前面分享的《指数的净资产收益率计算》《指数的市盈率和市净率计算》等文中都有提到。

这些个股的数据怎么来获得呢?下面就来介绍下,总共就2个步骤:1)指数数据的获取;2)数据的解析。

(第一步)指数数据的获取

首先从中证指数官网(https://www.csindex.com.cn)或者国证指数官网(http://www.cnindex.com.cn)中获取相应的指数数据。

例如下图中,在中证指数官网搜索沪深300指数:
基于Python的指数基金量化投资——指数包含的个股数据获取
然后在搜索出来的列表中选择沪深300:
基于Python的指数基金量化投资——指数包含的个股数据获取
接着在进入的页面点击【样本权重】来下载沪深300的指数信息:
基于Python的指数基金量化投资——指数包含的个股数据获取
最后就会获得沪深300的数据信息,它是一个excel表,表里面包含了如下的信息:
基于Python的指数基金量化投资——指数包含的个股数据获取
最后还需要把这个文件另存为.csv文件,因为程序里面是直接处理.csv的,下载的源文件是.xsl格式的文件。
基于Python的指数基金量化投资——指数包含的个股数据获取

(第二步)数据的解析

小将是按照自己的路劲进行存放的,所有的指数都放在./importfile/indexSeries/indexTpye/目录下,大家可以按照自己的开发喜好来进行调整。
基于Python的指数基金量化投资——指数包含的个股数据获取
然后只要去解析每个指数数据的第4列即可,这一列包含了指数所有的成分股证券代码
基于Python的指数基金量化投资——指数包含的个股数据获取
个股的数据就不再这里累述,在《股票数据源baostock》有进行过介绍,大家可以参考。

源码

import pandas as pd

indexType = ['./importfile/indexSeries/indexTpye/hs300.csv',  # 沪深300 - 0
             './importfile/indexSeries/indexTpye/zz500.csv',  # 中证500 - 1
             './importfile/indexSeries/indexTpye/zz100.csv',  # 中证100 - 2
             './importfile/indexSeries/indexTpye/shz50.csv',  # 上证50  - 3
             './importfile/indexSeries/indexTpye/hsyy300.csv',  # 沪深医药300 - 4
             './importfile/indexSeries/indexTpye/zzyh.csv',   # 中证银行  -5
             './importfile/indexSeries/indexTpye/zzxf.csv',   # 中证消费  -6
             './importfile/indexSeries/indexTpye/zzbj.csv',   # 中证白酒  -7
             './importfile/indexSeries/indexTpye/db500.csv',  # 500低波动 -8
             './importfile/indexSeries/indexTpye/jz300.csv',  # 300价值   -9
             './importfile/indexSeries/indexTpye/yy100.csv',  # 医药100   -10
             './importfile/indexSeries/indexTpye/zzyyao.csv',   # 中证医药  -11
             './importfile/indexSeries/indexTpye/jbm50.csv',  # 基本面50  -12
             './importfile/indexSeries/indexTpye/shzhl.csv',  # 上证红利  -13
             './importfile/indexSeries/indexTpye/zzhl.csv',   # 中证红利  -14
             './importfile/indexSeries/indexTpye/zzjg.csv',   # 中证军工  -15
             './importfile/indexSeries/indexTpye/spyl.csv',   # 食品饮料  -16
             './importfile/indexSeries/indexTpye/zqgs.csv',   # 证券公司  -17
             './importfile/indexSeries/indexTpye/ylcy.csv',   # 养老产业  -18
             './importfile/indexSeries/indexTpye/szhl.csv',   # 深证红利  -19
             './importfile/indexSeries/indexTpye/zzhb.csv',   # 中证环保  -20
             './importfile/indexSeries/indexTpye/cyb.csv']    # 创业板    -21


idx = -1
conf_pe = 1
conf_pb = 1
conf_roe = 1
total_share = 0
for indexCnt in range(len(indexType)):
    # indexCnt = 0
    csv_data = pd.read_csv(indexType[indexCnt])
    for i in range(csv_data.shape[0]):
        if csv_data.values[i][4] >= 600000:
            stock_info_prc = pd.read_csv('C:/Program Files (x86)/Python/prjs/exportfile/stockDataAll/sh.' + str(csv_data.values[i][4]) + '.csv')
            stock_info_epsTTM = pd.read_csv('./exportfile/stockDataProfit/' + str(csv_data.values[i][4]) + '.csv')
        elif csv_data.values[i][4] >= 300000:
            stock_info_prc = pd.read_csv('C:/Program Files (x86)/Python/prjs/exportfile/stockDataAll/sz.' + str(csv_data.values[i][4]) + '.csv')
            stock_info_epsTTM = pd.read_csv('./exportfile/stockDataProfit/' + str(csv_data.values[i][4]) + '.csv')
        else:
            len_name = len(str(csv_data.values[i][4]))
            if len_name == 1:
                stock_code = '00000' + str(csv_data.values[i][4])
            elif len_name == 2:
                stock_code = '0000' + str(csv_data.values[i][4])
            elif len_name == 3:
                stock_code = '000' + str(csv_data.values[i][4])
            elif len_name == 4:
                stock_code = '00' + str(csv_data.values[i][4])
            elif len_name == 5:
                stock_code = '0' + str(csv_data.values[i][4])
            elif len_name == 6:
                stock_code = str(csv_data.values[i][4])
            else:
                stock_code = ''
            stock_info_prc = pd.read_csv('C:/Program Files (x86)/Python/prjs/exportfile/stockDataAll/sz.' + stock_code + '.csv')
            stock_info_epsTTM = pd.read_csv('./exportfile/stockDataProfit/' + stock_code + '.csv')
        stock_single_price = stock_info_prc['close']
        stock_single_pe = stock_info_prc['peTTM']
        stock_single_pb = stock_info_prc['pbMRQ']
        stock_single_eps = stock_info_epsTTM['epsTTM']
        stock_single_total = stock_info_epsTTM['liqaShare']

程序中用到的指数数据如果有问题,大家可以留言获取也可以添加小将前行的微信xjqx_666进行获取,欢迎大家一起交流沟通_

课程参考:基于Python的量化指数基金投资

上一篇:stock_codes = [‘哈药股份‘,‘青岛啤酒‘,‘中国宝安‘] # 数据间隔时间为 1 分钟 freq = 1 status = {stock_code: 0 for stock_code


下一篇:Rapid Replenishment