基于Python的指數(shù)基金量化投資——指數(shù)基金估值榜

前面介紹過《基于Python的指數(shù)基金量化投資-通過市盈率和市凈率對(duì)指數(shù)估值》饰抒,通過估值來進(jìn)行指數(shù)基金的投資箫措。

當(dāng)估值百分位為90%-100%的時(shí)候佩迟,指數(shù)處于嚴(yán)重高估狀態(tài),可以考慮全倉賣出遏乔;

當(dāng)估值百分位為80%-90%的時(shí)候点寥,指數(shù)處于高估狀態(tài)赊级,可以考慮大份額賣出;

當(dāng)估值百分位為60%-80%的時(shí)候俐银,指數(shù)處于正常偏高狀態(tài)尿背,可以考慮小份額賣出;

當(dāng)估值百分位為40%-60%的時(shí)候捶惜,指數(shù)處于正常狀態(tài)田藐,可以考慮持有;

當(dāng)估值百分位為20%-40%的時(shí)候吱七,指數(shù)處于正常偏低狀態(tài)汽久,可以考慮小份額定投;

當(dāng)估值百分位為10%-20%的時(shí)候踊餐,指數(shù)處于低估狀態(tài)景醇,可以考慮大份額定投;

當(dāng)估值百分位為0%-10%的時(shí)候市袖,指數(shù)處于嚴(yán)重低估狀態(tài)啡直,可以考慮大份額定投+增量買入烁涌;


有了這個(gè)策略,就需要觀察每個(gè)指數(shù)的估值百分位情況酒觅,如果一個(gè)一個(gè)查看會(huì)很麻煩撮执,最簡單的辦法就是把各個(gè)指數(shù)直觀的通過圖形的方式表現(xiàn)出來,如下圖所示:

圖中按照嚴(yán)重低估舷丹、低估抒钱、正常偏低、正常颜凯、正常偏高谋币、高估和嚴(yán)重高估劃分了對(duì)應(yīng)的區(qū)域,并用不同的顏色進(jìn)行了區(qū)分症概,然后分別計(jì)算每一個(gè)指數(shù)的估值百分位蕾额,然后把計(jì)算出來的結(jié)果畫在相應(yīng)的區(qū)域,這樣就可以非常直觀的看到所有指數(shù)的一個(gè)估值情況彼城。


源碼


# 源碼中用到的估值數(shù)據(jù)文件g_*.csv可以聯(lián)系小將獲取诅蝶。


import pandas as pd

import numpy as np

import matplotlib.pyplot as plt



index_name_csv = ['g_hs300.csv',? #滬深300 - 0

??????????????? 'g_zz500.csv',? #中證500 - 1

??????????????? 'g_zz100.csv',? #中證100 - 2

??????????????? 'g_shz50.csv',? #上證50? - 3

??????????????? 'g_hsyy300.csv',? #滬深醫(yī)藥300 - 4

??????????????? 'g_zzyh.csv',?? #中證銀行? -5

??????????????? 'g_zzxf.csv',?? #中證消費(fèi)? -6

??????????????? 'g_zzbj.csv',?? #中證白酒? -7

??????????????? 'g_db500.csv',? # 500低波動(dòng)-8

??????????????? 'g_jz300.csv',? # 300價(jià)值?? -9

??????????????? 'g_yy100.csv',? #醫(yī)藥100?? -10

??????????????? 'g_zzyyao.csv',?? #中證醫(yī)藥? -11

??????????????? 'g_jbm50.csv',? #基本面50? -12

??????????????? 'g_shzhl.csv',? #上證紅利? -13

??????????????? 'g_zzhl.csv',?? #中證紅利? -14

??????????????? 'g_zzjg.csv',?? #中證軍工? -15

??????????????? 'g_spyl.csv',?? #食品飲料? -16

??????????????? 'g_zqgs.csv',?? #證券公司? -17

??????????????? 'g_ylcy.csv',?? #養(yǎng)老產(chǎn)業(yè)? -18

??????????????? 'g_szhl.csv',?? #深證紅利? -19

??????????????? 'g_zzhb.csv',?? #中證環(huán)保? -20

??????????????? 'g_cyb.csv',??? #創(chuàng)業(yè)板??? -21

??????????????? 'g_hszs.csv',?? #恒生指數(shù)? -22

??????????????? 'g_hsgqzs.csv',?? #恒生國企指數(shù)? -23

??????????????? 'g_zghl50.csv',? #中國互聯(lián)50? -24

??????????????? 'g_xgdp.csv',? #香港大盤? -25

??????????????? 'g_xgzx.csv']? #香港中小? -26


