Я написал функцию A = function(W)(....)
, которая вычисляет риск-стоимость портфеля из 12 активов как функцию W = [W1, ....., W12], то есть вектора весов.(это не обычный VAR, он имеет много циклов внутри, он вычисляет скользящую меру и затем сводит ее к одному значению, то, что я хочу минимизировать)
То, что я пытаюсь сделать, эточтобы минимизировать эту функцию, используя ограничения, такие как:
- векторное произведение W и ERV = 0,002, где ERV = [r1, ...., r12], поэтому я хочу исправить ожидаемый доходпортфеля
- сумма wi для i = 1, ..., 12 должна быть равна 1
- Wi> = 0 для i = 1, ...., 12
То, что я сделал, было:
constrOptim(theta = WW, A, grad = jacobian(A, W, method = "Richardson", side = NULL), ui=U, ci = C, method = c("Nelder_Mead", "BFGS", "CG", "L-BFGS", "SANN", "Brent"), hessian = FALSE)
где:
U = matrix(c(ERV,-ERV, rep(-1,12), rep(1,12), diag(x=1,12,12)),ncol=12, byrow =TRUE)
C = matrix(c(0.0019,-0.0021, -1.01, 0.99, rep(0,12)))
Проблема в том, что это занимает так много времени, и я не знаю, есть ли более быстрыйспособ сделать это, и если я делаю это правильно.Кроме того, я получил следующее: «предупреждающее сообщение: in if (method ==« SANN ») [: условие имеет длину> 1, и будет использоваться только первый элемент