R - Переключение оптимизации с одинаково взвешенного портфеля (ERC) на среднюю дисперсию (MPT) - PullRequest
0 голосов
/ 03 ноября 2018

Я сейчас пытаюсь найти оптимальный вес для портфеля. С помощью функции optim () (без дополнительного пакета) я использую следующий код для одинаково взвешенного портфеля (https://i.stack.imgur.com/ZGW5l.png с https://i.stack.imgur.com/35PhJ.png):

# Compute variance-covariance matrix 
Sigma <- cov_matrix
N <- 6

# Set up the minimization problem
ObjFuncERC <- function (x, Sigma) {
  sum <- 0
  R <- Sigma %*% x
  for (i in 1:N) {
    for (j in 1:N) {
      sum <- sum + (x[i]*R[i] - x[j]*R[j])^2
    }
  }
  sum
}

x0 <- matrix(1/N, nrow = N, ncol = 1)

optim(par = x0, fn = ObjFuncERC, Sigma = cov_matrix)

Результаты:

structure(list(par = structure(c(0.136739825862469, 0.270039438143228, 
0.217957203964446, 0.140979346451311, 0.12434667631434, 0.164147197927427
), .Dim = c(6L, 1L)), value = 1.05030199202692e-16, counts = structure(c(401L, 
NA), .Names = c("function", "gradient")), convergence = 0L, message = NULL), .Names = c("par", 
"value", "counts", "convergence", "message"))

Матрица дисперсии-ковариации (cov_matrix):

structure(c(0.0003770166788353, 3.90516782053526e-05, 3.5555558058545e-05, 
0.000104505686460224, 4.29463203471184e-05, 4.24141140985486e-05, 
3.90516782053526e-05, 7.56192621107786e-05, 3.02766243363913e-05, 
4.06047891327263e-05, 4.52423036784686e-05, 3.25724476378454e-05, 
3.5555558058545e-05, 3.02766243363913e-05, 0.000145265786909066, 
4.26705403743996e-05, 3.88921978856041e-05, 3.17829593802571e-05, 
0.000104505686460224, 4.06047891327263e-05, 4.26705403743996e-05, 
0.000293995816289813, 6.71083319622826e-05, 5.85548395279348e-05, 
4.29463203471184e-05, 4.52423036784686e-05, 3.88921978856041e-05, 
6.71083319622826e-05, 0.000496795497737421, 5.31253499915505e-05, 
4.24141140985486e-05, 3.25724476378454e-05, 3.17829593802571e-05, 
5.85548395279348e-05, 5.31253499915505e-05, 0.000270041991742317
), .Dim = c(6L, 6L), .Dimnames = list(c("As1", "As2", "As3", 
"As4", "As5", "As6"), c("As1", "As2", "As3", "As4", "As5", 
"As6")))

Я пытаюсь адаптировать его для анализа среднего отклонения (https://en.wikipedia.org/wiki/Modern_portfolio_theory), но я понятия не имею о процедуре. Я пытался изменить

sum <- sum + (x[i]*R[i] - x[j]*R[j])^2

в

sum <- sum + (x[i]*R[i]*x[j]*R[j])

или даже

sum <- sum + (x[i]*x[j]*Sigma[i,j])

но результаты не имеют значения. У кого-нибудь есть решение?

Спасибо! : 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...