投資組合報酬率相關係數

共變異數與相關係數(Covariance and Correlation Coefficient of Financial Assets)

要評估兩個資產(assets)報酬率的相關性時,就需要計算它們的共變異數和相關係數。

舉例來說,有A和B兩個資產,過去六個月的報酬率分別是


由過去六個月的報酬,可以算出A的平均月報酬是2.17%,B是2.15%(算術平均數)。但可以明顯看出A和B不是齊漲齊跌的。有時候會有一個上揚,另一個卻虧損(第五個月份)。共變異數(Covariance)量測的是,這兩者的月報酬向同一方向偏離各自平均報酬的程度。它的公式為

Cov= 1/(n-1) * Sum i=1 to n (Rai-Raave)*(Rbi-Rbave)

Rai 代表A資產各月份的報酬率
Rbi 代表B資產各月份的報酬率
Raave 表A 資產的平均報酬率
Rbave 表B資產的平均報酬率

就是將A、B兩者每個月的報酬率和平均報酬率的差相乘,然後除以5。(ps因為是用歷史報酬,要除以n-1)

然後將118.29除以5,等於23.66,這就是A、B兩者的共變異數(Covariance)。

在計算過程中可以發現,假如AB兩者某個月的報酬都是同時高於平均或同時低於平均,這樣兩者報酬率和平均報酬率的差相乘後會得到一個正數,會讓共變異數的數值變大。假如AB兩者某月份報酬,一個高過平均,一個低於平均,那麼兩者報酬率與平均的差相乘會得到一個負數,會減小共變異數的數值,或使其成為負數。

但問題來了,AB兩資產報酬的共變異數23.66,這樣兩者的報酬率相關性到底如何呢?假如兩者的報酬率都是穩定的,這樣23.66會代表比較高的相關程度,假如兩者波動性都很大,那麼共變異數23.66其實代表的相關程度不高。為了解決這個問題,我們可以把共變異數除以AB兩者報酬率的標準差,就會得到相關係數(Correlation coefficient)。

Correlation coefficient = Cov / (SDa*SDb)

Cov表AB的共變異數
SDa 為A的標準差
SDb 為B的標準差

用Excel算出A的標準差是7.96,B的標準差為4.53。兩者的相關係數等於23.66/(7.96*4.53)=0.66。

相關係數會是一個介於-1到+1間的值。+1代表兩者完全正相關,-1表完全負相關。在資產配置理論裡,相關程度愈低的資產,將發揮愈大的”互補”功效。

回到首頁:請按這裡

初來乍到:請看”如何使用本部落格”

相關文章:
標準差怎麼算

投資組合的預期報酬(Expected Return of Portfolio)

投資組合的標準差(Standard Deviation of Expected Return of Portfolio)

資產比重對投資組合報酬及標準差的影響

資產配置的提升報酬效果(Diversifiable and Nondiversifiable Volatility)

從一則健康新聞談起(Correlation does NOT mean causation)

但這邊的計算跟投組報酬有些許不同,無法由個別資產的變異數直接加權計算。假設我們的投組有兩檔ETF,資料如下,如何計算投組的報酬率變異數呢?

[啟動LINE推播] 每日重大新聞通知

(共變異數)

把甲乙兩個股票組合起來的投資組合,變異數要怎麼計算?

多角化與風險分散

風險分散的道理,即是「不要將雞蛋放在同一個籃子裡」。透過多角化的投資方式,就能投資組合的風險分散掉。不過分散的效果,還要看組合內的個別資產的相關係數而定。

相關係數越高,分散的效果越差; 相關係數越低、甚至是負的,分散的效果越好。

當相關係數=1時,投資組合標準差是個別資產標準差的加權平均,無風險分散效果。當相關係數介於+1與-1之間,投資組合標準差小於個別資產標準差的加權平均,有風險分散的效果。當相關係數=-1,風險分散效果最好。

(延伸閱讀:還在選日子進場賭輸贏?經濟學家這樣說:九成賺頭決定在資產配置!)

資本市場理論 投資組合管理

市場效率與投資組合管理

市場是否具有效率,和管理投資組合的積極程度有些關係。

當市場沒有效率

