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

Probleme bei Matlab [Finance related]

 

oehri
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2015, 21:49     Titel: Probleme bei Matlab [Finance related]
  Antworten mit Zitat      
Hallo zusammen

Ich bin relativ neu bei Matlab und habe entsprechend noch ein paar Schwierigkeiten mich mit der Funktionsweise des Programms. Für ein Projekt möchte ich ein Code entwickeln der mir folgendes ermittelt:

Ziel: Die Erstellung eines Minimum Variance Portfolios entsprechend den Constituents des S&P500. Das heisst ich möchte ein Portfolio kreiieren, dass nicht kapitalgewichtet ist sondern die geringste Varianz (Minimum Variance Portfolio) aufweist. Dabei hatte ich folgende Probleme zu meistern.

1. Daten suchen (Constituents per Datum & Total Returns der einzelnen Constituents)
Erledigt. Hier habe ich ein xlsx File (Constituents_SP500.xlsx), welches mir sagt, zu welchem Endmonatsdatum welche Constituents des S&P500 enthalten sind (angegeben mit den Tickern der verschiedenen Unternehmungen). Y Achse ist Datum und X Achse sind Ticker Daten. Pro Datum sind das logischerweise 500 Stück.
Weiters habe ich eine Datei mit allen Total Returns der benötigten Ticker (Test_Return_SP500.xlsx). Diese beginnen bei 1963-03 und enden mit 2014-12. Dabei haben die jeweiligen Ticker unterschiedliche Startdatum und auch Enddatum und sind auch unterscheidlich lange in Index berücksichtigt und hier fangen auch meine Probleme an.

2. Covariance Matrix
Den Code für die Covariance Matrix habe ich und verstehe ich auch soweit. Was die Schwierigkeit ausmacht ist aber, dass für die Covariance nur die Ticker berücksichtigt werden die 1. zum genannten Zeitpunkt im Index waren und 2. mindestens 60 Monate Returns aufweisen (5 Jahre).

Wie kann ich dabei diese beiden Matrix verbinden? Dass heisst, der Code soll zu erst schauen (hier in einem Beispiel veranschaulicht), welche Ticker per Datum 30.09.2002 vorhanden sind und dann anhand dieser Ticker die Returndaten aus Test_Return_SP500.xlsx laden, die mindestens 60 Monate Returndaten aufweisen.

Danach soll dann die Kalkulation beginnen.

Vielen Dank für Eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


oehri
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2015, 21:50     Titel:
  Antworten mit Zitat      
Übrigens werden sie so ins Matlab geladen:
Code:

% load data into Matlab
[~,~,constituents] = xlsread('Test_Constituents_SP500.xlsx');
[Dreturns Headertext_prices]= xlsread('Test_Return_SP500.xlsx');
% calculate continuous returns
Sreturns=log((100+Dreturns)/100);
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.04.2015, 22:20     Titel: Re: Probleme bei Matlab [Finance related]
  Antworten mit Zitat      
Hallo oehri,

Die Frage ist sehr kompliziert und für einen Außenstehenden kaum nachzuvollziehen. Die meisten Benutzer des Forums werden mit Ausdrücken wie "Minimum Variance Portfolios" nichts anfangen können. Für die Bearbeitung in Matlab sind die Bedeutungen der Zahlen aber auch meistens irrelevant.

Zitat:
Was die Schwierigkeit ausmacht ist aber, dass für die Covariance nur die Ticker berücksichtigt werden die 1. zum genannten Zeitpunkt im Index waren und 2. mindestens 60 Monate Returns aufweisen (5 Jahre).

Das ist die eigentliche Frage, oder?
Kannst Du die Frage neu formulieren und alle überflüssigen Details weglassen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
oehri
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 00:27     Titel:
  Antworten mit Zitat      
Danke für deine Antwort. Gerne kann ich machen. Nein, dass war keine Frage. Leider ist das sehr schwer zu veranschaulichen ohne die Finanzbegriffe.

Ich probiere meine Frage in einem Beispiel zu formulieren. Ich habe eine Matrix A und eine Matrix B. Matrix A gibt mir den Inhalt meines Hosensacks an. Z.b. in Zeile 1 steht, dass ich zum Datum 01.04.2015 Schlüssel und Geld drin hatte. Am 02.04.2015 (neue Zeile) hatte ich in der Tasche Schlüssel, Geld und Aspirin. 03.04.2015 usw.

