建構最佳化投資組合及績效回測 (2007-2019) (via Python)


投資組合建構的基本原理可參考這篇文章:投資組合建構的立論基礎及績效回測

根據上述文章考慮下列投資標的:



以隨機變數建立上述投資標在各種比重下的排列組合,作出下圖,可用來找出什麼樣的資產配置在給定的報酬率 (expected return) 之下,能夠帶來最低的風險 (portfolio return variance):



圖例說明:
圓點顏色的深淺代表 sharp ratio 的高低。

十字標示為各個投資組合。

圖中越往上,報酬率越高,越往左,風險越低。

在同樣的風險下 (固定 x 座標),越往上,是越好的投資組合,因為風險不變,但報酬率更高。

在同樣的報酬率下 (固定 y 座標),越往左,是越好的投資組合,因為報酬率不變,但風險更低。

這些點在左上側形成了「效率前緣」 (efficient frontier) 。(關於「效率前緣」 的說明,可參考:應用「現代投資組合理論」進行「投資組合最佳化」)

從上圖可以看出:

1. 0050 和 VTI 相比,平均報酬率高一些些,但風險卻高出很多。

2. VXUS 和 VTI 相比,平均報酬率低很多,風險卻高不少。

3. BNDX 和 VTI 都位於「效率前緣」。

下表是上述幾種資產配置下的年化報酬率:




本文的資料沒有考慮稅賦的議題: (1) 沒有考慮美國 ETF 配息時會被課 30% 的稅 (視居住地是否與美國有簽稅務協定) (2) 沒有考慮海外交易所得超過一定數額需要繳綜合所得稅。

投資美股掛牌的 ETF 可能有匯率風險。

過去資效不代表未來績效。

製作本文圖表的 Jupyter Notebook

歷史績效來源


BNDX: 歷史績效

BND: 歷史績效

VXUS: 歷史績效

VTI: 歷史績效

0050.TW: 歷史績效, @yahoo

Python 實作參考資料


Python For Finance Portfolio Optimization

PyPortfolioOpt: User Guide

Efficient Frontiner from Modern Portfolio Theory implemented in Python