2016-08-09 73 views
0

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 

Antwort

1

Ich glaube, dies nicht konvex ist. Von dem, was ich verstehe, dass es mehr Möglichkeiten gibt, dieses Problem in Angriff

  1. Verwenden Sie einen Allzweck-NLP-Solver (dies ist die Methode, die ich verwenden)
  2. Trace die effiziente Grenze den Punkt an dieser Grenze mit dem besten Sharpe zu finden Verhältnis
  3. Unter bestimmten Bedingungen kann dieses Problem in eine konvexe QP umgewandelt werden (siehe z. B. Gerard Cornuejols, Reha Tütüncü, Optimierungsmethoden in Finance, 2007).