優化

用成本製定 MVO

  • November 12, 2014

我正在嘗試制定這個簡單的 MVO 實用函式,並在 MATLAB 中使用 Quadprog 添加線性事務成本懲罰

成本 = 0.001;λ = 4; mu = 預期收益向量(例如 4x1) S = 共變異數矩陣(4x4)

最大 w’*mu - lambda *w’ S w - lambda_TC * tcost *sum(abs(w(i) - w0(i))

我理解為了是線性的,我們可以用變數 y(i) 替換 w(i) - w0(i) 替換上面的等式

最大 w ‘* mu - lambda * w’ S w - lambda_TC * tcost * sum (y (i))

我們添加約束 y(i)>= w(i) - w0(i) 和 y(i)>= - (w(i) - w0(i))

我還有一個 long only 約束,權重之和應為 1

我不確定如何在 MATLAB 的 quadprog 中製定這個。任何幫助將不勝感激。

非常感謝!

我對MATLAB不太熟悉。但是,在二次程式中,我發現的主要問題是正確設置問題,然後編碼變得容易得多。

正如您所指出的,此問題可以表示為二次圓錐問題並由 quadprog 解決,但需要做大量工作才能以正確的形式解決此問題。

  1. 您應該說服自己,在變數 y = w - w0 的變化下,您建議問題實際上變成了 sum(y) = 0 的以下問題(假設 sum(x0) = 1),我們不再需要擔心 w。

max y ‘* mu - lambda * y’Sy - lambda_tc * tcost * sum (abs (y)) + 常數

您可以根據需要計算該常數,但因為我們正在最大化它並不重要。問題是這個問題仍然不是二次規劃形式,因為它仍然具有絕對值函式。

  1. 下一步是擺脫 abs()。這裡的技巧是將優化變數的數量加倍,正如您在問題中提到的那樣。我們稱 y = (y_plus - y_minus)/2,現在我們有兩個新的約束 y_plus >= w - w0 和 y_minus >= -(w - w0)。
  2. 這似乎使問題更複雜,但請注意,如果我們將 z 定義為 8 個變數的 (y_plus, y_minus) 的向量,我們可以將問題再次重寫為 sum(z) = 0,如下所示。

最大 z’*mu - lambda * z’Sz - lambda_tc * tcost * sum(z)

其中 mu 和 S 已擴展為原始大小的兩倍。mu 只是通過符號翻轉重複兩次(現在有 2*4 個成員),並且 H 現在有兩個塊對角 S 矩陣和非對角線上的塊零(總共 8 x 8 矩陣)。但是,現在我們已經從問題中刪除了絕對值!

  1. 為了把它放在標準形式中,我們只需要結合 z 中的線性項。所以 quadprod 中“f”的方程看起來像(請仔細檢查我的符號)

(mu_i - lambda_tc * tcost) * yplus_i(mu_i + lambda_tc * tcost) * yminus_i 5. 現在這個問題可以用上面的’f’和擴展(雙倍大小)‘S’作為’H’放在quadprog中。Aeq,beq 可以約束 sum(z) = 0 和 A,b 約束每個 yplus_i>0 和 yminus_i<0,因為 y_plus 是對 w 的正變化,而 y_minus 是負變化。

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