0

我正在尝试使用 CVXPY 来最大化股票投资组合的夏普比率。

变量 w 是投资组合权重向量,Sigma 是 nxn 相关矩阵,mu - 是每个投资组合股票的平均收益,rf - 无风险利率(标量值)。

起初,我尝试将问题构造为:Maximise((ret-rf)/(sqrt(risk))),这引发了 TypeError: Can only 除以一个标量常数。我尝试通过记录我试图最大化的值来绕过这个问题,但是现在我得到了由“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
4

1 回答 1

3

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

  1. 使用通用 NLP 求解器(这是我使用的方法)
  2. 追踪有效边界以找到该边界上具有最佳夏普比率的点
  3. 在某些情况下,这个问题可以转化为凸 QP(参见 Gerard Cornuejols, Reha Tütüncü, Optimization Methods in Finance , 2007)。
于 2016-08-09T15:46:46.317 回答