1

我正在使用quadprog来寻找最佳权重组合。

到目前为止,我已经设法实现了long-onlyshort-only约束,如下所示:

FirstDegree             = zeros(NumAssets,1);
SecondDegree            = Covariance;

只长

Aeq                     = ones(1,NumAssets);
beq                     = 1;
A                       = -eye(NumAssets);
b                       = zeros(NumAssets,1);

x0                      = 1/NumAssets*ones(NumAssets,1);
MinVol_Weights          = quadprog(SecondDegree,FirstDegree,A,b,Aeq,beq,[],[],x0, options);

只做空

Aeq                     = ones(1,NumAssets);
beq                     = -1;
A                       = eye(NumAssets);
b                       = zeros(NumAssets,1);

x0                      = -1/NumAssets*ones(NumAssets,1);
MinVol_Weights          = quadprog(SecondDegree,FirstDegree,A,b,Aeq,beq,[],[],x0, options);

我现在正在寻找一种将这两者结合起来并允许长短权重的方法,因此 x 可以介于 -1 和 1 之间。我该如何实现这一点?

我尝试了以下方法,但它只给了我相同的权重:

多头和空头(不起作用)

A                       = [eye(NumAssets); ones(1, NumAssets); -ones(1, NumAssets)]; 
b                       = [zeros(NumAssets, 1); 1; -1];
Aeq                     = [];
beq                     = [];
lb                      = [];
ub                      = [];

x0                      = 1/NumAssets*ones(NumAssets,1);
MinVol_Weights          = quadprog(SecondDegree,FirstDegree,A,b,Aeq,beq,lb,ub,x0, options);
4

1 回答 1

1

如果您想要的只是所有权重的总和在 –1 和 1 之间,那么最后一个分量中的 –1 也b应该是 +1。这意味着–Σw_i ≤ 1–1 ≤ Σw_i相同。将其与Σw_i ≤ 1结合,您将得到–1 ≤ Σw_i ≤ 1

A  = [ ones(1, NumAssets);
      -ones(1, NumAssets)]; 
b  = [1;
      1];
Aeq = [];
beq = [];
lb = [];
ub = [];
于 2017-01-25T22:04:26.063 回答