編譯:方的饅頭
生活中處處充滿了優化,投資組合優化正是其中重要的分支,有的人關注投資風險,而有的人關注投資收益,本文通過經典投資組合優化模型帶你瞭解生活中的優化之美。
1
前言
今天這篇還是通過R語言實現。
投資組合優化方面的文獻已經有數十年的歷史了。在今天的推文,我們將介紹一些傳統的投資組合優化模型。總體目標是從考慮的所有可能的具有定義的目標功能的投資組合中選擇資產的投資組合。
數據
數據是使用tidyquant()包的tq_get()函數收集的。然後,使用quantmod()包中的periodReturn函數將每日資產價格轉換為每日對數收益。接下來,使用rsample()包中的rolling_origin()函數構造6個月的每日收益列表。目標是在滾動的基礎上計算訓練集(即6個月)上的6個月平均收益mus和6個月協方差矩陣Sigmas,並將其應用於測試集(即1個月後)-每月再平衡。
正如收益數據一樣,其同樣適用於月度價格數據。
價格和收益數據
第一個split的收益數據如下所示:
統計數據
Mus(平均收益)數據如下所示:
Sigmas(協方差矩陣)數據如下所示:
2
比較投資組合優化
全局最小方差投資組合
全局最小方差投資組合
是一種資產組合,它為我們提供儘可能低的收益方差或投資組合波動性。這裡的波動性被用作風險的替代品,因此波動性差異越小,資產的風險就越小。投資組合只關注風險,忽略預期收益。
目標函數是:
由於Σ未知,我們可以用協方差矩陣來估計它為Σ^。其中凸解變成:
我們的目標是希望從模型中找到最佳權重,從而使我們的風險最小化。
下面的問題包括我們的Minimisation問題
quad_form函數採用
二次型,其中是x向量,p是矩陣,或者在我們的例子中w是權重向量,∑是A1,···,A5的協方差矩陣。這些約束條件對應於
其中我們不能給我們的資產分配負權重,我們將所有資本投資於投資組合。
我們可以使用R中的Disciplined Convex Programming(CVXR)包,其中:
- 分析問題
- 檢驗凸性
- 將問題轉化為規範形式
- 解決問題
我們希望從模型中找到最佳權重,以使我們的風險最小化。我們可以通過解決優化問題,將列表綁定到單個數據框中並使用ggplot2來繪製樣本最佳投資組合權重中一個月的滾動-基於前六個月的滾動mus和Sigmas來實現。
3
馬科維茨投資組合
馬科維茨均值-方差投資組合構建如下:
我們可以通過調整λ來設置不同的風險參數,並查看收益如何受到影響。這可以通過對具有不同值的數據運行多個優化問題來完成。較高的值將重點放在等式的右側,因此不利於投資者的風險更大。
我們可以看到下圖λ中的值變化如何影響風險和收益。 隨著λ值的增加,我們承擔的風險越小,但我們假設的收益就越少。低值的資產使我們以資產A5的權重投資於單項資產,增加λ值會增加其他資產A4的權重,從而分散了我們的風險。
最大夏普比率
Mu五分位數投資組合
Mu/Diag(Sigma)投資組合
Mu/Diag(sqrt(Sigma))投資組合
4
結果分析
有8種不同的投資組合優化模型。將所有數據彙總在一起,可以更快速地檢查結果。
從圖中可以看出,全局最小方差投資組合顯示出投資組合收益的最低波動性。 在此期間,每個投資組合的年終績效指標也顯示在底部。
繪製累積收益率表明,Markowitz lambda投資組合在同一時期內的收益率最高,但是在同一時期內它們的標準差也最高。
此外,一些額外的測試數據,留在這裡供大家將來參考:
相
閱讀更多 運籌OR帷幄 的文章