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

Optimization toolbox - Probleme mit der Objektfunktion

 

phantason
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 11.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2015, 15:17     Titel: Optimization toolbox - Probleme mit der Objektfunktion
  Antworten mit Zitat      
Hallo,

ich möchte ein bestimmtes Portfolio mittels Expected Shortfall (conditional value at risk) optimieren. Hierfür möchte ich nicht die das in Matlab implementierte "cvar object" nutzen, sondern die Schätzung mittels EVT vornehmen.

Für meine Optimierung habe ich die folgenden Inputdaten:

x0 = Startvektor für meine Assetallocation (insgesamt sind 30 Assets vorhanden, mein Startvektor besteht aus 1/30 für jedes Asset)

data = fts object

j = Periode

start = Startpunkt der Periode (da ich an anderer Stelle ein Rolling Window verwendet habe)

ende = Endpunkt der Periode

Meine Perioden sind wie folgt definiert:

Code:
ende = 504:21:2563;
start = ende - 503;


Nun habe ich eine Funktion geschrieben, die mir als Endresultat das Verhältnis von durchschnittlich zu erwartender Rendite und dem ES ermittelt. Diese Variable heißt r:

Code:
function r = hs(x0,data,j,start,ende)
j=1;
Returns = tick2ret(data(start(j):ende(j)));
returns = fts2mat(Returns);
tsmat = returns * x0;
model   = arima('AR', NaN, 'Distribution', 't', 'Variance', gjr(1,1));
options = optimset('fmincon');
options = optimset(options, 'Display'  , 'off', 'Diagnostics', 'off', ...
                            'Algorithm', 'sqp', 'TolCon'     , 1e-7);
fit = estimate(model, tsmat, 'options', options);  % Fit the model
[residuals, variances] = infer(fit, tsmat);  
standardizedResiduals = residuals ./ sqrt(variances);
stdResiduals = standardizedResiduals/100;
obj = paretotails(stdResiduals,0.1,1);
param = obj.lowerparams;
tail = param(1);  
scale1 = param(2);
VaR =  0.1 + (scale1/tail)*(0.1*((1-0.05)^-tail)-1);
ES = VaR/(1-tail) + (scale1 - tail * 0.1)/(1-tail);
r = mean((returns * x0))/ES;
end  


Gebe ich bspw. verschiedene x0 vor und rufe die Funktion auf, erhalte ich nach ca. 20-30 Sekunden wie gewünscht meine Werte für r. Der Aufruf erfolgt mittels:

Code:
hs(x0,data,j,start,ende)


Nun möchte ich jedoch die Allokation finden, die mir diese Funktion maximiert. Hierfür habe ich das folgende bei der Optimization Toolbox eingegeben (siehe Anhang).

Der Algorithmus startet, braucht aber pro Iteration ca. 15 Minuten. Nun habe ich das Gefühl, dass ich irgendetwas falsch gemacht habe, da der Algorithmus eigentlich nach jedem Durchlauf (ca. 20-30 Sekunden) in die nächste Iteration springen müsste bzw. sollte. Die Optimierung soll mir quasi nur einmal mit dem jeweiligen Vektor x0 den Wert r berechnen und in der nächsten Iteration mit einer anderen Allokation weitermachen - solange bis der Funktionswert maximal ist.

Weiß jemand, wie ich dieses Problem beseitigen kann?

Vielen Dank bereits im Voraus für die Tips! Smile

Unbenannt.png
 Beschreibung:

Download
 Dateiname:  Unbenannt.png
 Dateigröße:  55.33 KB
 Heruntergeladen:  462 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 16:11     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

da der Algorithmus eigentlich nach jedem Durchlauf (ca. 20-30 Sekunden) in die nächste Iteration springen müsste bzw. sollte.

Nein, sollte er nicht. In jedem Schritt muss der Gradient angenähert werden, und dazu sind (mindestens) so viele Funktionsauswertungen wie Dimensionen nötig.
In deinem Fall also 30 * (20-30 Sekunden) = 10-15 Minuten.

Mich wundert allerdings das Vorgehen. Ist es denn sinnvoll, für jede Allokation eine neue Arima-Modellierung und -simulation zu machen? Wäre da nicht z.B. ein VARMAX-Modell für die Daten oder auch ein ARIMA-Modell für jedes Asset sinnvoller?

Ich vermute (du kannst das mit dem Profiler überprüfen), dass die meiste Zeit in der Zielfunktion damit verbracht wird, immer wieder neue ARIMA-Modelle anzupassen.

Solltest du bei dem bisherigen Vorgehen bleiben wollen, kann die Nutzung der Parallel Computing Toolbox hilfreich sein, um das ganze zu beschleunigen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
phantason
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 11.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2015, 16:54     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Rückmeldung!

Ich habe das Verfahren erst einmal so probiert, da ich ehrlich gesagt nichts anderes kenne bzw. weiß, wie ich das Ganze sonst schätzen sollte.

Die einzelne Auswertung (zuerst 30 ARIMA-Modelle) und dann die Kombination in einem Modell wird denke ich schwierig, da ich im Folgenden die nächste Periode erneut schätzen muss, sodass ich dann wieder 30 neue Einzelschätzungen etc. hätte.

Also bleibt wahrscheinlich nur die parallel computing toolbox übrig?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 18:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die einzelne Auswertung (zuerst 30 ARIMA-Modelle)

Ich persönlich fände wie gesagt VARMAX sinnvoller. Es wird ja eine Korrelation zwischen den Assets geben, die nicht vernachlässigt werden sollte.

Zitat:
da ich im Folgenden die nächste Periode erneut schätzen muss

d.h. über den bestehenden fmincon-Code soll nochmals iteriert werden? Dann wird's aber zeitaufwändig...

Zitat:
Also bleibt wahrscheinlich nur die parallel computing toolbox übrig?

Das ist unabhängig vom Ansatz eine Möglichkeit zur Beschleunigung. Ich würde aber nochmal gründlich über den Ansatz nachdenken.

Was spricht eigtl. gegen CVaR?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
phantason
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 11.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2015, 08:15     Titel:
  Antworten mit Zitat      
Hallo Harald,

gegen den CVaR-Ansatz aus Matlab spricht nichts, ich habe diesen bereits im Vorfeld verwendet. Nun wollte ich in einem weiterführenden Schritt jedoch einmal ausprobieren wie das "Verfahren" reagiert, wenn ich den CVaR über ein Prognoseverfahren schätze und anhand dieser Schätzung das Portfolio optimiere.

Ich werde nun einfach einmal einen kompletten Lauf starten und mir dann überlegen, wie ich weitermache.

Vielen Dank auf jeden Fall für deine Hinweise!
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 - 2024 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.