ich habe folgendes Problem:
Ich möchte monatliche Renditen für Aktien berechnen. Dabei sind die Rohdaten Tageskurse der Aktien. Diese sind in einen Matrix, wobei Zeilen die Tageskurse sind und Spalten die einzelnen Aktien. In einer weiteren Matrix ist das Datum des jeweiligen Kurses enthalten, diese ist von der form "datevec", sodass in Spalte 2 der Monat ist.
Meine Funktion soll testen ob der Monat zum jeweiligen Kurs "X" einer Aktie sich von dem Monat des nächsten Kurses "Y" unterscheidet. Ist dies der Fall soll die Rendite zwischen den zwei Kursen in eine neu Matrix geschrieben werden und "Y" soll der neue Startwert sein. Trifft es nicht zu soll "X" gleich bleiben und "Y" einen Tag weiter rutschen, bis der erste Fall zutrifft.
Hier ist mein bisheriger Code:
function [ Returns ] = Return_calc_month( Stock_Prices, Dates_daily )
% Calculation of monthly returns
% calculating monthly returns by checking if month day of day differs from
% following days
% Input-matrix, size of matrix
A = size (Stock_Prices);
r=A(1,1);%rows input
b=floor((r/20)+20);%rows output
c=A(1,2);%columns = number of stocks
% variable for month check
Returns=zeros(b,c);
% writer for output matrix
l=1;
% reader index
h=0;
%columns
for i=1:c
%rows of input matrix
for j=1:r-1
%counter till month's end
k=1;
h=h+j;
while (k < 31)
if Dates_daily(h,2)== Dates_daily(h+k,2)
k=k+1;
end
end
if h+k<=r
%calculate monthly return
Returns(l,i)=(Stock_Prices(h+k,i)/Stock_Prices(h,i))-1;
%increment writer by one
l=l+1;
%
h=h+k;
%set current month end as new beginning
end
end
end
end
Leider funktioniert der Code nicht, MATLAB ist "busy" und es passiert nichts weiter...
wen diese bedingung nicht erfüllt ist wird k nicht erhöht und deine whileschleife läuft ewig.
bitte nächstes mal die code umgebung nutzen _________________
danach is deine while schleife zu ende wen beide gleich sind und in der drüberliegenden forschleife setzt du k dann gleich wieder auf 1 und fängst von vorn an ohne etwas zu machen
_________________
Ich habs jetzt mal mit ner for-Schleife versucht, aber leider funktiert auch das nicht.. allerdings wieder die Funktion ausgeführt und gibt als output die vor-definiert Matrix aus. Aber eben nur als "ones".
Kannst du mir hier weiterhelfen?
Code:
function[ Returns ] = Return_calc_month( Stock_Prices, Dates_daily ) % Calculation of monthly returns % calculating monthly returns by checking if month day of day differs from % following days % Input-matrix, size of matrix
A = size(Stock_Prices);
r=A(1,1);%rows input
b=floor((r/20)+20);%rows output
c=A(1,2);%columns = number of stocks
% writer for output matrix
l=1;
% reader index
h=0;
%columns
for i=1:c
%rows of input matrix
for j=1:r-1
%counter till month's end
h=h+j;
for k=1:31 if h+k<=j && Dates_daily(h,2)~= Dates_daily(h+k,2)
%calculate monthly return
Returns(l,i)=(Stock_Prices(h+k,i)/Stock_Prices(h,i))-1;
%increment writer by one
l=l+1;
%
h=h+k;
%set current monthend as new beginning
end end
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.