如何使用Aeq x <= beq中的约束来允许-1和1之间的权重

时间:2017-01-25 21:50:16

标签: matlab optimization constraints portfolio quadprog

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

到目前为止,我已设法实现仅限长仅限短约束,如下所示:

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);

1 个答案:

答案 0 :(得分:1)

如果您想要的是所有权重的总和在-1和1之间,那么b的最后一个分量中的-1也应该是+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 = [];