|
|
Probleme bei Matlab [Finance related] |
|
oehri |

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.04.2015, 21:49
Titel: Probleme bei Matlab [Finance related]
|
 |
|
 |
|
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.
|
|
|
|
|
oehri |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.04.2015, 21:50
Titel:
|
 |
Übrigens werden sie so ins Matlab geladen:
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.04.2015, 22:20
Titel: Re: Probleme bei Matlab [Finance related]
|
 |
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
|
|
|
oehri |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 00:27
Titel:
|
 |
|
 |
|
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.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 09:25
Titel:
|
 |
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
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 13:47
Titel:
|
 |
|
 |
|
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:
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
|
|
|
oehri |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 22:15
Titel:
|
 |
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?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 22:43
Titel:
|
 |
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
|
|
|
oehri |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 22:49
Titel:
|
 |
|
 |
|
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.
|
|
|
oehri |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 12.04.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.04.2015, 23:38
Titel:
|
 |
MatrixC = [MatrixA(2, ]
kommt bei mir folgendes:
MatrixC =
'BAC' 'BCR' 'BK'
Gebe ich es aber folgendermassen ein, erhalte ich die Matrix C:
Matrix C = (BAC, BCR, BK)
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 14.04.2015, 18:29
Titel:
|
 |
Hallo,
Am einfachsten dürfte sein: Matrix B als Table einlesen (readtable) und die entsprechende Zeile von Matrix A als Spaltenindex verwenden.
Etwa so:
Ohne entsprechende Beispieldateien ist das natürlich nur meine Idee, dass es so funktionieren könnte.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.04.2015, 13:51
Titel:
|
 |
|
 |
|
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
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|