Matrix B sind jetzt Werte zu den einzelnen Wertgegenstände enthalten. Darin würde zum Beispiel sehen. 01.04.2015 unter Schlüssel (Spalten Header) 3, Geld (Spalten Header) 50, Aspirin 0. Für 02.04.2015 unter SChlüssel 4, Geld 55 und Aspirin 5.

Nun muss ich diese Daten zu einer neuen Matrix C zum Rebalacingzeitpunkt kombinieren. Darin soll stehen, wenn ich die Kalkulation am 01.04.2015 machen: Schlüssel und Geld (Spalten Header) mit den Werten am 02.04.2015. Bei der Kalkulation am 03.04.2015 sollen dann aber Schlüssel, Geld und Aspirin berücksichtigt werden.

Eine weitere Bedingung wäre dann dass in der neuen Matrix C nur Gegenstände berücksichtigt werden, die 2 historische Werte haben. Matrix C würde also beim Rebalancingzeitpunkt 02.04.2015 aus Schlüssel und Geld bestehen.

Immer noch relativ kompliziert erklärt. Ich hoffe aber etwas besser.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2015, 09:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Immer noch relativ kompliziert erklärt.

In der Tat. Es klingt danach, als ob Mengenoperationen (intersect, union, setdiff) helfen sollten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.04.2015, 13:47     Titel:
  Antworten mit Zitat      
Hallo oehri,

Zitat:
Ich habe eine Matrix A und eine Matrix B. Matrix A gibt mir den Inhalt meines Hosensacks an. Z.b. in Zeile 1 steht, dass ich zum Datum 01.04.2015 Schlüssel und Geld drin hatte.

Gib mal ein kleines Beispiel dafür: Wie wird das Datum in der Matrix gespeichert? Wie wird der Inhalt genau dargestellt? Gibt es für alle Gegenstände eine Spalte und welche Werte findet man dann dort?
Für Matlab ist wie gesagt die Bedeutung der Zahlen egal, und genauso auch für die Problemlösung. Etwas in der Art dürfte für alle Programmierer verständlich sein:
Code:

