投資組合優化

最小變異數和最小跟踪誤差組合作為二階錐程序

  • November 19, 2020

二次優化(最小變異數)

$$ w^{T} \Sigma w \rightarrow \text{min}, $$ 在哪裡 $ w $ 是投資組合權重的向量,並且 $ \Sigma $ 是資產收益的共變異數矩陣,是一個很好研究的問題。在實踐中,我們必須定義某些約束。這些是簡單的線性連續的(比如 $ \sum_{i=1}^n w_i = 1 $ 或周轉約束)或困難的二元約束(如果資產被購買而不是至少 $ x% $ ,基數約束等)。 環境 $ \hat{w} = w_{Pf} - w_{BM} $ 作為投資組合相對於基準的有效權重向量,上述公式描述了最小化(平方)跟踪誤差。

困難的二進制約束導致混合整數規劃(MIP)。商業求解器通過諸如分支定界之類的方法來解決這個問題,這些方法對於大型問題(例如 1000 多個資產)非常耗時。

我聽說過一種方法來製定諸如二階錐程序 (SOCP)之類的問題,並且通常可以更有效地解決此類問題。

我在分支和綁定方面有豐富的經驗,我想切換到 SOCP。你知道對 SOCP 和投資組合/TE 優化有嚴格的現實世界約束(尤其是二元變數)有什麼好的參考嗎?您是否有任何經驗是否值得付出努力?

PS:讓我們假設 $ \Sigma $ 被很好地估計並且變異數是有道理的。我知道這是有爭議的……

編輯:本文二階錐規劃的應用描述了二次約束二次規劃作為 SOCP 的公式。也會在這裡看看。

編輯2:制定每一個細節。我有混合二次程序(我制定了 TE 案例):

$$ w^{T} \Sigma w + w^T c \rightarrow \text{min}, $$ 和 $ 0 \le w_i \le u $ 為了 $ i = 1,\ldots, N $ 和 $ N \approx 1000 $ 和一個恆定的向量 $ c $ . 約束的形式為 $$ w_i \ge b_i*l \text{ for } i = 1,\ldots,N \ \sum b_i \le K \ b_i \in {0,1} \text{ for } i = 1,\ldots,N $$ 用小實 $ l \in (0,1) $ 和一些大整數 $ K $ . 此外,我有很多連續的約束 $$ A w \le b. $$ 如果我完全準確,那麼還有其他連續變數僅出現在約束中(這些模型翻轉)。 如果我按照上面的連結,那麼這可以表述為混合 SOCP 與

$$ t \rightarrow \text{min}. $$ 以及所有上述約束和一個附加約束: $$ | \Sigma^{1/2} w + \Sigma^{-1/2}c | \le t. $$ 是否有可能比混合整數二次規劃(具有線性和二進制但沒有二次約束)更有效地解決上述公式化的混合整數 SOCP 問題?

沒有離散約束,最小跟踪誤差/變異數問題是一個二次規劃。如果你約束跟踪誤差,你就有一個凸二次約束問題,現代商業求解器將其作為 SOCP 求解。SOCP 不解決離散約束,如資產基數或最低投資水平。SOCP 處理連續凸約束。這些約束使可行區域成為非凸的。例如,50% A 和 50% B 的投資組合只有 2 個資產,50% B 和 50% C 的投資組合有兩個資產,但是這兩個投資組合的任何凸組合都將有 3 個資產。

線性與 SOCP 和連續與混合整數是正交概念。混合整數求解器通常需要搜尋樹。線性與 SOCP 決定了在搜尋樹的每個節點上解決了什麼問題。使用商業求解器 cplex 和Gurobi ,您可以獲得連續線性、混合整數線性、二次/SOCP 連續和二次/SOCP 混合整數。Gurobi 有一段關於 SOCP 的影片,其中提到試圖為所有組合命名是徒勞的

一個好的商業求解器可以在合理的時間內(幾秒到幾分鐘)可靠地解決你描述的問題,這些問題結合了複雜的啟發式算法和分支和切割算法。您將觀察到的實際性能在很大程度上取決於您如何制定約束和求解器的質量。有很多方法可以改進配方。例如,基數約束通常用指示變數建模

$$ y_i = \left{\begin{array}{ll} 1 & \mbox{if $w_i > 0$} \ 0 & \mbox{otherwise} \end{array}\right. $$ 這是通過約束強制執行的

$$ \begin{eqnarray} w_i &\le y_i &\hspace{1in} \forall i \in {1, \ldots, n} \ \sum_{i = 1}^n y_i &\le k & \end{eqnarray} $$ 在哪裡 $ k $ 是基數限制。約束 $ w_i \le y_i $ 但是,非常弱。如果你知道一個先驗上限 $ w_i $ , 說 $ u_i $ , 你可以添加約束$$ w_i \le u_i y_i $$到模型。如果 $ u_i $ 遠小於 $ 1 $ ,那麼節點處的連續鬆弛會更緊,有助於修剪分支樹並引導啟發式。你可以得到一個上限 $ w_i $ 要麼來自明確的約束(對任何單一資產的權重​​的硬限制),要麼來自問題.j 如果您實際上是在嘗試顯式最小化 $ w^{T} \Sigma w $ 對於 1000 的資產,這意味著 $ \Sigma $ 有超過 1,000,000 個條目,並且您已經明確估計了每對資產的共變異數。從計算的角度來看,這既困難又不可能可靠且效率低下。最好做一個因子模型,其中資產回報率 $ i $ 將由 $ r_i = \epsilon_i + \sum_j \beta_{ij} r_j $ . 在哪裡 $ j $ 索引因子,和 $ \sigma_i $ 將是的變異數 $ \epsilon_i $ . 如果 $ \Sigma^f $ 是因子回報的變異數/共變異數,那麼你會有一個目標

$$ \mbox{minimize} f^T \Sigma^f f + \sum_i \sigma_i^2 w_i^2 $$ 有額外的限制 $$ \sum_i \beta_{ij} w_i = f_j \hspace{0.5in} \forall j $$ 連續鬆弛會小得多,因此節點子問題會更快地解決。這 $ \sigma_i $ 可用於計算上界 $ w_i $ 同樣,因為它是其他資產無法對沖的差異。

引用自:https://quant.stackexchange.com/questions/9616