Verfasst am: 15.07.2015, 12:27
Titel: Rollierendes Zeitfenster in der Portfoliooptimierung
Hallo,
ich möchte die optimale Portfolioallokation für verschiedene Zeitpunkte berechnen und hierbei ein "rolling window" verwenden.
Ich habe ca. 2500 Beobachtungen, das rollierende Zeitfenster soll 504 Beobachtungen entahlten und jeweils nach einem Durchgang um 21 Tage verschoben werden. Als Erstes schätze ich das Portfolio für die Zeit 1:504:
Code:
Returns = tick2ret(data(1:504))
m=mean(Returns)
cv=cov(Returns)
st=std(Returns)
p = Portfolio;
p = setAssetMoments(p, m, cv);
p.AssetList = datanames;
p = setDefaultConstraints(p);
r0 = ...
p = Portfolio('RiskFreeRate', r0);
p = setAssetMoments(p, m, cv);
p = setDefaultConstraints(p);
pwgt = estimateMaxSharpeRatio(p);
display(pwgt);
Soweit stellt dies kein Problem dar. Nun möchte ich diesen Prozess jedoch automatisieren, sodass als PWGT(:,2), PWGT(:,3) etc. die Analyse für die Werte 22:525, 43:546 usw. erfolgen, bis ich bei dem letzten Wert der über 2.500 Beobachtungen angekommen bin.
Leider bin ich überfragt was das erstellen der Schleife angeht. Hat hier vielleicht jemand einen simplen Ansatz bzw. Code?
ich habe 2563 Beobachtungen und das Fenster entsprechend angepasst.
Zusätzlich habe ich noch einen Zähler für die jeweiligen Spalten des PWGTmarkowitz-Vektors eingebaut. Die For-Schleife läuft sauber durch und mein Stichprobentest hat auch ergeben, dass die Werte korrekt sind
Ohne deine Hilfe wäre ich natürlich niemals auch nur annähernd auf diese Idee gekommen, also vielen Dank!!!
Code:
ende = 504:21:2563;
start = ende - 503;
j=0;
for i = start:ende
Returns = tick2ret(data(start(i):ende(i)));
nun habe ich doch noch einmal eine Frage. Ich möchte nach der optimalen Ermittlung der Allokation die jeweiligen Portfoliorenditen ermitteln. Hierfür habe ich ebenfalls versucht das Fenster entsprechend zu verschieben. Die erste Überprüfung soll für die folgenden 21 Tage, also die Beobachtungen 505:525 erfolgen, die zweite Überprüfung für die Beobachtungen 526:546 usw..
ich habe ein sehr ähnliches Problem und zwar möchte ich die optimale VaR hedge ratio nach der CF-Methode für ein rolling window von 250 Tage ausrechen.
In-sample sieht das so aus:
Dabei bekomme ich folgende Fehlermenldung:
function VaR = VaRcf_d(alpha_vec,h_VaRcf_d,P1,SP500)
↑
Error:
Function
definitions
are not
permitted in
this context.
Vermute aber, das auch der Rest nicht komplett stimmt. Könnte mir jemand dabei helfen?
Ich habe plausible Antwort bekommen, habe aber das Gefühl, dass irgendwas falsch ist. Wird in dem Fall das hedge ratio tatsächlich jeden Tag optimiert? Eigentlich müsste ich ein Vektor von 6750 unterschiedliche hedge ratios bekommen, oder?
insgesamt etwas schwierig, da ich weder die Daten noch ein genaues Verständnis der Anwendung habe. Prinzipiell so:
Code:
ende = 250:1:7000;
start = ende - 249;
h_VaRcf_d_H1 = zeros(size(start));
for i = 1:numel(start)
interval = start(i):ende(i);
h_VaRcf_d_H1(i)=fminsearch(@(h_VaRcf_d)VaRcf_d(alpha_vec,h_VaRcf_d,P1_complete,SP500_complete, interval),0.0) end
vielen Dank! So haben die unterschiedliche Methoden zur Ermittlung von VaR und CVaR funktioniert. Blöderweise hab ich ne Fehlermeldung bei der Varianz:
Code:
ende = 250:1:7000;
start = ende - 249;
h_SD_d_H1 = zeros(size(start));
for i = 1:numel(start)
interval = start(i):ende(i);
h_SD_d_H1(i)=fminsearch(@(h_SD_d)SD_d(h_SD_d,P1_complete,SP500_complete,interval),0.0);
end
Warning:
Colon operands must be real scalars.
> In @(h_SD_d)SD_d(h_SD_d,P1_complete,SP500_complete,interval)
In fminsearch (line 189)
Warning:
Colon operands must be real scalars.
> In @(h_SD_d)SD_d(h_SD_d,P1_complete,SP500_complete,interval)
In fminsearch (line 189)
Error using SD_d
Too many input arguments.
Error in
@(h_SD_d)SD_d(h_SD_d,P1_complete,SP500_complete,interval)
Error in
fminsearch
(line 189)
fv(:,1) =
funfcn(x,varargin{:});
>>
Weißt du woran es liegt und wie ich es zum Laufen bringen kann?
auf den ersten Blick kann ich das Problem nicht nachvollziehen. Die Funktion fordert 4 Variablen an und übergibt 4.
Ein Problem ist aber auf jeden Fall, dass du das Ausgabeargument SD in der Funktion nicht belegst. Das sollte dir übrigens auch der Code Analyzer anzeigen.
Mehr lässt sich ohne die Daten schlecht nachvollziehen.
Grüße,
Harald
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.