我正在尝试使用 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