股票
投資組合優化 - 優化問題的非暴力 解決方案
最近我用 Python 編寫了一個程序,它提取預定股票的指定時期和頻率的股票數據,然後使用夏普比率優化投資組合。為了生成不同種類的權重,我編寫了一個生成器,它給了我所有可能的權重(所有權重都是非負的,並且必須總和為 100)。
現在的問題是,雖然我仍然可以自信地模擬 5 支股票的投資組合(大約需要 5 分鐘),但考慮到所有可能的權重分佈(如果我沒記錯的話應該是 9600 萬左右)。我想盡可能地推動這一點,最佳地達到由於增加額外股票而從非系統性風險降低中獲得的收益最小的地步。
現在我的問題是什麼是“聰明的方法”來做到這一點(顯然我使用的方式很簡潔,因為你得到了所有可能的結果,但考慮到資源和時間強度,不能認真考慮)?為了使這個過程更快,人們會使用什麼樣的優化技術?
我不是在尋找任何單一的解決方案,而是詳細說明存在哪些優化技術,可以用來解決這個問題,以及它們的優點或/和缺點是什麼。
感謝您的任何建議!
有幾個常用的解決方案
- 分析解決方案。當目標函式是線性/二次的並且約束都是線性等式約束(例如自籌資金、零貝塔、部門中立等)時,這些可能特別有效
- 二次優化。這適用於線性/二次目標函式和線性等式或不等式約束(以上所有,加上營業額約束、頭寸限制、行業敞口限制等)
- 圓錐優化。這將上述解決方案的適用性擴展到可以是非線性/二次的目標函式和可以是非線性的約束,只要目標函式和約束可以轉換為線性/二次或二次曲線。
- 非線性優化。通用非線性優化器(例如,內點法或 Nelder-Mead)有時可以對廣泛的目標函式和約束給出令人滿意的解決方案——唯一的要求通常是目標函式/約束足夠平滑(沒有不連續性)。如果您可以計算分析梯度,它會有所幫助。
為了優化案例 1 和 2 中的夏普比率,您通常必須考慮一系列解決方案 $ w_\lambda $ 最大化
$$ \alpha^T w_\lambda - \lambda w_\lambda^T\Sigma w_\lambda $$ 並選擇了 $ \lambda $ 這給出了最高的夏普比率。在案例 3 和 4 中,您可以直接針對夏普比率進行優化。