如何定義自定義優化問題的目標函式?
我想找到可以最小化資產組合的一些使用者定義指標(排序、最小回撤等)的分配。
如何制定目標函式以傳遞給優化器?
我在最小變異數和夏普的投資組合優化方面有經驗,但是當目標不同時,如何解決和製定問題?
最小變異數可以通過二次優化器簡單有效地求解,因為唯一的關鍵輸入是共變異數矩陣。
除非您假設共變異數/變異數與您感興趣的風險度量之間存在某種函式關係,否則無法通過共變異數矩陣優化回撤或 Sortino。無論如何,您可能最終會得到與該策略下的最小變異數相似的投資組合,因為在聯合正態分佈收益的假設下,具有最高共變異數/變異數的證券也將具有最高的回撤。
優化器正在求解使目標函式最大化或最小化的權重集。因此,您需要製定一個目標函式,表示給定一組權重的投資組合的預期效用。效用函式將是其預期 alpha 的總和,並且對回撤/排序有懲罰。表達預期回撤或排序的一種簡單(粗略?)方法是假設證券的預期回撤或排序由歷史回撤/排序所代表。
您可以使用 R 中的PortfolioAnalytics包來衡量函式的歷史風險(回撤、排序等)並將其傳遞給優化器。這有點冒險,因為歷史回撤可能不能很好地預測未來回撤(並且您必須考慮資產之間的相互作用)。既然您有了風險函式,請使用優化器搜尋權重空間以查看目標函式最小化的位置。您需要一個跨權重空間搜尋的優化器(例如遺傳算法或隨機投資組合生成器),而不是二次或基於梯度的優化器,因為您的回撤函式可能無法區分。
Brian Peterson 和 Peter Carl 很好地說明了採用任意目標函式並使用基於搜尋的算法來解決它們。我認為他們的介紹將幫助您在實踐中使上面提出的想法更加具體。
更新:如果您的目標函式是凸函式,則二次優化器(例如quadprog)或機器學習算法(例如隨機梯度下降)將保證解決方案。如果您的目標函式是非凸的,那麼您將需要使用替代優化策略(遺傳算法、信任區域方法、非線性優化器,例如NLOPTR, ETC。)。其中一些其他方法不能保證收斂(實際上它們可能只找到局部最優)。它們也相當耗時。此問題的嚴重性取決於您的目標函式的性質、迭代時間以及與隨機種子並行解決優化問題的能力、考慮到輸入的雜訊所需的精度水平。例如,對於高頻交易等應用程序,非凸優化器通常太慢且不必要。此外,您可能會找到不如解決更簡單的二次問題的解決方案,至少您可以保證最優。
提示:如果您選擇使用DEOptim等遺傳算法,您可能需要考慮使用均變異數二次優化(沿邊界的不同點)的解決方案為初始種群播種以加速收斂。
如果您購買 CUDA GPU 來處理並行操作,您還可以加速該過程。