美文网首页
基于Python的指数基金量化投资——指数包含的个股数据获取

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

作者: 小将前行 | 来源:发表于2021-11-16 21:58 被阅读0次

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

这些个股的数据怎么来获得呢?下面就来介绍下,总共就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']

如需代码里面用到的指数估值数据或者有疑问,大家可以留言,欢迎交流^_^

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

相关文章

网友评论

      本文标题:基于Python的指数基金量化投资——指数包含的个股数据获取

      本文链接:https://www.haomeiwen.com/subject/brlktrtx.html