Я использую 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, а также. Это означает, что * -Σ w_i ≤ 1 *, что совпадает с * -1 ≤ Σ w_i *. – Lumen
Извините, я не думаю, что понимаю, чего вы пытаетесь достичь. Можете ли вы описать квадратичную программу, которую вы хотите, своими словами или, может быть, даже математически? Какие ограничения вы хотите для своих переменных? – Lumen
Просто, чтобы они находились между -1 и 1. Вот и все. То есть инвестор может пойти длинным или коротким. Сумма короткой, чтобы добавить до -1 и сумму длинной, чтобы добавить до 1, но это не обязательно. – JohnAndrews