2 votos

Optimización de la cartera en R con inclinación del factor mientras se limita la volatilidad

qué optimizador puedo usar en R para resolver el siguiente problema de optimización de la cartera:

$min(f^Tx)$
St:
1. $ -a \le \sum_ {i=1} ^{n} x(i) \le b$
2. $ -c \le x(i) \le d$
3. $ e \le \sum _{i=1} ^n |x(i)| \le f$
4. $ \sqrt {x^t \Sigma x} \le g$

a,b,c,d,e,f,g - positivo. f es un vector. x - pesos. $ \Sigma $ matriz var-covar estimada a partir de datos históricos. El problema sin la restricción 4 puede ser resuelto con el solucionador lineal (con algunos trucos para la condición 3). La condición 4 hace que la restricción no sea lineal, sino cuadrática. Cualquier sugerencia sería útil. Gracias.

2voto

Ryan Brunner Puntos 133

Puedes probar el solnp() función del paquete Rsolnp que es un solucionador para la optimización no lineal. En primer lugar, se define la función que debe ser minimizada:

fun1 <- function(x) ( return(as.numeric(fvec %*% x)))

fvec es su vector fijo $f$ .

Luego se define la función de desigualdad para las desigualdades 1,3 y 4 - la desigualdad 2 está cubierta por los límites de los parámetros en el solucionador.

ineqfun1 <- function(x){
  ineq1 <- sum(x);
  ineq2 <- sum(abs(x));
  ineq3 <- sqrt(x %*% vcovmat %*% x);
  return(c(ineq1,ineq2,ineq3))
}

vcovmat es su matriz de várices $ \Sigma $ .

Después de definir adicionalmente los límites a a g y una estimación inicial para x, que llamamos xstart puedes hacer la optimización:

sol <- solnp(pars=xstart, fun=fun1, ineqfun=ineqfun1,
             ineqLB=c(-a,e,-Inf),ineqUB=c(b,f,g),
             LB=-c, UB=d)

Si el solucionador converge, puedes obtener las estimaciones de peso resultantes con sol$pars .
No tengo datos para probarlo, pero el código debería funcionar. Sin embargo, tendrás que elegir un valor inicial sensato y los límites apropiados a-g.

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