2017-01-23 10 views
1

私はquadproglinkを使用して、最適な重みのポートフォリオを見つけます。Aeq * X <= Beqでのみ負の制約を定義する方法

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

が、私は今、すなわち、すべての短期のみ制約セットアップにトリングています:以下のように

これまでのところ、私は長いだけの制約を実装するために管理している(つまり、重みがゼロより小さいw >= 0 and w1 + w2 + ... wN = 1)をすることはできません重みは-1まで追加する必要があり、彼らがする必要があり、すべての小さな厳格またはゼロに等しい。これはあなたがどんな不平等≥bの「より大きい」に書き換えることができますか?

答えて

2

注意を書き換えることができますか"le "不等号-a≦-bよりも、記号を反転させて表示します。あなたの例では、

Aeq*w == w(1) + w(2) + … + w(NumAssets) == -1を意味
Aeq = ones(1,NumAssets); 
beq = -1; 
A = eye(NumAssets); 
b = zeros(NumAssets,1); 

、およびすべてのためw(i) <= 0を言うと同じであるA*w <= 0を選択してください。

+0

完璧に動作します! – JohnAndrews

+0

フォローアップをお願いします。肯定と否定の両方を許すためには、どう書き直しますか?ここに私の考えがあります:Aeq = ones(1、NumAssets); beq = 1; A = []; b = []; – JohnAndrews

+0

あなたは間違いなく 'A = []; b = []; '部分。ただし、重みが1と-1の両方に同時に加算されることはありません。あなたの 'Aeq = ones(1、NumAssets); beq = 1;は、1に加算する必要があることを意味します。 – Lumen

関連する問題