自從歷經千辛萬苦的錄製了生平第一支影片之後,已經好整以暇多日,好好再度審視自己所講的觀念,目前結論算是滿意。在錄製的影片的事上,雖然經過大量的練習,還是無法達到順暢的地步,但該表達意思都有到位;如果用 1.5 倍速播放可以大幅抵銷許多缺點,推薦一看。
https://youtu.be/-0FPVE0oNJ8
Learn More →
悠閒漫步的氛圍,正是學習新知與迸發創意的溫床,來研究一下理論吧!很快的我就發現了一座寶庫:一位出身天文物理名叫 Robert 的年輕人,竟然把數十年來主要的投資組合最佳化的演算法都實作成 python package PyPortfolioOpt 並公開分享給大眾使用,真是太令人敬佩了,在此恭敬地引用:
Martin, R. A., (2021). PyPortfolioOpt: portfolio optimization in Python. Journal of Open Source Software, 6(61), 3066, https://doi.org/10.21105/joss.03066
首先定義問題,如同大部分現實世界的問題:
在投入有限額度的成本下,追求最大效益。
在此投資領域,問題就變成:
在承受特定程度的風險下,追求最大報酬。
而面對不可知的未來,需要設計適當的估計量(estimator)去估計。其中「報酬」的部分在此探討不多,就是用歷史資料的年化報酬率,最佳化著墨的項目主要在於「風險」的估計和消除。風險的基本量化表示法,對於個股而言就是標準差,對於投資組合而言就是:「共變異矩陣 Σ」與權重 𝑤 的乘積:
在研讀理論以前,這個值是用投資組合的日報酬卷算出來的,只能算是這理論裡的一個特例,就是 sample_cov,此外風險估計量還有許多算法如下:
sample_cov
semicovariance
exp_cov
ledoit_wolf
ledoit_wolf_constant_variance
ledoit_wolf_single_factor
ledoit_wolf_constant_correlation
在套件中都是一行可得!不禁再次向作者致敬 Orz
試著視覺化一組 portfolio,採用 sample_cov 算法:
而作者比較推薦 ledoit_wolf 算法,還撰文解說:Honey, I Shrunk the Sample Covariance Matrix,有了高手背書,我這凡夫俗子就直接引用吧,算出來的數字比 sample_cov 略小,據說因此可讓最佳化結果較為穩定。此共變異矩陣若畫出圖來非常相像,肉眼無法分辨出差異。
有了報酬和風險的估計量,就可以開始執行最佳化演算法了。先跑一個最一般性的,就是最大化 sharpe,得出權重和績效:
最佳化 sharpe ratio:
Expected annual return: 44.3%
Annual volatility: 26.6%
Sharpe Ratio: 1.59
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
sharpe ratio 觀念在系統中已經多次使用,從這裡的理論架構觀點,可解釋成「效率前緣的 45。切線交點」,效率前緣是給定橫軸為特定風險尺度下,最佳報酬的投資組合,縱軸定義為報酬的情況下,座落在最高點位置。套件也可畫出整條效率前緣,看起來更有 fu 了:
但前面有指出關於報酬的預測是有待商榷的,因為我們直接把歷史年化報酬當成估計量比較不合適,像這裡的 44% 的歷史報酬能否在未來重現?我們寧願嚴格控制自 high 情緒,應該去針對最小風險去執行最佳化,得出權重和績效:
最小化風險:
Expected annual return: 14.3%
Annual volatility: 15.8%
Sharpe Ratio: 0.78
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
結果這結果有點脫離現實,大部分權重配給大盤指數和 1101 台泥!這是怎樣?波動去掉是不錯,但報酬也去掉了!所以實務上還是要適度調高風險值,讓其他標的有參與的機會啦。所以給定期望報酬 30% 跑出來會怎樣呢:
期望 30% 報酬的條件下,最小化風險:
Expected annual return: 30.0%
Annual volatility: 19.5%
Sharpe Ratio: 1.43
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
這樣相對合理一點。
接下來再玩一些變化式,一樣聚焦在風險衡量部分,把正報酬忽略掉,只考慮負報酬的波動性,若期望報酬 30%,最小化波動的結果:
期望 30% 報酬的條件下,最小化負報酬的波動
Expected annual return: 30.0%
Annual semi-deviation: 13.5%
Sortino Ratio: 2.07
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
另外系統中已經強調的 drawdown 也有相關的理論依據,最小化 CDaR (Conditional Drawdown at Risk),期望 30% 報酬的結果:
期望 30% 報酬的條件下,最小化 draw down
Expected annual return: 30.0%
Conditional Drawdown at Risk: 16.00%
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
HRP (Hierarchical Risk Parity):以相關性爲距離矩陣執行分群 (clustering),從尾端兩個資產開始求解最佳化權重,一層一層向上合併,得到所有資產的權重。非常有趣的想法,此套件也已經完成實作,真厲害!求出的解比較不會出現一堆零:
以 HRP 演算法求解最佳權重:
Expected annual return: 26.6%
Annual volatility: 20.7%
Sharpe Ratio: 1.19
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
還能畫出美美的樹狀圖,清楚交代合併過程,也可以看出哪些資產彼此的相關性:
最後還有一個演算法 CLA (Critical Line Algorithm),此法作者著墨較少,我也就暫不深究了。
以上研究暫告一段落,日後再想辦法抽取精華整合到系統中。
Newman 2023/3/27