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

Berechnung monatlicher Renditen

 

tobsn
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2013, 11:42     Titel: Berechnung monatlicher Renditen
  Antworten mit Zitat      
Hallo zusammen,

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...

Kann mir einer von euch helfen?

Besten Dank!

VG
Tobi
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.08.2013, 12:03     Titel:
  Antworten mit Zitat      
Code:
if Dates_daily(h,2)== Dates_daily(h+k,2)
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 Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
tobsn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2013, 12:13     Titel:
  Antworten mit Zitat      
Ah ok danke!

Könnte ich die Bedingung dann die Bedingungen der while-Schleife mitzunehmen, etwa so:
Code:
while (k < 31 && Dates_daily(h,2)== Dates_daily(h+k,2))
                k=k+1;
                end
           


Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.08.2013, 12:16     Titel:
  Antworten mit Zitat      
ja wobei das so aussiht als würdest du einen index suchen. das geht auch mit
Code:
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
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
tobsn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2013, 12:43     Titel:
  Antworten mit Zitat      
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

% 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
           
            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 month end as new beginning
                end
            end
           
        end
    end
       



end

 
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.