У меня есть проблема оптимизации портфеля, в которой я пытаюсь максимизировать квадратичную функцию полезности, изменяя веса активов портфеля с учетом различных ограничений. В настоящее время я использую пакет ROI для этой цели. Пока давайте предположим, что нет никаких ограничений, так как мой вопрос включает в себя целевую функцию.
У меня есть вектор ожидаемой доходности («возврат»), коэффициент неприятия риска («лямбда») и дисперсия / ковариацияматрица («VCV»). Я пытаюсь максимизировать эту стандартную функцию полезности портфеля:
utility = portfolio_return - (1/2) * lambda * portfolio_variance
Это может быть закодировано как функция R следующим образом:
utility <- function(weights, returns=returns, VCV=VCV, lambda=lambda) {
port_ret <- weights %*% returns
port_var <- t(weights) %*% (weights %*% VCV)
util <- port_ret - (1/2) * lambda * port_var
return(util)
}
Моя проблема оптимизации настроена следующим образом:
# lambda is risk aversion coefficient, VCV is variance/covariance matrix,
# returns is vector of expected asset class returns
objective <- Q_objective(Q = -lambda * VCV, L = returns)
# optimization problem
lp <- OP(objective = objective, maximum = TRUE)
# solution
solution <- ROI_solve(lp, solver = 'quadprog')
optimal_weights <- solution(solution)
По сути, мой вопрос в том, соответствует ли эта целевая функция "Q_objective" тому, что я пытаюсь максимизировать здесь? Я попытался использовать функцию F_objective, но не смог заставить ее работать. Я все еще выясняю пакет ROI, поэтому я не уверен, что это достигло моей цели.