當市場不是很有效率時,可能會有低估或是高估的投資標的,此時投資者本身如果具有分析的時間以及能力,可以採取積極投資策略,根據所得到的資訊進行分析,進場買賣,獲取理想的報酬。

當市場很有效率

當市場處於非常有效的情況時,市場價格會反映了所有資訊,包含內線消息。這時不論如何努力地分析、研究,都很難找出價格低估或是高估的投資標的。很難找出,就很難從市場中賺取超額報酬。此時,可以想想當再怎麼努力尋找資訊進行分析都無法賺取超額報酬,那不如採取較省時省力的被動投資策略。

主動式(積極)投資組合管理介紹

主動式投資的兩大重點分別為「擇時」、以及「選股」。

擇時(Market Timing)

擇時,是預估或是判斷市場,已掌握進場或是出場的時機,來挑整投資組合,達成最佳的資產配置。簡單講就是找最佳時機。當判斷處於多頭行情時,為了增加報酬,會出售貝他係數(β)較小的股票,將資金轉入貝他係數(β)較大的股票。

貝他係數(β)越大,受市場影響越大。

多頭市場時,可降低現金權益比例(Cash/Equity Ratio),因市場行情即將上漲,應該降低閒置資金的比例。反之當空頭市場時,要提高現金權益比,以減少投資損失。

如果不具有擇時的能力,利用定期定額投資法,就能避開錯誤擇時的風險。

選股策略

選股的基本原則是挑有上漲潛力、或是目前價格被低估的目標。簡單講是找好標的。由上而下選股法,是要挑對類別、產業,當產業有前景,即使績效低的公司仍賺錢。在選股方面,要避免選擇太多性質類似的個股,因為這樣無法降低投資風險。當發現有利、不利消息時,調整持股可以賺取享有因題的上漲,降低可能下跌股票的比重。小型股成長潛力較佳,適合能承受風險,以及希望能賺取較高報酬的投資人。大型股獲利穩定,股價較不具爆發性,適合穩健型投資人。

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

這篇會假設有一個投資組合,裡面只有兩種資產,來說明報酬與風險的概念,條件如下:

資產A:預期年化報酬9%,標準差10%。
資產B:預期年化報酬18%,標準差30%。

稍微科普一下,

  • 預期年化報酬率:代表標的未來預測的年化報酬是幾%,而預測方法則是每個人有不同見解,例如:可以用過去績效來衡量、或是未來展望...等等。
  • 標準差:代表年化報酬的波動程度,標準差越大,報酬的可能範圍越廣,標準差會落在0~100%。

投資組合報酬率

假設我們用A、B組成一個投資組合,A佔投組總資產的x部份,B就是佔(1-x),這邊是假設不保留現金的情況。代入資產A與B的預期年化報酬,投組報酬率就會是:

R = 0.09x + 0.18(1-x) = 0.18 - 0.09x

代表不同的x會產生不同的投組預期報酬率,例如:

  • A佔總資產的25%,x就是0.25,將x帶入公式,R就會是15.75%
  • A佔總資產的50%,x就是0.5,R就是13.5%

可以發現,當A資產佔比越高,預期報酬率越低,因為A本身的預期報酬就比較低,所以應該將A捨去追求最高的預期報酬率嗎?這個問題就牽涉到投資組合標準差與相關係數。

投資組合標準差與相關係數

要計算投資組合的標準差,是用公式慢慢推導可以得到,不過因為有點冗長,這邊直接用python寫成計算式比較快:

import math

def s(x, Sa, Sb, corr):
    return math.sqrt( (x**2) * Sa**2 + ((1-x)**2) * Sb**2 + 2 * x * (1-x) * corr * Sa * Sb )

其中:s是投組標準差,x是A資產佔總資產的比例,Sa是A資產標準差,Sb是B資產標準差,corr是A與B的相關係數。

相關係數(corr)是代表A與B資產收益率的變化關係,corr會在-1到+1這個範圍內,corr小於0的話代表A與B資產的報酬率通常是反向變動,大於0則是同向變動。

相關係數對於投資組合標準差的影響

假設我們用A資產60%,B資產40%的投資組合,帶入上面的數字及公式,

import pandas as pd
import numpy as np

# params
corr_set = [-1, -0.5, 0, 0.5, 1]

