要计算指数的加权值,指数的市盈率、市净率,或者指数的净资产收益率,都需要用到指数所包含的个股信息,前面分享的《指数的净资产收益率计算》和《指数的市盈率和市净率计算》等文中都有提到。
这些个股的数据怎么来获得呢?下面就来介绍下,总共就2个步骤:1)指数数据的获取;2)数据的解析。
首先从中证指数官网(https://www.csindex.com.cn)或者国证指数官网(http://www.cnindex.com.cn)中获取相应的指数数据。
例如下图中,在中证指数官网搜索沪深300指数:
然后在搜索出来的列表中选择沪深300:
接着在进入的页面点击【样本权重】来下载沪深300的指数信息:
最后就会获得沪深300的数据信息,它是一个excel表,表里面包含了如下的信息:
最后还需要把这个文件另存为.csv文件,因为程序里面是直接处理.csv的,下载的源文件是.xsl格式的文件。
小将是按照自己的路劲进行存放的,所有的指数都放在./importfile/indexSeries/indexTpye/目录下,大家可以按照自己的开发喜好来进行调整。
然后只要去解析每个指数数据的第4列即可,这一列包含了指数所有的成分股证券代码
个股的数据就不再这里累述,在《股票数据源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的量化指数基金投资