2017-01-25 9 views
1

Я использую quadprog, чтобы найти портфолио оптимальных весов.Как разрешить весы между -1 и 1 с использованием ограничений в 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); 

Short только

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

-1 в последнем компоненте должно быть +1, а также. Это означает, что * -Σ w_i ≤ 1 *, что совпадает с * -1 ≤ Σ w_i *. – Lumen

+0

Извините, я не думаю, что понимаю, чего вы пытаетесь достичь. Можете ли вы описать квадратичную программу, которую вы хотите, своими словами или, может быть, даже математически? Какие ограничения вы хотите для своих переменных? – Lumen

+0

Просто, чтобы они находились между -1 и 1. Вот и все. То есть инвестор может пойти длинным или коротким. Сумма короткой, чтобы добавить до -1 и сумму длинной, чтобы добавить до 1, но это не обязательно. – JohnAndrews

ответ

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 = []; 

 Смежные вопросы

  • Нет связанных вопросов^_^