2016-08-09 7 views
0

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

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

Сначала я попытался создать проблему как: Максимизировать ((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. Использование общего назначения NLP решателя (это метод, который я использовал)
  2. Трассировки эффективной границы, чтобы найти точку на этой границе с лучшим Шарпом Соотношение
  3. При некоторых условиях эту проблему можно преобразовать в выпуклую QP (см., Например, Gerard Cornuejols, Reha Tütüncü, Методы оптимизации в финансах, 2007).