index_info = np.zeros([len(index_name_csv),1])

for i in range(len(index_name_csv)):

???index_data = pd.read_csv('./importfile/indexSeries/indexValuation/g/' +index_name_csv[i])

???if index_name_csv[i] == 'g_zzyh.csv' or index_name_csv[i] =='g_zqgs.csv':

???????data_calc = index_data['pb']

???else:

???????data_calc = index_data['pe']

???xx = np.where(data_calc < data_calc.values[-1])

???data_percentage = len(xx[0]) / data_calc.shape[0]


???if index_name_csv[i] == 'g_zzyh.csv':

???????data_calc = index_data['pe']

???????xx = np.where(data_calc < data_calc.values[-1])

???????data_percentage_add = len(xx[0]) / data_calc.shape[0]

???????index_info[i] = 0.8*data_percentage + 0.2*data_percentage_add

???else:

???????index_info[i] = data_percentage

plt.figure(3)

plt.rcParams['font.sans-serif'] =['Microsoft YaHei']

plt.plot(index_info, '--ow', ms=12,linewidth=2)

plt.axhspan(0, 0.1, facecolor='#4D8070')

plt.axhspan(0.1, 0.2, facecolor='#21DB85')

plt.axhspan(0.2, 0.4, facecolor='#B0D91C')

plt.axhspan(0.4, 0.6, facecolor='#E3BD00')

plt.axhspan(0.6, 0.8, facecolor='#FF9421')

plt.axhspan(0.8, 0.9, facecolor='#F56600')

plt.axhspan(0.9, 1.4, facecolor='#B22222')

plt.xlim(-1,len(index_info))

plt.ylim(-0.15, 1.4)

scale_y = 0.07

offset_x = 0.25

offset_y = 0.062

offset_x_num = 0.1

offset_x_alpha = 0.15

font_size = 22


index_name = ['滬深300',

????????????? '中證500',

????????????? '中證100',

????????????? '上證50',

????????????? '滬深醫(yī)藥300',

????????????? '中證銀行',

????????????? '中證消費(fèi)',

????????????? '中證白酒',

????????????? '500低波動(dòng)',

????????????? '300價(jià)值',

????????????? '醫(yī)藥100',

????????????? '中證醫(yī)藥',

????????????? '基本面50',

????????????? '上證紅利',

????????????? '中證紅利',

????????????? '中證軍工',

????????????? '食品飲料',

????????????? '證券公司',

?????????????'養(yǎng)老產(chǎn)業(yè)',

????????????? '深證紅利',

????????????? '中證環(huán)保',

????????????? '創(chuàng)業(yè)板',

????????????? '恒生指數(shù)',

????????????? 'H股指數(shù)',

????????????? '中國互聯(lián)50',

????????????? '香港大盤',

????????????? '香港中小']

font = {'size': font_size, 'color': 'w','weight': 'black'}

for i in range(len(index_name)):

???index_name_word = index_name[i]

???for j in range(len(index_name_word)):

???????if index_name_word[j].isdigit():

???????????plt.text(i - offset_x + offset_x_num, index_info[i] - j * scale_y +len(index_name_word) * offset_y,

???????????????????? index_name_word[j],fontdict=font)

