今天我們來看一下市場上常見的風險與報酬指標:夏普比率(sharpe ratio),這是一個風險跟報酬的比例,有了夏普比率,你就知道為什麼要投資美股而不是台股了!
以這著比率,可以想像,sharp ratio 越高,代表獲利大於風險,
而sharp ratio 越低,代表風險大於獲利,那就會有點危險了!
所以找一個sharp ratio 越高的指數,就等於找出了「獲利大且風險相對小」的指數喔!
如何定義獲利?
獲利可以用每天平均的漲跌來代表,也就是今天漲1%,明天跌1%,平均獲利就是0%,
接下來我們就用python來計算每天平均獲利吧
接下來,我們就可以來計算獲利:
pct_change = close.pct_change()
profit = pct_change.mean()
profit.sort_values()
上方的程式碼,
第一行,有好用的功能,叫做adjclose.pct_change()
,這個函示會計算今天漲了x%,並且以x/100來表示,將整個table中的每一條時間序列都進行計算喔!
第二行,針對每一檔指數,將每一天的漲跌都平均起來,
第三行,進行由小到大的排序
以平均獲利來說,看到台股(TSEC weighted index)竟然排在倒數第三位,
可以見台灣投資人多麼可憐XDD
如何衡量風險
風險通常會用標準差(standard deviation)來計算,標準差,可以想像是股票震盪的程度,例如金融海嘯的時候,股票上上下下的比較劇烈,標準差很大。今天就不折磨各位了,有興趣請參考wiki介紹,我們直接用 python 當中現有的程式碼來計算即可:
risk = pct_change.std()
計算sharpe ratio
這個就更簡單了,直接相除即可
sharpe = profit / risk * (252 ** 0.5)
sharpe.sort_values()
可以看到上述程式,我們額外乘了一個「252 ** 0.5」
因為我們希望算年化 annual sharpe ratio,
其中的252是一年大約的交易天數,
而「**」是「次方」的意思。
為什麼要乘這個常數?最主要是因為大家幫自己的歷史回測計算sharpe ratio時候,都有乘上這個數字,要乘了才有辦法跟別人比較XD,
當然這背後可能有更深層的數學邏輯,但我傾向於這樣理解(懶)。
你會發現
台股竟然倒數第三名!
註:2020年更新,台灣排名第六名!超級前面~~~
可以發現台股真的好慘,慘不忍睹,為什麼會這樣呢,我們可以將歷史圖表畫出來:
可以發現因為我們是從1998年開始計算的,那個時候剛好也上萬點,跟現在的萬點是同一個萬點,反觀我們來看美股:
可以看到從1998年開始,直到現在漲了將近3倍!
可見台股的獲利不理想是導致於sharpe ratio比較低的很大的因素。
我們目前計算的sharpe ratio,是所有歷史資料的平均值,
然而我們知道,雖然台股總平均來說很爛,但是應該有時也有可圈可點之處,
我們希望用時間移動窗格,每日都計算252天以前的sharpe值,
來找出台股表現比較好的時段
移動窗格
你以為這個很難嗎?其實超簡單,跟上面幾乎一樣,只要做一點小更改:
# before
profit = pct_change.mean()
risk = pct_change.std()
sharpe = profit / risk * (252 ** 0.5)
# after
profit = pct_change.rolling(252).mean()
risk = pct_change.rolling(252).std()
sharpe = profit / risk * (252 ** 0.5)
幾乎長的一模一樣對吧?唯一不一樣的是rolling(252)
這個功能,
這是移動窗格252天的意思。
額外要注意的是,之前的寫法中,sharpe是一個series,index為指數名稱,而在現在的寫法中,sharpe變成了一個dataframe(table),其index代表日期,而columns代表每檔指數,其中的數值是 252 天的 sharpe ratio,神奇吧!
這就是python跟R最強大的資料處理功能!
有了這個移動窗格版的sharpe ratio,我們做圖後,就可以來看一些端倪:
做圖看端倪
close['TSEC weighted index'].plot()
sharpe['TSEC weighted index'].plot(secondary_y=True)
以上的代碼可以繪出下面這張圖,其中藍色的為加權指數,而黃色的為sharpe ratio,由於這兩個時間序列的數值差非常多,台股可能是在4000~10000左右,而sharpe可能是在-2~2左右,所以上方第二行程式中,我們用secondary_y=True
這個參數,來將兩個數值的座標分開,所以下方的圖中,可以看到sharpe ratio的大小標示在右邊。
以上所有程式碼,都可以在 colab 範例中找到喔!
可以看到,sharpe ratio (黃)在台股加權指數(藍)高點時,會比較大,而台股低點時,會比較低
圖中還可以看出,在大盤高點時,sharpe ratio會領先大盤往下落,接下來我們就可以利用這個特點,來模擬一些買賣的實驗。
下次我們就來創造一個夏普策略吧!
其實程式碼已經寫好了,但還沒時間寫文章
接下來就可以進入下一單元,我們利用sharpe ratio來寫一個策略吧!