上一篇《基于Python的指数基金量化投资 - 通过市盈率和市净率对指数估值》介绍了通过市盈率和市净率对指数进行估值,然后结合具体的估值百分位来进行投资。所以指数的市盈率和市净率是两个非常重要的指标。
这里就会有个问题,指数的市盈率和市净率怎么进行计算,指数不像个股,个股的市盈率计算起来比较简单:
同样个股的市净率计算也比较简单:
而指数是一篮子股票,例如沪深300就包含了300家上市公司,中证500包含了500家上市公司,上证50包含了50家上市公司,所以指数是一个上市公司的集合体,这个集合体我们也可以把它看成一家公司,里面包含的这些上市公司可以看成这家公司的某一部分或者某一个部门,这样的话,这家公司的市值就是所有部门的市值总和,公司净利润就是所有部门的利润总和,而公司净资产就是所有部门的净资产总和,同样再通过上面的计算过程就可以得到指数的市盈率:
同样的方式也可以得到指数的市净率:
具体怎么做呢,分为3个步骤:
1)通过指数包含的个股,解析出具体的个股信息;
2)把第一步中所有个股的总市值、总净利润和总净资产计算出来;
3)通过上面介绍的指数计算方式计算出市盈率和市净率即可。
具体来看看代码实现
首先看看市盈率的计算方式
import pandas as pd
import math
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/