Tengo un gran conjunto de datos, de 10.000 inversiones estoy tratando de crear una optimización del portafolio. La cartera tiene 3 restricciones. Durante mucho tiempo Sólo, Sólo 50 de los activos pueden ser seleccionados y cada invertido activo tiene el mismo peso. Me gustaría encontrar el máximo de sharpe de la cartera y de la minSD de la cartera para un determinado retorno.
> funds = colnames(dfxts)
> returns = dfxts
> df.con = portfolio.spec(assets = funds)
> df.con = add.constraint(portfolio = df.con, type = "long_only")
> df.con = add.constraint(portfolio = df.con, type = "box", min = (1/n - .01/n), max = (1/n + .01/n))
>
> df.con = add.constraint(portfolio = df.con, type = "position_limit", max_pos = n)
>
> df.con = add.constraint(portfolio = df.con, type = "return", return_targe = r)
>
> df.con = add.constraint(portfolio = df.con, type = "weight_sum_constraint", min_sum = .99, max_sum = 1.01)
> minSDdf <- add.objective(portfolio=df.con,
+ type="risk",
+ name="StdDev")
opt = optimize.portfolio(R = returns, portfolio = df.con, optimize_method = "DEoptim", trace = TRUE)
Esto está tomando más de 10 horas a optimizar. ¿Cómo puedo cambiar las restricciones o optimizador para hacer esto más rápido? Me gustaría ser menos de 10 minutos si es posible. Gracias,
No estoy seguro si esto está funcionando correctamente. He editado la función objetivo en la viñeta,
> OF2 <- function(x, Data) {
+ w <- 1/sum(x)
+ -(sum(r*w))/(sum(w * w * Data$Sigma[x, x]))
+ }
El objetivo de la función debe devolver un valor negativo, pero me sigue dando un valor positivo? ¿Por qué es esto happending