У меня есть функция, предназначенная для оптимизации портфеля. Мне нужно добавить ограничение на его часть, а не параметры
pps = function(x, wb, nt, ret, m12, mktcap, btm, rr){
wi = wb + nt * (x[1]*m12 + x[2]*mktcap + x[3]*btm)
wret = rowSums(wi*ret,na.rm=TRUE)
ut = ((1 + wret)^(1 - rr))/(1 - rr)
u = -mean(ut)
return(u)
}
Функция запускается через optim для поиска параметров. Я хочу добавить ограничение к wi
, чтобы сумма wi
для каждой итерации равнялась 0. Все решения, которые я нашел здесь, ограничивают параметры, и я не смог применить ни одно из них к мой код
res_save = matrix(NA, 330, 3)
weights = matrix(NA, 330, ncol(ret))
for(i in 1:330){
opt = optim(c(0, 0, 0), pps, wb = wb, nt = nt, ret = ret[1:(48 + i), ],
m12 = m12[1:(48 + i), ], mktcap = mktcap[1:(48 + i), ],
btm = btm[1:(48 + i), ],
rr = rr, method = "BFGS")
res = opt$par
w = wb + nt*(res[1]*m12[i + 49, ] + res[2]*mktcap[i + 49, ] + res[3]*btm[i + 49, ])
weights[i, ] = w
res_save[i, ] = res
}
Кто-нибудь может мне помочь с этим?
Большое спасибо!
(ps код не мой, это из insightR)