二次規劃投資組合優化
我正在使用 MATLAB 進行優化。QP 最小化問題以如下所示的標準形式設置。優化用於計算投資組合的權重(下式中的 x 向量)。
Min 0.5 (x'Fx) + c'x x st x_low <= x <= x_up b_low <= Ax <= b_up where c is a n x 1 vector in the objective function x is a n x 1 vector (weights of the stocks in the portfolio) F is a n x n matrix in the objective function A is the linear constraint matrix b_low & up are the lower and upper bounds for the linear constraints
試圖效仿一個例子,但有兩個問題。首先說投資組合有 500 隻股票,傳遞給優化器的 x 向量(x 這裡是我們的初始猜測)的維度將是 1000 x 1。第二個 500 的符號與第一個 500 的符號相反,我不明白為什麼會這樣是?
F 矩陣也有類似的作用。假設我有一個矩陣 R,其中包含一些風險因素,即 500 x 500。
然後 F 設置為以下(抱歉不確定如何在此站點上正確顯示矩陣)
F = R -R -R R
你為什麼要這樣做?
更新
求解器實際上是 Tomlab(求解的使用者指南在此處連結)。
更多資訊
只是單步執行程式碼。
x0 作為初始猜測向量 1000 x 1 傳遞。前 500 個權重是之前的權重。接下來的 500 個權重都設置為零。
x_up 顯然也是一個 1000 x 1 的向量。進一步查看程式碼。前 500 個權重是買入的上限,接下來的 500 個是賣出的上限。
x_low 是相同的,但對於下限。前 500 個權重是購買的下限,接下來的 500 個是銷售的下限。
好的,我想到的一件事是重新制定約束的標準技巧,例如 $ |x_i|<=c $ (限制暴露 $ x_i $ 同時仍然允許負權重)。注意,那 $ |x_i| \leq c $ 不是線性約束,因此求解器在這種情況下不起作用。一個小技巧可以幫助:
您將變數分為正面和負面部分: $ x_i=x_i^+ + x_i^- $ 現在,根據定義, $ x_i^+ \geq 0 $ 和 $ x_i^-\leq 0 $
現在,請注意 $ |x_i|= x_i^+ - x_i^- $ 並且約束變為線性:
$$ x_i^+ - x_i^- \leq c, \quad x_i^+ \geq 0, \quad x_i^-\leq 0 $$ 如果您有其他線性約束 $ x_i $ , 你只需插入 $ x_i = x_i^+ + x_i^- $ .
這種方法會使尺寸加倍,但會神奇地“線性化”約束。其中,您需要重新制定整個功能(例如 $ F = 1/2* (R,-R; -R,R) $ 這幾乎與您的觀察相符)