WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Index Tracking (fmincon)

 

Thurki
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2014, 16:14     Titel: Index Tracking (fmincon)
  Antworten mit Zitat      
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);

% Toolbox-Routine: fmincon
[vWeightsMeanSSR, dEstMeanSSR, exitflag] = ...
    fmincon(@(vWeights)fIndexTrackingMeanSSR(vWeights,vIndexRet,mAssetRet), ...
            vW0, A, b, Aeq, beq, vLB, vUB, [], options);
 


die Funktion fIndexTrackingMeanSSR hat den Code

Code:

function dMeanSSR = fIndexTrackingMeanSSR(vW, vIndRet, mAssetRet)

% Renditen Tracking Portfolio bei gegebenem Gewichtevektor vW berechnen
vTrackRet = mAssetRet * vW;

% Renditeabweichungen bestimmen
vDeltaRet = vIndRet - vTrackRet;

% Zielfunktionswert bestimmen
iNumObs = size(vDeltaRet,1);
dMeanSSR = (vDeltaRet' * vDeltaRet) / iNumObs;

end
 


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.
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2014, 10:33     Titel:
  Antworten mit Zitat      
Hallo,

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.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thurki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2014, 11:38     Titel:
  Antworten mit Zitat      
Hallo Thomas,

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?!

Wäre echt klasse, Danke =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Thurki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 28.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2014, 11:29     Titel:
  Antworten mit Zitat      
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. Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.