指數分類的標準有很多,比如說按市場分、按投資標的分、按指數代表性分。從代表性來分類的話,一般可以分為有三類:綜合指數、寬基指數、窄基指數。

綜合指數是指成分股包含所有上市的股票,以反映全市場的狀況,最典型的就是我們所熟知的上證指數、深證指數,其是觀察市場整體走勢的一個重要指標。我們國內的中證指數公司,就是專門構建各類指數,為投資者提供新的分析工具和投資標的。

今天的文章就集中在對於滬深 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圖標
推薦閱讀:

相關文章