Ich versuche CVXPY zu verwenden, um die Sharpe Ratio eines Aktienportfolios zu maximieren.Maximieren Sie die Steigung mit CVXPY
Die Variable w ist ein Portfoliogewichtsvektor, Sigma ist eine nxn-Korrelationsmatrix, mu - ist die durchschnittliche Rendite jedes Portfolio-Bestands und rf - die risikofreie Rate (ein Skalarwert).
Zuerst habe ich versucht, das Problem zu konstruieren als: Maximieren ((ret-rf)/(sqrt (Risiko))), was einen TypeError ausgelöst: Kann nur durch eine skalare Konstante dividieren. Ich habe versucht, dieses Problem zu umgehen, indem ich das Protokoll des Wertes nehme, den ich zu maximieren versuche, aber jetzt bekomme ich eine "ungültige Syntax", die von "prob.solve()" ausgelöst wird. Ich bin mir ziemlich sicher, dass das Problem durch die Maximierungsformel entsteht, aber ich bin mir nicht sicher, was es ist.
(ich beide CVXPY log Formeln versucht haben, nämlich log_det() und log_sum_exp())
Hier ist der Code unten:
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