5 votos

optimización de carteras con restricciones mediante fmincon

Estoy trabajando en este documento, http://www.nber.org/papers/w8922.pdf

Quiero aplicar las restricciones de peso de la cartera ver página 6-7.

Este es el breve resumen de mi problema:

Dejemos que w sea el conjunto de pesos que representan una cartera. Entonces, el problema de la media-varianza consiste en encontrar las ponderaciones de la cartera que minimicen la varianza de la misma, argmin w'Sw con sujeción a w'I = 1 que representa pesos que suman 1 y S es la matriz de covarianza estimada.

En este marco, las ponderaciones de la cartera están restringidas por límites inferiores y superiores como: enter image description hereenter image description here

A continuación, los autores muestran que la siguiente proposición es para la matriz de covarianza simétrica y semidefinida positiva para las carteras de varianza global mínima:

enter image description here

Aquí la nueva matriz de covarianza es la versión reducida de S . Estoy tratando de implementar esto en Matlab mediante fmincon función. También añado una restricción de retorno del objetivo como w'mean = rho donde mean es el vector columna de la rentabilidad esperada de los activos y rho es el rendimiento previsto.

Creo el archivo portrisk.m para la función objetivo:

function f = portrisk(w, covmat)
f = w'* covmat * w;
end

Y las restricciones no lineales se organizan en el archivo constraint.m en matlab.

function [c,ceq] =  constraint (w)
 c=[-w];                                % nonlinear inequality constraints
 ceq = [];                              % nonlinear equality constraints
 end

Aquí están los códigos:

% initialization
x0=[ones(p,1)/p];                              % initialiazed to 1/p

% linear equality constraints (w'I=1, sum of the weights has to be 1 and target return) 
Aeq = [meanx; repmat(1, 1, p)];                % matrix for linear equality constraints 
rho = 0.0012
beq = [rho; 1];                                % vector for linear equality constraint

% upper and lower bound constraints
lb = zeros(p,1);
ub = ones(p,1);

% constraints as both less or higher than a constant
A = [repmat(1, 1, p); repmat(-1, 1, p) ];      
b = [1; 0];

% options
 options = optimoptions('fmincon','Algorithm','interior-point','Display','iter');

% run optimization function, lambda is the langrange multipliers
[w, fval, exitflag, output, lambda, grad, hessian]  = fmincon(@portrisk, x0 , A, b,    
Aeq, beq, lb, ub,@constraint,options);

Sin embargo, no he podido obtener una solución. ¿Podrían ayudarme en qué me equivoco? Gracias por cualquier ayuda.

3voto

Stefan Puntos 11

Es difícil decir qué es lo que no funciona con su código.

Pruebe el programa de Matlab función de programación cuadrática quadprog() en su lugar. Esta función se especializa en resolver este problema de optimización.

La sintaxis es:

$$ x = quadprog(H,f,A,b,Aeq,beq,lb,ub) $$

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X