指數分類的標準有很多,比如說按市場分、按投資標的分、按指數代表性分。從代表性來分類的話,一般可以分為有三類:綜合指數、寬基指數、窄基指數。
綜合指數是指成分股包含所有上市的股票,以反映全市場的狀況,最典型的就是我們所熟知的上證指數、深證指數,其是觀察市場整體走勢的一個重要指標。我們國內的中證指數公司,就是專門構建各類指數,為投資者提供新的分析工具和投資標的。
今天的文章就集中在對於滬深 300、中證 500、中證 1000指數的量化解讀方面,既然是量化,那麼可視化必須是其中很重要一個組成部分,我們的文章會提供數據調取和可視化代碼,供各位更好理解指數構成以及特性。
>>> 滬深300指數
它以規模和流動性作為選樣的兩個根本標準,並賦予流動性更大的權重,符合該指數定位於交易指數的特點。300 指數反映的是流動性強和規模大的代表性股票的股價的綜合變動,可以給投資者提供權威的投資方向,也便於投資者進行跟蹤和進行投資組合,保證了指數的穩定性、代表性和可操作性。
>>> 中證500指數
該指數又稱中證小盤 500 指數(CSI Smallcap 500 index),簡稱中證 500(CSI 500),上海行情代碼為 000905,深圳行情代碼為 399905。中證 500 指數有 3 個構建步驟。
步驟1. 樣本空間內股票扣除滬深300指數樣本股即最近一年日均總市值排名前300名的股票;
步驟2. 將步驟1中剩餘股票按照最近一年(新股為上市以來)的日均成交金額由高到低排名,剔除排名後20%的股票;
步驟3. 將步驟2中剩餘股票按照日均總市值由高到低進行排名,選取排名在前500名的股票作為中證500指數樣本股。
>>> 中證1000指數
根據金融界網站提供的資料,中證 1000 指數編製方法採用較為普遍的自由流通市值加權法,指數成分股從全部A股中剔除滬深 300、中證 500 指數成分股後,結合流動性標準選取過去一年日均總市值最大的 1000 只股票,綜合反映中國 A 股市場中小市值公司的股票價格表現,是中證核心市值指數體系的重要組成部分。
我們通過聚寬研究平臺,首先構建一個 list 名單「index_list」,然後通過 get_price 函數調取數據,然後將數據處理成凈值,繪製出來,得到以下效果:
我們定日期 2019-04-18 為截止日期,向前推 1000 天,發現最近 4 年來,表現最差的其實是中證 1000 指數,說明瞭在市場長期價值篩選中,小盤股出現了顯著的估值下滑和資金流出。而之前大家對於小盤股的印象則是高波動率和高回報率。
上圖就是三大指數的波動率情況,還是同一個時間段,我們使用移動窗口標準差,再除以該窗口期內的價格均值,去價格量綱得到這個曲線,通過研究平臺文件我們輸出波動率具體值為:
000852.XSHG 0.034911 000905.XSHG 0.030969 000300.XSHG 0.023826
這表示 000852.XSHG 中證 1000 指數在全段時間的波動率是最高的,通過藍線也可以清晰看出。而滬深 300 由於大盤股較多,波動率偏低,中證 500 居中。
這三大指數之間有何種相關關係呢?實際上從走勢看,它們畢竟都屬於中國股票市場,應該非常相關,我們抱著這個疑問,繪製了全段價格相關性和全段波動率相關性,試圖尋找答案。
繪製相關性矩陣需要導入 seaborn 包,其 heatmap 函數就是專門用於熱力標色的矩陣圖繪製的。分析結果顯示,三大指數的走勢相關性並不十分高,特別是滬深 300 和中證 1000 差異最大。而波動率相關性分析則體現出更高的結果,說明在出現較大波動時刻,指數的共振還是很明顯的,這表現出較高的系統性風險。
我們進入所有聚寬的老用戶們最熟悉的 get_fundamentals 函數,通過調取 valuation.code、valuation.market_cap 這兩項數值,獲得股票代碼和市值數據,並列印前5行,獲得以下效果:
然後我們分別繪製了滬深 300、中證 500、中證 1000 的市值分佈,得到以下效果:
我們得到一個直觀上很顯著的統計特性——中證 1000 的分佈最為均勻,首尾差異較小,滬深 300 的市值分佈很不均勻,有部分股票市值極大。
通過繪製直方圖,可以看到指數成分股(以滬深 300 為例)的市值分佈情況:
這裡顯示出僅有少量樣本分佈在市值極大的區間,而大部分有統計意義的樣本集中在市值 1000 億元左右的區間。這樣的數據分佈形態很容易扭曲均值的表達能力,所以針對這類樣本,我們應該多用中位數而非均值表達整體特徵。
接下來我們使用 4 個簡單的統計指標完成對滬深 300 為例的指數的特性描述,分別是:均值、中位數、標準差、極差。
# 均值 market_cap_mean_50 = mean(list(df_50.market_cap)) # 中位數 market_cap_median_50 = median(list(df_50.market_cap)) # 標準差 market_cap_std_50 = std(list(df_50.market_cap)) # 極差 market_cap_ptp_50 = ptp(list(df_50.market_cap))
經過計算得到:滬深300樣本的成分股市值
均值:979.8816889999999
中位數:381.9389
標準差:2070.650186717265
極差:18721.7925
依然是圍繞市值,我們分引入箱體圖Boxplot,它是一種表示數據分佈的方法,一個基本的箱體圖從上到下分別表示最大值,上四分位,均值,下四分位,最小值。有的箱體圖中還會加入異常值等。
箱體圖有以下幾個優點:
1. 可以直觀明瞭地識別數據中的異常值
2. 利用箱體圖可以判斷數據的偏態和尾重
3. 利用箱體圖可以比較不同批次的數據形狀
通過python的pandas包提供的boxplot()函數即可繪製得到效果。
通過分析三大指數的箱體圖,我們看到滬深 300 的樣本離羣情況最為嚴重,箱體圖主體部分(25%分位到75%分位)被離羣點嚴重壓縮。中證 500 表現較好,離羣點並不很多。中證 1000 也包含了部分市值較大的股票,主要原因是從 100 億元到 300 億元的某些股票可能由於市值上升過快,沒能及時被編製更新到中證 500 指數中。
瞭解一個指數的行業構成也非常關鍵,我們可以看到其成分股是否在行業方面有過度集中。通過聚寬提供的 get_industry 函數可以獲得行業數據。
具體代碼為:
industry = get_industry(list(df_50.code)) stock_dict={} for stock in industry.keys(): try: # 取到每個股票的【申萬一級】行業名稱 stock_dict[stock] = industry[stock][sw_l1][industry_name] except: pass
然後我們導入 import matplotlib.pyplot as plt,通過其 pie 函數,可以實現對餅圖的繪製。
代碼如下:
tt = DFindustry.groupby([industry_name]).size() tt1 = list(tt.index.values) tt2 = list(tt.values)
labels = tt1 fracs = tt2
plt.figure(figsize=(10,8)) plt.axes(aspect=1) # set this , Figure is round, otherwise it is an ellipse plt.pie(x=fracs, labels=labels, explode=None,autopct=%3.1f %%,shadow=True) plt.title(成分股行業分佈餅圖) plt.show()
上圖顯示的是中證1000指數的行業分佈,我們還輔助計算了分佈的均勻性,得到結論:
行業數量:28
平均個股數量:35.714285714285715
個股數量標準差:23.84452189685916
個股分佈變異係數:0.6676466131120564
結論顯示中證 1000 指數在各行業分佈均勻,平均每個行業 35 只個股。如果到了滬深 300 領域,這個分佈情況發生了如下變化:
可以看到,銀行和非銀金融佔據了非常大的比重,資產較重的交通運輸、化工、有色金屬和房地產也有較大提升。說明瞭滬深 300 指數對於金融行業的風險暴露比較大。這裡僅展示了上市公司家數分佈,如果按照市值展示,情況會更加顯著。
我們還可以深入到指數內部去挖掘一個因子——兩兩相關係數平均值,並通過 for 循環,實現對於每個日期截面的該因子值計算。
程序設計方面,首先通過 get_trade_days 獲得一個日期序列,用於循環。然後通過 get_price 提取 20 日價格 DataFrame,再通過 corr().mean().mean() 實現相關係數計算、每個標的相關係數、均值的均值,獲得每個日期截面一個值。我們將指數凈值化處理,和這個指標繪製在一起,可以看到如圖效果:
指數成分股兩兩相關性均值是一個風險指標,當該值達到較高區間時,說明成分股同向波動顯著,一般是市場極度活躍的區間。統計繪圖和計算,我們得到:
中證1000:0.36256388612173046
中證500:0.36003023746871143
滬深300:0.3196961076040989
說明指數內部,隨著股票數量的增加特別是高 beta 股票的增加,這種風險更加加劇。本次我們僅展示部分簡單的統計指標計算,核心都是通過圖形化方式,解讀指數內部特徵,希望讀者們也能補充思路,進一步挖掘指數特性,在深刻熟悉指數構成的基礎上,即可熟悉alpha因子的挖掘。
多圖解讀三大股票指數 滬深300、中證500、中證1000有何細節差異?mp.weixin.qq.com 推薦閱讀: