使用CVXPY最大化斜率

时间:2016-08-09 12:18:59

标签: python optimization 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 个答案:

答案 0 :(得分:2)

我相信这不是凸起的。根据我的理解,有几种方法可以解决这个问题

  1. 使用通用NLP求解器(这是我使用的方法)
  2. 追踪有效边界,以最佳夏普比率
  3. 找到此边界上的点
  4. 在某些情况下,此问题可以转换为凸QP(参见例如Gerard Cornuejols,RehaTütüncü,财务中的优化方法,2007)。