A = [datnum('21-Jan-2010'), 3, 4, 0; ...
       datenum('22-Jan-2010), 3, 5, 0; ... etc
      ]



Zitat:
Matrix B sind jetzt Werte zu den einzelnen Wertgegenstände enthalten. Darin würde zum Beispiel sehen. 01.04.2015 unter Schlüssel (Spalten Header) 3, Geld (Spalten Header) 50, Aspirin 0. Für 02.04.2015 unter SChlüssel 4, Geld 55 und Aspirin 5.

Auch hier wäre ein kleines Beispiel hilfreich.

Während Du das Problem immer weiter abstrahierst, bis es schließlich nur noch um Zahlen geht, wird auch die benötigte Struktur des Programms immer klarer.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
oehri
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 22:15     Titel:
  Antworten mit Zitat      
Danke. In der Matrix A befinden sich jedoch keine Zahlen sondern nur Ticker. Diese sind dann anschliessend mit Zahlen hinterlegt.

Das heisst, Matrix A beinhaltet zu welchem Zeitpunkt, welche Spaltenvektoren verwendet werden.

Kann Matlab mit soetwas umgehen?
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: 13.04.2015, 22:43     Titel:
  Antworten mit Zitat      
ich kann dir nur raten dich an den vorschlag von jan zu halten und beispiele zu geben anstatt zu versuchen es mit worten zu beschreiben.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
oehri
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 22:49     Titel:
  Antworten mit Zitat      
Ich versuche es nochmals zu veranschaulichen, hoffentlich etwas besser.

Matrix A =


    Zeile = Zeitvektor
    1 BAC ABX
    2 BAC ABX
    3 BAC ABX CDS
    4 BAC ABX CDS



Matrix B =


    Zeile* BAC ABX CDS
    1 0.05 -0.03 0.01
    2 -0.02 -0.01 -0.05
    3 0.08 0.02 -0.02
    4 0.1 0.05 0.15


* Zeile = Zeitvektor

Was ich nun möchte ist eine Matrix C die beide Daten kombiniert. Das heisst, anhand der Daten in Matrix A sollen die Daten aus Matrix B geladen werden und in der Matrix C gespeichert werden.

Matrix C zum Zeitpunkt t = 2 besteht die Matrix C aus:


    BAC ABX
    1 0.05 -0.03
    2 -0.02 -0.01


Matrix C zum Zeitpunkt t=4:


    BAC ABX CDS
    3 0.08 0.02 -0.02
    4 0.1 0.05 0.15



Ich habe alle Preisdaten der Ticker (BAC, ABX, CDS) als Cell Arrays in Matlab geladen. Ich kann sich also mit folgender Funktion laden und auch in eine Matrix umwandeln:

Sreturns = [BAC, BCR, BK]

Jedoch möchte ich die Inputparameter dieser Funktion (BAC, BCR, BK) automatisieren, dass man mir diese Ticker aus der Matrix A holt und ich diese nicht hard codieren muss.

Ich hoffe dieses Beispiel hilft weiter, ansonsten bin ich am Anschlag.

Danke nochmals für deine Geduld.
Private Nachricht senden Benutzer-Profile anzeigen
 
oehri
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 23:38     Titel:
  Antworten mit Zitat      
MatrixC = [MatrixA(2,Smile]

kommt bei mir folgendes:

MatrixC =

'BAC' 'BCR' 'BK'


Gebe ich es aber folgendermassen ein, erhalte ich die Matrix C:

Matrix C = (BAC, BCR, BK)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Am einfachsten dürfte sein: Matrix B als Table einlesen (readtable) und die entsprechende Zeile von Matrix A als Spaltenindex verwenden.

Etwa so:
Code:
DataB = readtable('DataB.xls');
[~, DataA] = xlsread('DataA.xls');
DataB_select = DataB(1:I, DataA(I, :));


Ohne entsprechende Beispieldateien ist das natürlich nur meine Idee, dass es so funktionieren könnte.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.04.2015, 13:51     Titel:
  Antworten mit Zitat      
Hallo oehri,

Ich glaube, Du hast schon fast einen Ansatz gefunden, die Frage verständlich zu erklären. Nur die Notation ist mir noch nicht klar:

Zitat:
Matrix A =


    Zeile = Zeitvektor
    1 BAC ABX
    2 BAC ABX
    3 BAC ABX CDS
    4 BAC ABX CDS

Ist das ein Text-File? Was bedeutet "Zeile = Zeitvektor"? Soll dies wirklich eine Matrix sein, obwohl es doch offenbar Elemente unterschiedlichen Typs enthält - also Zahlen und Strings?
Da ich die Notation nicht verstehe, habe ich auch keine Ahnung, was "Matrix C zum Zeitpunkt t=4" bedeutet.

Aber Du hast doch die Daten schon per XLSREAD eingelesen, oder? Dann müsstest Du sie doch in einer Form vorliegen haben, die sich in valider Matlab-Syntax darstellen lässt. Also so, dass wir das selbe Array erzeugen können, wenn wir den gezeigten Code per Copy&Paste im CommandWindow einfügen.

Auch wenn ich das Problem inhaltlich verstehen würde, könnte ich keinen passenden Matlab-Code posten, wenn nicht klar ist, in welcher Form genau Deine Variablen vorliegen. Dann könnte man die Lösung zwar auch umständlich als Text erklären. Das wäre aber ebenso missverständlich und bestimmt 40 mal länger als die entsprechenden Code-Zeilen.

Keine Sorge: Es ist immer schwierig ein Problem zu erklären, dass so eindeutig vor einem liegt. Denke daran, dass die Leser zunächst einmal nicht die geringste Ahnung von dem haben, was Du tust. Die Bedeutung der Zahlen sind nur für die wenigen Leser sinnvoll, die zufällig in genau dem gleichen Fachgebiet arbeiten. Für die anderen und Matlab selbst ist das Posten von Matlab-Code, der die Inputs erzeugt, dagegen eindeutig und trivial.
Lasse Dich nicht durch die Rückfragen verunsichern.

Gruß, Jan
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.