Максимизируйте уклон, используя CVXPY

Я пытаюсь использовать CVXPY, чтобы максимизировать коэффициент Шарпа портфеля акций.

Переменная w представляет собой вектор веса портфеля, Sigma - это корреляционная матрица nxn, mu - средняя доходность каждой акции портфеля, а rf - безрисковая ставка (скалярное значение).

Сначала я попытался построить проблему следующим образом: Maximize((ret-rf)/(sqrt(risk))), которая вызвала ошибку TypeError: может делиться только на скалярную константу. Я попытался обойти эту проблему, взяв в журнал значение, которое я пытаюсь максимизировать, однако теперь я получаю "недопустимый синтаксис", вызванный "prob.solve()". Я почти уверен, что проблема возникает из формулы максимизации, но я не уверен, что это такое.

(Я пробовал обе формулы журнала CVXPY, а именно log_det() и log_sum_exp())

Вот код ниже:

  from cvxpy import *
  def portfolio(mu, Sigma, rf):
        n = len(mu)
        w = Variable(n)
        ret = mu.T*w
        risk = quad_form(w, Sigma)
        prob = Problem(Maximize(log_det(ret-rf)-log_det(sqrt(risk)), 
                   [sum_entries(w) == 1])
        prob.solve()              
        return w.value

1 ответ

Я считаю, что это не выпукло. Из того, что я понимаю, есть несколько способов решения этой проблемы.

  1. Используйте универсальный решатель НЛП (этот метод я использовал)
  2. Проследите эффективную границу, чтобы найти точку на этой границе с лучшим соотношением Шарпа
  3. При некоторых условиях эта проблема может быть преобразована в выпуклое QP (см., Например, Gerard Cornuejols, Reha Tütüncü, Методы оптимизации в финансах, 2007).
Другие вопросы по тегам