我试图在 5 个约束条件下最大化投资组合回报:
1.- 一定程度的投资组合风险
2.- 与上面相同,但符号相反(我需要风险正好是那个数字)
3.- 权重之和必须为 1
4.-所有权重必须大于或等于cero
5.- 所有权重最多只能为 1
我正在使用 optiSolve 包,因为我没有找到任何其他允许我编写此问题的包(或者至少我了解如何使用它)。
我这里有三个大问题,第一个是生成的权重向量总和大于 1,第二个问题是我不能在二次约束中声明t(w) %*% varcov_matrix %*% w == 0因为它只允许“<=”,最后我不知道如何设置约束以仅获得正面权重
vector_de_retornos <- rnorm(5)
matriz_de_varcov <- matrix(rnorm(25), ncol = 5)
library(optiSolve)
restriccion1 <- quadcon(Q = matriz_de_varcov, dir = "<=", val = 0.04237972)
restriccion1_neg <- quadcon(Q = -matriz_de_varcov, dir = "<=",
val = -mean(limite_inf, limite_sup))
restriccion2 <- lincon(t(vector_de_retornos),
d=rep(0, nrow(t(vector_de_retornos))),
dir=rep("==",nrow(t(vector_de_retornos))),
val = rep(1, nrow(t(vector_de_retornos))),
id=1:ncol(t(vector_de_retornos)),
name = nrow(t(vector_de_retornos)))
restriccion_nonnegativa <- lbcon(rep(0,length(vector_de_retornos)))
restriccion_positiva <- ubcon(rep(1,length(vector_de_retornos)))
funcion_lineal <- linfun(vector_de_retornos, name = "lin.fun")
funcion_obj <- cop(funcion_lineal, max = T, ub = restriccion_positiva,
lc = restriccion2, lb = restriccion_nonnegativa, restriccion1,
restriccion1_neg)
porfavor_funciona <- solvecop(funcion_obj, solver = "alabama")
> porfavor_funciona$x
1 2 3 4 5
-3.243313e-09 -4.709673e-09 9.741379e-01 3.689040e-01 -1.685290e-09
> sum(porfavor_funciona$x)
[1] 1.343042
有人知道如何用前面提到的所有约束来解决这个最大化问题,或者告诉我我做错了什么?我真的很感激,因为结果似乎没有考虑到约束。谢谢!