Verfasst am: 30.06.2014, 16:14
Titel: Index Tracking (fmincon)
Hallo,
also ich beschreibe erstmal mein Problem sehr einfach. Ich habe einen Index (den DAX) und möchte die Rendite des Daxes mit einzelnen Aktien möglichst genau nachstellen. Dabei möchte ich jedoch nicht alle Aktien nutzen sondern beispielsweise nur 10. Und genau da liegt bei mir das Problem, ich möchte dass Matlab selbstständig die geeignetesten 10 Aktien raussucht. Es werden die Renditen der Aktien mit denen des DAX verglichen, die Aufteilung der Aktien mit den geringsten Abweichungen werden gewählt.
Nun zum Matlabteil, ich nutze die fmincon Funktion um die eingelesenen Aktien zu optimieren, jedoch werden bei meinem Skript immer alle Aktien optimiert, ich möchte jedoch beispielsweise nur die 10 geeignetesten optimieren, aber Matlab soll auswählen welches die 10 besten sind.
Hier mein Matlab Code
Code:
iNumAssets = size(mAssetRet,2); % Anzahl Assets
A = []; % keine linearen Ungleichheitsrestriktionen
b = []; % keine linearen Ungleichheitsrestriktionen
Aeq = ones(1,iNumAssets); % Budgetrestriktion, linke Seite
beq = 1; % Budgetrestriktion, rechte Seite
% Optionen für den Optimierungsalgorithmus setzen
options = optimset('algorithm', 'sqp', 'Display', 'off');
% Startpunkt ist naive Portfolio
vW0 = 1/iNumAssets * ones(iNumAssets,1);
Also ich hoffe ihr versteht das Problem, es ist in Matlab sicher relativ leicht zu lösen, jedoch beschränken sich meine Kenntnisse auf ein Minimum. Falls ich die Problematik noch genauer erklären soll tue ich dies gerne.
wenn ich es richtig verstanden habe willst du noch eine zusätzliche Nebenbedingung einbauen. vW soll nur an 10 verschiedenen Stellen ungleich Null sein.
Das könnte man z.B. durch eine zusätzliche Straffunktion implementieren. D.h. du überprüfst wieviele Werte von vW ungleich Null sind und erhöhst denn Wert von dMeanSSR gegebenenfalls. Ist nicht ganz sauber, aber etwas besseres fällt mir gerade nicht ein.
danke schon mal für die Antwort. Die Idee hab ich grundsätzlich glaube ich verstanden, klingt schon ganz vernünftig. Da ich leider wie bereits geschrieben, ziemlich unerfahren bin was Matlab angeht, könntest du mir vllt sagen an welche Stelle ich diese Straffunktion implementieren muss und wie die in etwa grob aussieht?!
Oder hat jemand anders noch einen Lösungsansatz? Ich bekomm die Idee von Thomas technisch nicht hin =/ Hab keine Ahnung an welcher Stelle ich diese Funktion einbaue und wie diese aussehen könnte.
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
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.