|
|
fmincon: Portfolio Optimierung |
|
student_uzh |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.12.2010, 10:51
Titel: fmincon: Portfolio Optimierung
|
 |
Hallo zusammen,
Ich habe eine frage im Bezug auf die fmincon Funktion:
Bin ein Neuling was matlab betrifft und würde gerne folgende Funktion minimieren unter gewissen nebenbedingungen:
sqrt(w'*cvm*w)
es handelt sich dabei um matrizen:
cvm=covarianz-matrix (19*19)
w= 19*1 (Gesuchter Vektor)
Die funktion sollte minimiert werden sodass:
sum(w)=1 und jedes w sollte grösser als 0 sein zum beispiel.
Wie gebe ich das nun ein, mit dem fmincon befehl?
Komme leider nicht weiter, trotz zahlreicher einträge im inet.
Ich habe die funtion mal definiert als std_pf und mich würde interessieren wie genau ich die nebenbedingungen formulieren muss, damit das ganze auch mit 5 oder 6 Nebenbedingugen klappt.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.12.2010, 12:27
Titel:
|
 |
Hallo,
in der Optimization Toolbox sind eine Vielzahl von Algorithmen enthalten. FMINCON ist der allgemeinste Algorithmus, für spezielle Probleme sind andere Algorithmen besser geeignet, hier z.B. QUADPROG
Siehe auch die Doku von quadprog
In der Financial Toolbox sind auch Funktionen speziell für die Portfolio-Optimierung enthalten, z.B. PORTOPT.
Grüße,
Harald
|
|
|
student_uzh |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.12.2010, 13:41
Titel:
|
 |
vielen dank für den tipp, versteh zwar noch nicht genau wie quadprog genau rechnet, aber es kommt was brauchbares raus. Das problem ist, ich muss einzelne NB eingeben können, zb. das sämtliche gewichtungen grösser als 0.01 sind usw. Leider darf ich die financial toolbox nicht benutzen :S resp. ist nicht in meinem Matlab drin.
Hättest du einen Vorschlag wie ich es mit fmincon machen könnte? Meine Bedingungen sind alle linear:
sum(w)=1
w>=0.01
usw.
Ausserdem ist das ganze komplexer, diese gleichung wird noch erweitert, dann funzt es nicht mehr mit quadprog (nehme ich mal an)
so gehts auf jedenfall nicht..
w0= zeros(19,1)
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.12.2010, 14:07
Titel:
|
 |
Hallo,
sowohl FMINCON als auch QUADPROG können lineare Nebenbedingungen verarbeiten. Diese müssen dazu in Matrix-Vektor-Form umgeschrieben werden, z.B. A x <= b oder Aeq x = beq.
Mein Vorschlag beinhaltete also sum(w) = 1*w1 + 1*w2 + ... + wn = 1, weil dann in Matrix-Vektor-Form [1 1... 1] w = 1.
Das >= 0.01 kann als Schrankenbedingung (lb = lower bound) umgesetzt werden.
Solange die Zielfunktion quadratisch und die Nebenbedingungen linear sind, wird QUADPROG funktionieren, siehe auch hier:
http://www.mathworks.com/access/hel...../optim/ug/brhkghv-18.html
(bzw. in der Doku im Contents Tab unter Optimization Toolbox --> User's Guide --> Setting Up an Optimization --> Choosing a Solver)
Lies doch bitte zumindest auch die Hilfe zu den Befehlen und schau dir die Beispiele dort genau an.
Grüße,
Harald
|
|
|
student_uzh |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.12.2010, 19:12
Titel:
|
 |
|
 |
|
hi, danke nochmals für den tipp. Mit quadprog kann ich vorläufig was anfangen und die resultate stimmen. Das problem ist, ich muss noch folgende gleichung minimieren:
sqrt(w'*cvm*w)/(w'*exreturn)
'exretrun' ist eine 19*1 matrix.
Diese lässt sich leider nicht mit quadprog lösen, da man sie nicht umschreiben kann (vielleicht täusche ich mich). Ich habe wieder versucht mit fmincon das ganze zu minimieren, mit der restriktion das sum(w)=1:
dann
trotzdem klappt es nicht, folgende fehlermeldung erscheint:
Warning: Trust-region-reflective algorithm does not solve this type of problem,
using active-set algorithm. You could also try the interior-point or sqp algorithms:
set the Algorithm option to 'interior-point' or 'sqp' and rerun. For more help, see
Choosing the Algorithm in the documentation.
> In fmincon at 472
In mean_con at 1
??? Input argument "cvm" is undefined.
Error in ==> sharp at 2
sharp = sqrt(w'*cvm*w)/(w'*exreturn);
Error in ==> fmincon at 574
initVals.f = feval(funfcn{3},X,varargin{:});
Error in ==> mean_con at 1
w = fmincon(@sharp,zeros(19,1),[],[],ones(19,1)',1)
Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot
continue.
Es kommt mir so vor als hätte ich einen fehler bei der definition der funktionen gemacht... kann mir da jemand einen tipp geben?
ps. cvm/exretrun sind beide defniert als matrix/vektor
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.12.2010, 00:07
Titel:
|
 |
Hallo,
zwei Probleme:
- Rückgabeargument sollte nicht so heißen wie Funktion.
- zusätzliche Parameter müssen anderweitig an die Funktion übergeben werden, z.B. über anonyme Function Handles
Der Aufruf dann
Grüße,
Harald
|
|
|
student_uzh |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.12.2010, 21:39
Titel:
|
 |
vielen dank harald... das hat super geklappt. Musste nur noch einen 'sqp' als Algorithmus wählen... super. danke nochmals.
|
|
|
maryab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.01.2011, 22:34
Titel:
|
 |
hi student uzh,
stehe vor dem selben problem, sprich
min w' Q w
u.d.Nb. summe w = 1
da ich gerade erst angefangen habe würde ich dich bitten, deine matlab befehle doch bitte zu posten. wäre eine sehr große hilfe, da ich leider ein matlab anfänger bin
lg
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 11:18
Titel:
|
 |
Hallo,
in meiner Antwort vom 6.12., 11:27 steht an sich, was du für dieses Problem brauchst.
Weitere Erklärungen in der Dokumentation. In dem Fall wird von 19 Assets ausgegangen; das musst du ggf. noch anpassen.
Grüße,
Harald
|
|
|
marbay |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 16:17
Titel:
|
 |
hi,
schon klar, aber ich hab leider noch nicht so die ahnung von dem ganzen programieren. hatte gehofft du kann einfach mal alles posten von function bis zur ausgabe des ergebnisses. würde dann versuche das ganze nachzuvollziehen und auf meine aufgabe zu übertragen.
wäre echt super und lg
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 17:51
Titel:
|
 |
Hallo,
ich weiß, in MATLAB geht manches einfacher als man denkt, aber das Problem ist wirklich in dieser einen Zeile gelöst. Es wird nur C statt Q verwendet.
Grüße,
Harald
|
|
|
maryab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 18:00
Titel:
|
 |
danke für die hilfe, ich verstehe, das es für jemanden mit entsprechenden kenntnissen wohl absolut geschenkt ist, aber könne mir bitte einer die geschichte beginnend mit
function .......
hochladen. das wäre wirklich meine rettung.
lg
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 18:40
Titel:
|
 |
Hallo,
noch einmal: du musst lediglich dafür sorgen, dass Q bzw. C definiert ist. Dann brauchst du wirklich nur diese eine Zeile, die du z.B. im Command Window eingeben kannst; insbesondere brauchst du keine function.
Die anderen Dinge kamen nur deswegen ins Spiel, weil student_uzh dann noch ein etwas komplexeres Problem hatte.
Grüße,
Harald
Die Bedeutung der einzelnen Argumente von quadprog wird in der Hilfe zu quadprog bzw. bezogen auf dieses konkrete Problem in diesem Thread erklärt.
Grüße,
Harald
|
|
|
maryab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 21:55
Titel:
|
 |
also um die sache mal zu vereinfachen:
nehmen wir an ich habe eine 3x3 matrix C und einen 3x1 vektor w. C ist gegeben und der term
w ' * C* w = portfoliovarianz
die portfoliovarianz soll minimiert werden indem ich w entsprechend bestimme. aus verständnisgründen werde ich nur eine nebenbedingung wählen. später sollen aber noch einige folgen. summe w soll 1 betragen.
angenommen ich habe C definiert als:
C=[0.8,0.4,0.5;0.4,0.9,0.6;0.5,0.6,0.8] und erhalte
0.8 0.4 0.5
C = 0.4 0.9 0.6
0.5 0.6 0.8
wenn ich jetzt
w = quadprog(C, zeros(3,1), [], [], ones(1, 3), 1, zeros(3,1));
müsste ich mein w erhalten, dass eine Varianz minimiert ?
sorry wenn ich wie ein völliger nichtkönner klinge, aber ich arbeite das erste mal mit einem derartigen programm um bin in sachen edv auch nicht wirklich fit.
ps: arbeite mit scilab, hoffe das ändert nichts
lg
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.01.2011, 22:27
Titel:
|
 |
Hallo,
ich kenne nur MATLAB, kann also nicht sagen, wie das in Scilab aussieht.
Insbesondere weiß ich nicht, ob es in Scilab ein "quadprog" gibt.
Ansonsten sieht alles gut aus.
Grüße,
Harald
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|