Actualmente estoy tratando de encontrar los pesos del portafolio de Diversificación Máxima y encontré dos enfoques que resultan en diferentes resultados.
El primero se basa en este papel: https://www.tobam.fr/wp-content/uploads/2014/12/TOBAM-JoPM-Maximum-Div-2008.pdf
Aquí primero calculo los pesos de los activos en activos sintéticos y luego los convierto en un portafolio de activos reales. Según el papel, existe la posibilidad de estar largo o corto en efectivo, pero como quiero estar completamente invertido en los activos riesgosos, escalo los pesos a 1. ¿Mi pregunta es si esto sería "permitido" sin cambiar el problema de optimización?
Esta es la función objetivo que minimizo:
function fval = md(corMat,w_md)
fval = w_md'*corMat*w_md;
end
Y esta es la optimización:
T = readtable('Data_test.xlsx');
mon_ret = tick2ret(T{:,3:end});
numReturns = size(mon_ret,1);
covMat = cov(mon_ret) ;
[corMat, std] = corrcov(covMat);
port_size = length(covMat) ;
Aeq = ones(1,port_size);
Beq = 1;
lbnds = zeros(1,port_size);
ubnds = ones (1,port_size);
n1 = 1.0/port_size;
w0 = repmat(n1, port_size, 1) ;
mdfunction = @(w_md) md(corMat, w_md);
w_md = fmincon(mdfunction, w0, ...
[], [], Aeq, Beq, lbnds, ubnds, []) ;
w_md = w_md./std;
w_md = w_md/sum(w_md);
El segundo enfoque es de este papel (pág. 21): http://www.qminitiative.org/UserFiles/files/FroidureSSRN-id1895459.pdf
Creo que lo resolví correctamente con este enfoque:
Función Objetivo:
function fval = md2(covMat, w_md2)
fval = w_md2'*covMat*w_md2;
end
Restricción No Lineal:
function [c,ceq] = nlcon(w_md2,std)
c =[];
ceq = sum(w_md2'.*std)-1;
end
y la optimización:
md2function = @(w_md2) md(corMat, w_md2);
w_md2 = fmincon(md2function, w0, ...
[], [], Aeq, Beq, lbnds, ubnds, []) ;
w_md2 = w_md2/sum(w_md2);
¿Alguien sabe cuál enfoque es correcto o dónde está mi error?
¡Agradecería cualquier ayuda!
Saludos cordiales
0 votos
¿Puedes dar valores numéricos para un problema MDP (preferiblemente pequeño) para el cual los dos códigos arrojen valores diferentes? Luego, otras personas pueden ejecutarlo en su propio código y ver qué respuesta obtienen.
0 votos
¿Hay alguna manera de subir un archivo? El problema más pequeño con valores significativamente diferentes es para 8 devoluciones y 7 activos, lo cual sería bastante tedioso de escribir.