我正在使用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);
答案 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 = [];