基于Python的指數(shù)基金量化投資 -通過指數(shù)估值榜進(jìn)行指數(shù)投資

前面介紹過針對每一個單獨的指數(shù)沥邻,可以通過市盈率和市凈率的計算獲得指數(shù)的估值百分位危虱,從而進(jìn)行相應(yīng)的投資(《基于Python的指數(shù)基金量化投資 - 通過市盈率和市凈率對指數(shù)估值》)。

這里介紹一個可以把所有指數(shù)估值信息進(jìn)行匯總的方式:指數(shù)估值榜唐全,這樣可以直觀的看出所有指數(shù)的估值點位埃跷,從整體上來進(jìn)行選擇,而不是一個指數(shù)一個指數(shù)的篩選邮利,更加高效和便捷弥雹。


圖中標(biāo)示出了大部分目前的主流指數(shù),縱坐標(biāo)的單位是0%到100%延届,然后通過不同的背景顏色對估值高低進(jìn)行區(qū)分剪勿,從上到下分為7個顏色區(qū)間,從紅色過度綠色分別對應(yīng)嚴(yán)重高估方庭、高估厕吉、正常偏高、正常械念、正常偏低头朱、低估和嚴(yán)重低估,這個區(qū)間是按照前面介紹的估值區(qū)間劃分的(《基于Python的指數(shù)基金量化投資 - 通過市盈率和市凈率對指數(shù)估值》)龄减,如下所示项钮。

分別計算出每個指數(shù)的估值百分位,然后放到對應(yīng)的區(qū)間,就能獲得估值榜的數(shù)據(jù)烁巫。

例如滬深300算出來的估值百分位是75%署隘,然后就把它放在60%-80%正常偏高這個區(qū)間內(nèi)找到75%的位置畫一個白點進(jìn)行標(biāo)識,而中證500算出來的估值百分位是23%亚隙,則在20%-40%正常偏低區(qū)間內(nèi)找到23%的位置畫一個白點進(jìn)行標(biāo)識磁餐,依次找出所有指數(shù)的估值點位后畫出即可。


下面是具體的代碼實現(xiàn)過程恃鞋。


import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import datetime


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',?? #中證消費? -6

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

??????????????? 'g_db500.csv',? # 500低波動-8

??????????????? 'g_jz300.csv',? # 300價值?? -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

# 指數(shù)估值數(shù)據(jù)


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]

???index_info[i] = data_percentage

# 指數(shù)估值百分位計算


plt.figure(1)

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

# 估值區(qū)間繪制(背景)


index_name = ['滬深300',

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

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

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

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

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

????????????? '中證消費',

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

????????????? '500低波動',

????????????? '300價值',

????????????? '醫(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)

# 根據(jù)每個指數(shù)的估值百分位畫出具體的位置


time_end = '2021/04/09'

plt.figure(1)

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=15)

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

# plt.text(-0.7, -0.123, '嚴(yán)重低估', fontdict=font)

plt.axis('off')


plt.show()

# 最后畫圖


如需代碼里面用到的指數(shù)估值數(shù)據(jù)或者有疑問崖媚,大家可以留言,歡迎拍磚^_^

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恤浪,一起剝皮案震驚了整個濱河市畅哑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌水由,老刑警劉巖荠呐,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砂客,居然都是意外死亡泥张,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門鞠值,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媚创,“玉大人,你說我怎么就攤上這事彤恶〕疲” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我歌豺,道長,這世上最難降的妖魔是什么丁侄? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘子寓。我一直安慰自己,他們只是感情好笋除,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布别瞭。 她就那樣靜靜地躺著,像睡著了一般株憾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天嗤瞎,我揣著相機與錄音墙歪,去河邊找鬼。 笑死贝奇,一個胖子當(dāng)著我的面吹牛虹菲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掉瞳,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毕源,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陕习?” 一聲冷哼從身側(cè)響起霎褐,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎该镣,沒想到半個月后冻璃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡损合,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年省艳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫁审。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跋炕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出律适,到底是詐尸還是另有隱情辐烂,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布擦耀,位于F島的核電站棉圈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏眷蜓。R本人自食惡果不足惜分瘾,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吁系。 院中可真熱鬧德召,春花似錦、人聲如沸汽纤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕴坪。三九已至肴掷,卻和暖如春敬锐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呆瞻。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工台夺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痴脾。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓颤介,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赞赖。 傳聞我的和親對象是個殘疾皇子滚朵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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