# standard deviation set
std_dev = []

# calculate standard deviations
for corr in corr_set:
    std_dev.append(s(0.6, 0.1, 0.3, corr))
df = pd.DataFrame({'corr': corr_set, 'std_dev': std_dev}, columns = ['corr','std_dev'])
df

可以得到下列表格,相關係數由-1到+1,標準差逐漸上升,因為當兩種資產呈同向變動的時候,波動度會比呈反向變動的大。

投資組合報酬率相關係數

投組配比 v.s. 相關係數 v.s. 標準差 三者的關係

上面跑了相關係數跟標準差的關係,現在則是要再加入一個變數,就是A佔總資產的比例x,也就是A與B的比例變化。所以呢我就將x從0到1切成100等分,也就是A佔比從0到100%(B從100%到0)。

  • 先算出平均報酬
import matplotlib.pyplot as plt
import pandas as pd

# 預期報酬計算公式
def exp_return(x):
    return(9*x+18*(1-x))

# 計算不同組合下的預期報酬
rets=list(map(exp_return,[x/100 for x in range(101)]))

# 轉成 dataframe
rets_df = pd.DataFrame(index=list(range(0, 101)), data=rets, columns=['expected return'])

# 畫圖
plt.figure(figsize=(15,10))
plt.plot(rets_df)
plt.ylim([8,19])
plt.xlabel("A資產佔比(%)", fontsize=20)
plt.ylabel("投組預期報酬率(%)", fontsize=20)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

投資組合報酬率相關係數

上圖中的斜直線,越往右下代表A佔比越高,所以預期報酬會越接近A資產的預期報酬,反之亦然。

  • 計算不同報酬,不同資產配比下的標準差
# 投組標準差資料集合
std_dev_sets = []

# 計算標準差
for corr in corr_set:
    std_dev = []
    for x in range(0,101):
        std_dev.append(s(x/100, 0.1, 0.3, corr))
    std_dev_sets.append(std_dev)

# 繪圖
plt.figure(figsize=(15,10))
plt.plot(std_dev_sets[0],rets,label='corr = -1')
plt.plot(std_dev_sets[1],rets,label='corr = -0.5')
plt.plot(std_dev_sets[2],rets,label='corr = 0')
plt.plot(std_dev_sets[3],rets,label='corr = 0.5')
plt.plot(std_dev_sets[4],rets,label='corr = 1')
plt.xlabel('投組標準差(%)', fontsize=20)
plt.ylabel('投組預期報酬率(%)', fontsize=20)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.legend(loc='upper left',prop={'size': 15})

投資組合報酬率相關係數

上面這張圖乍看資訊很多,可以從幾個方向拆解,就會比較好懂了:

  1. Y軸代表投組的預期報酬率,而根據本篇最上面那條公式,會影響預期報酬率的只有資產配比x,所以Y軸從下到上的這些數字,就代表不同的資產配比算出來的投組預期報酬。
  2. 假設我們取相關係數corr=-0.5這條橘色線來看,當投組預期報酬率往上增加的時候,會有一小段彎曲的部份,這段負斜率的部份代表標準差下降的同時,報酬率卻是上升的,這是單一資產做不到的事情,因為單一資產的話,通常報酬上升的同時風險也會增加。
  3. 相關係數corr小於0的時候,投組才比較有標準差下降,而報酬率上升的這種效果。
  4. 不同相關係數會導致線圖長得不一樣,不過corr=-1跟corr=+1這兩條線算是虛構的,因為在真實世界裡面很少有完全負相關或是完全正相關的資產組

本篇總結
這篇就大概講投資組合的理論如何用量化的方式來呈現,真的是非常學術的一篇阿,可能有點硬,但是有了這些數字之後,下一篇就要來玩玩幾個投資組合拉,會回到投資組合第一篇開頭講的股債配比的議題來研究一下,請繼續收看拉。

P.S.
如果大家對於量化交易有興趣的話,我自己有上過以下這門課,課程內容從串接股市資料API、儲存至資料庫、將自己的策略轉化成程式碼、自動下單,並且可以把整個流程自動化,每天早上執行一次,一整天就不用看盤了,覺得是蠻實戰的,可以參考看看。

投資組合報酬率相關係數

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