iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0
AI & Data

量化交易30天系列 第 25

量化交易30天 Day25 - 投資組合概念(五) Sharpe ratio

量化交易30天
本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

還記得上一篇畫出來的效率前緣圖嗎?下面這些紅色的點代表一個個投資組合,這篇就來分析這些投組的差異吧!這篇會先介紹Sharpe ratio,然後再回頭看看怎麼應用在投資組合分析。

Sharpe Ratio 夏普比率

在說明夏普比率前,要先了解一個概念,叫做無風險資產,指的是報酬率固定,且不存在違約風險的資產,不過它基本上是一個理論上存在的東西,現實世界中的資產多少都還是存在一點風險,我們只能說某些資產類別是比較接近無風險資產,例如:銀行定存、政府發行公債...等等。

假設以美國公債作為無風險資產,並將資產百分之百分配到美國公債,那它在預期報酬與標準差的二維座標會在哪呢?就實際來繪圖看看吧!

# 跟前一篇寫的程式碼大致相同,只修改繪圖部分:
import matplotlib.pyplot as plt
plt.figure(figsize=(15,10))
plt.scatter(x = portfolios['Standard Dev.'], y = portfolios['Returns'])
# 效率前緣點,用紅色標註
plt.scatter(x = eff_front_std, y = eff_front_ret, c = 'r')
# 無風險資產
plt.scatter(x = 0, y = 0.007, c = 'g', s = 100)
plt.annotate("100% 美國公債", (0,0.007), textcoords="offset points", xytext=(0,10), ha='left', fontsize=20)
# 繪圖設定
plt.grid()
plt.xlabel("Standard Dev.", fontsize=20)
plt.ylabel("Expected Returns", fontsize=20)
plt.xlim(-0.002,0.19)
plt.ylim(0,0.16)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

下面圖中綠色的點就是將資產100%配置在美國公債的結果。

PS.這張圖的右上角那個圖形跟開頭那張圖是一樣的,只是座標軸的範圍變大,所以圖相對縮小。

上圖中藍色的點是效率前緣的其中一個投資組合,來比較這個點與100%美國公債的數據:

Returns Standard Dev. SPY weight TLT weight GLD weight 美國公債
效率前緣 藍點 9.65% 8.14% 34.42% 44.99% 20.57% 0%
100% 美國公債 0.7% 0 -------- -------- -------- 100%

從數據可以觀察到,從百分之百美國公債到藍色點,報酬率增加8.95%,標準差增加8.14%,也就是報酬率上升的同時,風險也增加了,如果把報酬率增加的幅度除以標準差增加的幅度,會得到1.099這個比值,它就是夏普比率,代表每承受多1%的標準差可以提升1.099%的報酬率,學術上的說法是,承受每單位風險能換取的報酬率。

不過這邊還是引用一下維基百科對夏普比率的說明,會有比較清楚的定義:

在金融領域,夏普比率(英語:Sharpe ratio),又叫夏普指數(Sharpe index),衡量的是一項投資(例如證券或投資組合)在對其調整風險後,相對於無風險資產的表現。它的定義是投資收益與無風險收益之差的期望值,再除以投資標準差(即其波動性)。它代表投資者額外承受的每一單位風險所獲得的額外收益。

夏普比率 圖解

如果只保留無風險資產及藍色點在圖上,如下圖,從綠點到藍點,標準差增加△X,預期報酬率增加△Y,夏普比率就是△Y/△X,也就是兩點連線的斜率,這個斜率越高代表承受每單位風險能換取的報酬率越多。

夏普比率最大的效率前緣投組

有了夏普比率,就可以來找找看效率前緣的投組中,哪個是夏普比率最大的。從圖上來找的方式,就是將斜直線的左端固定在上圖的綠色點,然後用這個點去跟效率前緣的每個點去做連線,會得到很多條斜直線,再找出斜率最大的點,想像一下這個過程,應該會發現,其實就是找效率前緣曲線跟綠色點的切線。

先算算看哪一點夏普比率最大吧!

# 找夏普比率最大的投組
max_sharpe = 0
max_sharpe_returns = 0
max_sharpe_std = 0
for i in range(len(eff_front_set)):
    sharpe = ( eff_front_set.iloc[i,:]['Returns'] - 0.007 ) / eff_front_set.iloc[i,:]['Standard Dev.']
    if sharpe > max_sharpe:
        max_sharpe = sharpe
        max_sharpe_std = eff_front_set.iloc[i,:]['Standard Dev.']
        max_sharpe_returns = eff_front_set.iloc[i,:]['Returns']
        max_sharpe_set = (eff_front_set.iloc[i,:]['SPY weight'], eff_front_set.iloc[i,:]['TLT weight'], eff_front_set.iloc[i,:]['GLD weight'])
print("夏普比率最大點的報酬率與標準差 ", "(Returns, Standard Dev.) =", (max_sharpe_returns, max_sharpe_std))
print("夏普比率最大點的投組", "(SPY weight, TLT weight, GLD weight) =", max_sharpe_set)

找到夏普比率最大的點:

夏普比率最大點的報酬率與標準差  (Returns, Standard Dev.) = (0.10411453792285438, 0.08533161659682831)
夏普比率最大點的投組 (SPY weight, TLT weight, GLD weight) = (0.4173123085664148, 0.3575263199323787, 0.2251613715012065)
import matplotlib.pyplot as plt
plt.figure(figsize=(15,10))
# 效率前緣點,用紅色標註
plt.scatter(x = eff_front_std, y = eff_front_ret, c = 'r', s = 0.5)
# 無風險資產
plt.scatter(x = 0, y = 0.007, c = 'g', s = 100)
plt.annotate("100% 美國公債", (0,0.007), textcoords="offset points", xytext=(0,10), ha='left', fontsize=20)
# max sharpe set
plt.scatter(x = max_sharpe_std, y = max_sharpe_returns, c = 'orange', s = 100)
plt.annotate("最大夏普比率投組", (max_sharpe_std, max_sharpe_returns), textcoords="offset points", xytext=(15,-10), ha='left', fontsize=20)
# 切線
plt.plot([0,max_sharpe_std],[0.007, max_sharpe_returns])
# 繪圖設定
plt.grid()
plt.xlabel("Standard Dev.", fontsize=20)
plt.ylabel("Expected Returns", fontsize=20)
plt.xlim(-0.002,0.19)
plt.ylim(0,0.16)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

把這個點跟綠色點連線後,發現它確實是切線,也就代表計算應該是正確的。

本篇總結
這篇用實際的例子去解釋sharpe ratio,感覺上應該有比看維基百科的解釋容易懂一些,也正確地找到資料點中夏普比率最高的投組。下一篇會介紹所謂的資本資產定價模型(簡稱CAPM),說明它是怎麼從效率投資組合理論去演變而來的,請繼續收看囉!

筆者 Sean
奈米戶投資人 / Python愛用者
喜歡用Python玩轉金融數據,從個股基本面、技術面、籌碼面相關資料,一直到總體經濟數據,都是平常接觸到的素材;對於投資,除了研究歷史數據,也喜歡瞭解市場上大家在玩些什麼。


上一篇
量化交易30天 Day24 - 投資組合概念(四) 效率前緣
下一篇
量化交易30天 Day26 - 投資組合概念(六) CAPM的由來
系列文
量化交易30天30

尚未有邦友留言

立即登入留言