要计算指数的加权值,指数的市盈率、市净率,或者指数的净资产收益率,都需要用到指数所包含的个股信息,前面分享的《指数的净资产收益率计算》和《指数的市盈率和市净率计算》等文中都有提到。
这些个股的数据怎么来获得呢?下面就来介绍下,总共就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的量化指数基金投资