???????else:

???????????plt.text(i - offset_x, index_info[i] - j * scale_y +len(index_name_word) * offset_y, index_name_word[j],

???????????????????? fontdict=font)


time_end = '2020/12/21'

plt.plot([-1,len(index_info)],[-0.025,-0.025],color='#CCCCCC',linewidth=2,linestyle='--')

shift_x = 4.23

text_base_x = -0.8

text_base_shift_x = 0.55

plt.gca().add_patch(plt.Rectangle((-1+0*shift_x,-0.15),2.6,0.1,color='#4D8070'))

plt.text(text_base_x+0*shift_x,-0.123,'嚴(yán)重低估',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+1*shift_x,-0.15),2.6,0.1,color='#21DB85'))

plt.text(text_base_x+text_base_shift_x+1*shift_x,-0.123,'低估',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+2*shift_x,-0.15),2.6,0.1,color='#B0D91C'))

plt.text(text_base_x+2*shift_x,-0.123,'正常偏低',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+3*shift_x,-0.15),2.6,0.1,color='#E3BD00'))

plt.text(text_base_x+text_base_shift_x+3*shift_x,-0.123,'正常',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+4*shift_x,-0.15),2.6,0.1,color='#FF9421'))

plt.text(text_base_x+4*shift_x,-0.123,'正常偏高',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+5*shift_x,-0.15),2.6,0.1,color='#F56600'))

plt.text(text_base_x+text_base_shift_x+5*shift_x,-0.123,'高估',fontdict=font)

plt.gca().add_patch(plt.Rectangle((-1+6*shift_x,-0.15),2.6,0.1,color='#B22222'))

plt.text(text_base_x+6*shift_x,-0.123,'嚴(yán)重高估',fontdict=font)

plt.title(time_end,size=28)

plt.axis('off')


g_globalMarket =pd.read_csv('./importfile/indexSeries/indexValuation/g_globalMarket/g_globalMarket.csv')

index_data_pe =g_globalMarket['pe'].values[1:len(g_globalMarket['pe']):1]

index_data_pb = g_globalMarket['pb'].values[1:len(g_globalMarket['pb']):1]

size_title = 28

size_label = 23

size_text = 35

size_line = 3

size_rotation = 20

plt_gap = 10


plt.show()


程序中用到的數(shù)據(jù)如果有問題,大家可以留言獲取募壕,歡迎大家一起交流溝通^_^

課程參考:網(wǎng)易云課堂? 基于Python的量化指數(shù)基金投資

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末调炬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舱馅,更是在濱河造成了極大的恐慌缰泡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代嗤,死亡現(xiàn)場離奇詭異棘钞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)干毅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門武翎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溶锭,你說我怎么就攤上這事宝恶。” “怎么了趴捅?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵垫毙,是天一觀的道長。 經(jīng)常有香客問我拱绑,道長综芥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任猎拨,我火速辦了婚禮膀藐,結(jié)果婚禮上屠阻,老公的妹妹穿的比我還像新娘。我一直安慰自己额各,他們只是感情好国觉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虾啦,像睡著了一般麻诀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傲醉,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天蝇闭,我揣著相機(jī)與錄音,去河邊找鬼硬毕。 笑死呻引,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吐咳。 我是一名探鬼主播苞七,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挪丢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卢厂,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤乾蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后慎恒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體任内,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年融柬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了死嗦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粒氧,死狀恐怖越除,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情外盯,我是刑警寧澤摘盆,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站饱苟,受9級(jí)特大地震影響孩擂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箱熬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一类垦、第九天 我趴在偏房一處隱蔽的房頂上張望狈邑。 院中可真熱鬧,春花似錦蚤认、人聲如沸米苹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驱入。三九已至,卻和暖如春氯析,著一層夾襖步出監(jiān)牢的瞬間亏较,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工掩缓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雪情,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓你辣,卻偏偏與公主長得像巡通,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舍哄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容