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

Problem mit Matrixdimensionen bei verschachelten Schleifen

 

Jazz2509
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 09.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2011, 16:58     Titel: Problem mit Matrixdimensionen bei verschachelten Schleifen
  Antworten mit Zitat      
Hey Leute,

ich bin totaler Matlab-Anfänger und stehe gerade total auf dem Schlauch und komm auch mit rumprobieren nicht weiter, vielleicht hat jemand eine Idee bei folgendem Code:

Code:
numbgroups = 3;
hold = 6;

[X,Y] = size (CumSum);
CumSum(isnan(CumSum)) = -1000; % replaces all missing values in matrix "CumSum" with a very high or low number.

for x = 1:(X-form-1) % all periods where cumulative returns are generally available (in matrix "CumSum").
   
   
    CumSum_Final = CumSum(x,:); % displays the row vector of matrix "CumSum" in the respective month x.
    CumSum_Final = CumSum_Final(CumSum_Final ~=-1000); %excludes all -1000 (i.e. missing values) in the row vector.
   
    numbstocks = length (CumSum_Final); % # of stocks that have a cumulative return in this period.
    StocksInPort = floor (numbstocks/numbgroups); % # of stocks in the winner/loser portfolio in this period.
       
    CumSum_FinalSort = sort (CumSum_Final); % sorts the values of row vector CumSum_Final in ascending order.
   
    Winner = CumSum_FinalSort((numbstocks+1-StocksInPort):numbstocks); % contains the cumulative returns of the winner stocks.
    Loser = CumSum_FinalSort(1:StocksInPort); % contains the cumulated returns of the loser stocks.
   
    % Construct two matrices "Winner_hold" and "Loser_hold" that will contain the cumulative returns of the winner/loser stocks during the following holding period ("hold" months).
   
    Winner_hold = zeros (hold+1,StocksInPort);
    Loser_hold = zeros (hold+1,StocksInPort);
   
    % Now check for every single stock in this period, whether it is included in either the winner or the loser portfolio.
    % Use matrix "CumSum_Final" (ignoring missing values).
     
    for n = 1:numbstocks
        if any(Winner == CumSum_Final(n)) %checks for the value to be included in the monthly winner portfolio
           Winner_hold(:,n) =  CumSum_Final((x+1):(x+7),n)% put the cumulative returns of the following "hold+1" months of the winner stocks into a column of the matrix "Winner_hold"
 


Zur Erläuterung:
Konkret geht es um die Matrix "CumSum", die für verschiedene Perioden (in Zeilen) und Aktien (in Spalten) die kumulierte Rendite enthält. Problematisch ist noch, dass für einige Zeitpunkte und Aktien keine Daten vorliegen, ich also NaN vorliegen hab. Da ich die Zeilen später sortieren muss, wird mir NaN immer als höchster Wert angezeigt. Durch Null ersetzen geht auch nicht, da auch "normale" Werte Null sein können. Jedenfalls bin ich jetzt wie oben zu sehen ist anders vorgegangen und hab den NaN einen riesigen wert zugewiesen , den ich daraufhin eliminiere.

Dies hab ich jetzt Zeilenweise gemacht, wäre das auch für die gesamte Matrix gegangen, auch wenn pro Zeile unterschiedlich viele Werte rausfliegen???

Jedenfalls sortiere ich jetzt jede Zeile (also Zeitperiode) aufsteigend und teile die Werte in drei gleich große Gruppen, wobei "Winner" bzw. "Loser" die obersten bzw. untersten Werte darstellen.

Nun hakt es langsam: Ich brauche nämlich für die Aktien in der Gruppe Winner bzw. Loser die kumulierten Renditen (aus der Ursprungsmatrix CumSum) für die nächsten 7 Perioden, unabh. davon, ob sie in der Folgeperiode auch wieder zu den obersten oder untersten Werten gehören.

Ich hab es nun mit zwei Nullmatrizen (Winner_hold) probiert, die ich mit einer Schleife der Reihe nach auffüllen würde mit den Spalten zu den dazugehörigen Stocks (die Werte hierfür Stammen aber aus "CumSum"), leider komme ich aber mit den Indizes durcheinander.

Sieht da jemand besser durch, ich weiß es ist super unübersichtlich, aber deswegen hab ich die einzelnen Zeilen (natürlich auch für mich) kommentiert.

Danke für jede Hilfe. Super Sache jedenfalls, dieses Forum!

Beste Grüße
Jazz
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.