第一次发帖,多多包涵。
利用“研究”做了各个指数的PE计算(等权重)。
结果如下。供大家参考。
2016-2-28更新,增加研究分享。
2016-6-26: @scc 的 帖子更全面,
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport bisect#指定日期的指数PE(等权重)def get_index_pe_date(index_code,date):stocks = get_index_stocks(index_code, date)q = query(valuation).filter(valuation.code.in_(stocks))df = get_fundamentals(q, date)if len(df)>0:pe = len(df)/sum([1/p if p>0 else 0 for p in df.pe_ratio])return peelse:return float('NaN')#指数历史PEdef get_index_pe(index_code):start='2005-1-1'end = pd.datetime.today();dates=[]pes=[]for d in pd.date_range(start,end,freq='M'): #频率为月dates.append(d)pes.append(get_index_pe_date(index_code,d))return pd.Series(pes, index=dates)all_index = get_all_securities(['index'])index_choose =['000016.XSHG', '000010.XSHG', '000300.XSHG', '000905.XSHG', '399001.XSHE', '399330.XSHE', '399005.XSHE', '399006.XSHE', '000990.XSHG', '000991.XSHG', '000992.XSHG', '000993.XSHG', '000827.XSHG', '000985.XSHG' ]df_pe = pd.DataFrame()for code in index_choose:print u'正在处理: ',codedf_pe[code]=get_index_pe(code)today= pd.datetime.today()results=[]for code in index_choose:pe = get_index_pe_date(code,today)q_pes = [df_pe.quantile(i/10.0)[code] for i in range(11)]idx = bisect.bisect(q_pes,pe)quantile = idx-(q_pes[idx]-pe)/(q_pes[idx]-q_pes[idx-1])index_name = all_index.ix[code].display_nameresults.append([index_name,'%.2f'% pe,'%.2f'% (quantile*10)]+['%.2f'%q for q in q_pes]+[df_pe[code].count()])df_pe.columns=np.array(results)[:,0]df_pe.plot(figsize=(12,10))columns=[u'名称',u'当前PE',u'分位点%',u'最小PE']+['%d%%'% (i*10) for i in range(1,10)]+[u'最大PE' , u"数据个数"]df = pd.DataFrame(data=results,index=index_choose,columns=columns)df
正在处理: 000016.XSHG
正在处理: 000010.XSHG
正在处理: 000300.XSHG
正在处理: 000905.XSHG
正在处理: 399001.XSHE
正在处理: 399330.XSHE
正在处理: 399005.XSHE
正在处理: 399006.XSHE
正在处理: 000990.XSHG
正在处理: 000991.XSHG
正在处理: 000992.XSHG
正在处理: 000993.XSHG
正在处理: 000827.XSHG
正在处理: 000985.XSHG
| 名称 | 当前PE | 分位点% | 最小PE | 10% | 20% | 30% | 40% | 50% | 60% | 70% | 80% | 90% | 最大PE | 数据个数 |
---|
000016.XSHG | 上证50 | 10.41 | 7.78 | 9.79 | 10.59 | 11.48 | 12.50 | 13.99 | 15.06 | 16.07 | 17.87 | 25.04 | 32.93 | 47.33 | 134 |
---|
000010.XSHG | 上证180 | 15.67 | 19.40 | 13.37 | 14.71 | 15.73 | 16.72 | 17.84 | 19.98 | 22.08 | 23.50 | 32.54 | 40.52 | 58.09 | 134 |
---|
000300.XSHG | 沪深300 | 18.06 | 35.14 | 12.11 | 15.88 | 16.69 | 17.41 | 18.68 | 21.15 | 22.90 | 24.66 | 32.00 | 41.06 | 54.96 | 131 |
---|
000905.XSHG | 中证500 | 34.04 | 47.57 | 17.36 | 25.08 | 26.97 | 28.27 | 30.80 | 35.08 | 39.84 | 46.44 | 54.24 | 62.41 | 72.21 | 110 |
---|
399001.XSHE | 深证成指 | 36.47 | 82.51 | 10.19 | 12.40 | 14.45 | 15.74 | 17.09 | 19.35 | 21.03 | 24.33 | 34.93 | 41.04 | 65.63 | 134 |
---|
399330.XSHE | 深证100 | 22.56 | 50.39 | 11.70 | 16.26 | 18.39 | 19.66 | 21.23 | 22.49 | 24.32 | 27.51 | 36.21 | 42.92 | 52.75 | 134 |
---|
399005.XSHE | 中小板指 | 34.79 | 50.68 | 13.80 | 24.85 | 27.46 | 28.35 | 30.67 | 34.58 | 37.76 | 40.61 | 46.70 | 52.20 | 63.22 | 111 |
---|
399006.XSHE | 创业板指 | 57.37 | 60.10 | 28.42 | 33.56 | 38.26 | 44.10 | 49.33 | 54.61 | 57.34 | 60.41 | 62.72 | 77.75 | 113.88 | 69 |
---|
000990.XSHG | 全指消费 | 44.58 | 66.49 | 29.29 | 33.59 | 34.51 | 35.13 | 36.91 | 38.39 | 42.62 | 45.64 | 48.45 | 58.11 | 74.13 | 55 |
---|
000991.XSHG | 全指医药 | 43.46 | 60.86 | 29.29 | 33.10 | 34.89 | 37.18 | 40.10 | 42.43 | 43.29 | 45.30 | 49.06 | 56.87 | 78.22 | 55 |
---|
000992.XSHG | 全指金融 | 14.86 | 52.40 | 11.14 | 11.70 | 12.75 | 13.17 | 13.72 | 14.69 | 15.42 | 16.39 | 17.55 | 20.42 | 25.28 | 55 |
---|
000993.XSHG | 全指信息 | 67.55 | 72.35 | 30.94 | 36.26 | 39.12 | 41.53 | 49.00 | 55.84 | 60.56 | 66.15 | 72.11 | 93.89 | 132.13 | 55 |
---|
000827.XSHG | 中证环保 | 33.94 | 19.26 | 29.97 | 32.12 | 34.08 | 34.94 | 35.57 | 36.17 | 37.00 | 39.01 | 43.90 | 48.37 | 66.38 | 42 |
---|
000985.XSHG | 中证全指 | 45.10 | 78.46 | 25.39 | 27.22 | 29.06 | 30.60 | 31.24 | 31.79 | 33.21 | 39.32 | 46.16 | 57.16 | 75.41 | 55 |
---|