Jump to content
100

CPPI und Protective Put (in MatLab)

Recommended Posts

100
Posted · Edited by 100

Hallo,

 

ich beschäftige mich derzeit mit MatLab und Wertsicherungsstrategien und ihrer Umsetzung in MatLab.

 

Im Speziellen geht es um CPPI (Constant Proportion Portfolio Insurance) und Protective Put.

 

Dazu werden sicherlich Fragen bei mir auftauchen, daher dieser Thread. Hoffentlich gibt es hier derartige Spezialisten.

 

 

 

Zuerst habe ich allerdings eine ganz allgemeine Frage zum CPPI (also ohne MatLab-Bezug) :

vielleicht anhand des Beispiels aus Wikipedia: http://de.wikipedia.org/wiki/Cppi

 

Man hat anfangs den Betrag (Portfoliowert) 100.000. Als Zielvermögen legt man fest 100.000. Dadurch, dass man 5% Marktzins hat, kann man also mit 5% abzinsen und was man dann erhält (Floor), muss risikolos angelegt werden, damit man am Ende auf jeden Fall 100.000 erreicht.

Damit hat man im Beispiel also einen Cushion von 4876,58 (Anfangs-Portfoliowert - Floor).

 

Dieser kann risikobehaftet angelegt werden, weil ein Verlust nicht das Ziel von 100.000 gefährdet.

 

Jetzt mein Kasus-knacktus: Es wird ein Multiplikator M eingeführt, der die Risikoneigung des Investors darstellt, und mit diesem (im Beispiel 5) wird der Cushion multipliziert.

Jetzt investieren die das Produkt daraus (Exposure), also 24382,91 in risikobehaftete Anlagen, während nur noch 75617,09 risikolos verzinst werden.

 

Wenn JETZT der Aktienkurs fällt, ist doch die ganze Strategie für'n Eimer. Man verliert nicht nur weit mehr als den Cushion, sondern das, was risikolos verzinst wird, ergibt am Ende der Periode überhaupt nicht 100.000.

 

Wozu wird der Cushion errechnet (der ja darstellt, wieviel Maximal investiert werden kann, ohne das Endziel zu gefährden), wenn er dann einfach über den Haufen geworfen und trotzdem mehr risikobehaftet investiert wird??

Müsste der Multiplikator nicht eigentlich generell immer 1 sein ?

Share this post


Link to post
Der T
Posted · Edited by Der T

Wenn der Wert der riskanten Investments sinkt, muss umgeschichtet werden. Raus aus riskanten Anlagen und rein in risikolose Anlagen. So weit, bis es wieder mit der Zielgröße passt.

 

Je größer die Risikoneigung, desto größer der Teil, welcher riskant angelegt werden. Deine Überlegung unterstellt, dass der riskante Anteil entweder bis zum Zielzeitpunkt nie wieder angepasst wird oder der Wert auf Null sinkt. Sie mal im Wikipedia-Artikel unter Grundkonzept der dritte Satz ("...permanente Portfolioumschichtungen...). CPPI ist kein "fire and forget".

Share this post


Link to post
100
Posted

Aber wenn das Umschichten ausgelöst würde, wäre es doch schon zu spät oder nicht ?

Wenn ich z.B. eine Aktie habe mit Kurswert 100€, dann kann ich doch keine Order machen "Verkaufe, wenn sie fällt". Denn `wenn sie fällt` bekomme ich doch schon nur noch den neuen, niedrigeren Kurs, oder seh ich das irgendwie falsch ?

Und würde "permanente Umschichtung" nicht auch permanent, also unendlich hohe Gebühren verursachen?

Share this post


Link to post
ImperatoM
Posted

Jep, es ist sinvoll eine gewisse Sicherheitsabstandsschwelle einzubauen. So wird erstens rechtzeitig verkauft und zweitens nicht ununterbrochen neu umgeschichtet. Daher sollte es Schwellen in beide Richtungen geben. Die Ausgestaltung der Schwellen bietet viel Spielraum, da auch nicht zwangsweise alles auf einmal umgeschichtet werden muss.

Share this post


Link to post
lurklurk
Posted · Edited by lurklurk

Kennst Du diesen Artikel dazu, als Überblick? Dynamic Strategies for Asset Allocation

Erklärt gut konkav vs. konvex, diverse Möglichkeiten wie Buy & Hold, CPPI, Rebalancing (dort Constant Mix genannt) oder mit Optionen. Wie das zusammenhängt und für wen jeweils was wann sinnvoll sein kann oder nicht.

Share this post


Link to post
Der T
Posted · Edited by Der T

Aber wenn das Umschichten ausgelöst würde, wäre es doch schon zu spät oder nicht ?

Wenn ich z.B. eine Aktie habe mit Kurswert 100€, dann kann ich doch keine Order machen "Verkaufe, wenn sie fällt". Denn `wenn sie fällt` bekomme ich doch schon nur noch den neuen, niedrigeren Kurs, oder seh ich das irgendwie falsch ?

Und würde "permanente Umschichtung" nicht auch permanent, also unendlich hohe Gebühren verursachen?

 

Nimm in deinem obigen Beispiel doch mal an, dass der riskante Anteil um 10% fällt - ca. 2.400 EUR. Der Puffer beträgt ca. 4.400 EUR. Der angestrebte Mindestwert kann immer noch erreicht werden.

CPPI bedeutet nicht, dass nicht auch ein Verlust eingefahren werden kann! Es geht darum, den Mindestwert nicht zu unterschreiten.

 

In dem Zusammenhang kann dann vielleicht auch die Risikoneigung "M" besser nachvollzogen werden. Bei M=1 wäre es eine statische Strategie, da man an der Portfoliozusammensetzung nichts mehr ändern müsste.

Share this post


Link to post
100
Posted

Okay, danke für die Tipps bisher. Grundlegend habe ich es mittlerweile verstanden. Die PDF von Lurklurk war seehr hilfreich, da habe ich viel rausziehen können.

 

 

Jetzt geht es an die Umsetzung in MatLab. Erstmal die grundsätzliche Programmierung: Ich habe folgendes in einer MatLab-Datei gegeben bekommen:

 

----------------------------------------------------------------------------------------------------------

% Einlesen der Daten aus einer Exceldatei

Renditen=xlsread('Simulation CPPI Historisch.xls','CPPI Gesamt','B13:C498');

 

% Einstellungen für eine CPPI-Strategie

DAX=Renditen(:,1);

REX=Renditen(:,2);

Startwert=100;

Multiplikator=2;

FloorIndex=80;

Floorverzinsung=0;

Bild=0;

 

[mReturnCPPI mPortValue dEndValueRisky dEndValueRiskless ] = ...

fCPPI(Startwert,REX,DAX,Multiplikator,FloorIndex,Floorverzinsung,Bild);

-----------------------------------------------------------------------------------------------------------

 

 

Wenn ich das ausführen lasse, bekomme ich aber bereits eine Fehlermeldung, allerdings sagt sie mir nichts.. was bedeutet sie?

 

"Error in Uebung3c_CPPI_historisch (line 19)

[mReturnCPPI mPortValue dEndValueRisky dEndValueRiskless ] = ..."

 

(Ich weiß natürlich, dass sie heißen soll, dass in Zeile 19 etwas falsch ist, aber ich kann nicht sehen was)

 

 

Desweiteren habe ich noch eine weitere Datei, in der es darum geht, zu testen, ob mit höherem Multiplikator höhere Rendite erzielt wird. Die Datei beinhaltet folgendes:

------------------------------------------------------------------------------------------------------------

% Vermutung: je höher der Multiplikator desto höher der Endwert

 

iAnzMulti=100;

vEndValue=NaN(iAnzMulti,1);

for dMulti=1:size(vEndValue,1)

[ b mPortValue]=fCPPI(Startwert,REX,DAX,dMulti/10,FloorIndex,Floorverzinsung,Bild);

vEndValue(dMulti,1)=mPortValue(end,1);

end

figure(1)

plot(vEndValue);

title('Entwicklung des Endvermögens in Abhängigkeit vom Multiplikator');

set(gca, 'TickDir', 'out', 'XTick', (0:5:iAnzMulti),'XTickLabel',num2cell(0:0.5:iAnzMulti/10));

xlabel( 'Höhe des Multiplikators', 'FontSize', 10 );

ylabel( 'Höhe des Endvermögens', 'FontSize', 10 );

---------------------------------------------------------------------------------------------------------------

Was bedeuten hier die einzelnen Zeilen? Ich habe kaum einen Durchblick. Und auch hier erhalte ich eine Fehlermeldung, die mir wenig sagt, wenn ich es durchführen lassen will:

 

"Error in CPPI_Multiplikator (line 25)

[ b mPortValue]=fCPPI(Startwert,REX,DAX,dMulti/10,FloorIndex,Floorverzinsung,Bild);"

Share this post


Link to post
100
Posted

Sind solche Fragen für dieses Forum zu speziell? Wo findet man solche Sachen am besten raus?

Share this post


Link to post
lurklurk
Posted · Edited by lurklurk

Das Problem dürfte sein, dass nur 2-3 User hier im Forum überhaupt Matlab verwenden, und dann vielleicht ohne Erfahrung mit CPPI & Co. Ich würde es an deiner Stelle entweder bei Programmierern versuchen, wie stackoverflow.com und sowas. Oder in speziellen Quant-Finance-Foren wie willmott.com. Eine zentrale Anlaufstelle (populäre Webseite) für Matlab + Finance sehe ich nach einer kurzen Googlesuche allerdings auch nicht.

Share this post


Link to post
DerKlammeSparer
Posted

Sind solche Fragen für dieses Forum zu speziell? Wo findet man solche Sachen am besten raus?

Evtl. solltest du dir mal klar werden, was deine Probleme sind.

 

Du sollst offensichtlich irgendwas in Matlab machen, wozu es wohl ziemlich hilfreich wäre, damit schonmal gearbeitet zu haben. Keine Ahnung, ob das ein guter Einstieg ist, aber es schaut halbwegs vernünftig aus: Matlab Tutorial.

Ohne das programmiertechnische Verständnis dürfte es sehr schwer werden, deine Aufgabe umzusetzen. In deiner Angabe ist beispielsweise nur eine Codezeile umgebrochen worden. Aber wenn du das nicht erkennen kannst, würde ich mir schleunigst obiges Tutorial zu eigen machen. Ein Matlabforum ist übrigens hier zu finden, da wird dir bei Bedarf sicherlich geholfen.

 

 

Für den Rest hast du einen Betreuer, der deine erste Anlaufstelle sein sollte.

Share this post


Link to post
100
Posted

Für den Rest hast du einen Betreuer, der deine erste Anlaufstelle sein sollte.

 

Danke für die Tutorial-PDF, die war wirklich gut!

Ansonsten habe ich noch die "Tutorials" auf Mathworks.de gemacht, aber ich fand das überhaupt nicht hilfreich.

 

Und einen Betreuer habe ich leider nicht. Man wird leider komplett allein gelassen und ich hab keine Idee wie das gehen soll.

 

Ich muss nun einen "Protective Put" `programmieren`. Aber ich habe kein MatLab Verständnis, das über die Tutorials hinausgeht.

 

Weiß jemand welche Funktionen man bei MatLab für einen Protective Put benutzt?

Share this post


Link to post
Schinzilord
Posted

Für den Rest hast du einen Betreuer, der deine erste Anlaufstelle sein sollte.

 

Danke für die Tutorial-PDF, die war wirklich gut!

Ansonsten habe ich noch die "Tutorials" auf Mathworks.de gemacht, aber ich fand das überhaupt nicht hilfreich.

 

Und einen Betreuer habe ich leider nicht. Man wird leider komplett allein gelassen und ich hab keine Idee wie das gehen soll.

 

Ich muss nun einen "Protective Put" `programmieren`. Aber ich habe kein MatLab Verständnis, das über die Tutorials hinausgeht.

 

Weiß jemand welche Funktionen man bei MatLab für einen Protective Put benutzt?

 

Max-Funktion? :)

 

Was ist denn ein Protective Put schon? Eine Wertuntergrenze, die am Anfang etwas kostet. eine Versicherung halt.

 

Black-Scholes könntest dir auch noch selbst in Matlab hinschreiben.

Danach ein paar Kursverläufe simulieren, und sobald dein Put im Geld ist, gleicht er weitere Verluste deiner Aktien aus.

Immer interessant: Put-Call Parität

Call + Strike/(1 + r_riskfree) = Aktie + Put

Rechte Seite ist dein Protective Put...

Share this post


Link to post
DerKlammeSparer
Posted

Und einen Betreuer habe ich leider nicht. Man wird leider komplett allein gelassen und ich hab keine Idee wie das gehen soll.

 

Ich bin von irgendeiner wissenschaftlichen Arbeit/ Übung ausgegangen, da gibt's ja immer irgendeine Art von "Ansprechpartner". In welchem Rahmen wird dir denn diese Aufgabe gestellt?

 

 

Ich muss nun einen "Protective Put" `programmieren`. Aber ich habe kein MatLab Verständnis, das über die Tutorials hinausgeht.

 

Weiß jemand welche Funktionen man bei MatLab für einen Protective Put benutzt?

 

Ich habe keine Ahnung von Protective Puts, aber anhand von ein paar Grundfunktionen sollte sich das doch realisieren lassen. Hast du verstanden, wie die Dinger arbeiten? Wenn ja, dann Schritt für Schritt implementieren und konkrete Fragen stellen. Dann kann dir sicher irgendjemand was Schlaues dazu schreiben. Wenn nicht, dann setz' dich da nochmal dran. Wenn du die Logik verstanden hast, ist die konkrete Realsierung ja erstmal von Matlab unabhängig, weil du ja dann konkrete Aufgaben umsetzen kannst. (z.B. "wann muss ein Kauf/ Verkauf getriggert werden", "welche Daten gebe ich ein, welche gebe ich aus" usw.).

 

=> überleg dir, was ein Protective Put wann in welchen Situationen machen muss und überleg' dir anschließend, mit welchen Funktionen sich das machen lässt (bin mir relativ sicher, dass die aus dem Tutorial reichen).

Share this post


Link to post
Schinzilord
Posted

Den Link wirst du bestimmt schon gefunden haben:

http://www.quantzone.org/?p=238

 

Sonst stelle ich mir vor als Aufgabe:

 

Implementieren Sie in Matlab eine CPPI und Protective Put Strategie und zeigen Sie anhang der historischen Daten des RexP und des DAX der letzten 10 Jahre die Wirksamkeit der Strategien.

Ermittelt Sie hierzu in einem Backtest für die ersten 7 Jahre die optimalen Parameter (z.B. wieviel Prozent unterhalb des aktuellen Kurses soll der Strike liegen?) und wenden Sie diese Parameter in einem out-of-sample Test auf die verbleibenden 3 Jahre an.

 

Oder:

Implementieren Sie eine CPPI und Protective Put Strategie innerhalb einer Monte-Carlo-Simulation unter der Annahme einer Standardnormalverteilung basierend auf historischen Daten für Renditen / Volatilitäten des DAX und RexP der vergangenen 3 Jahre. Ermitteln Sie für verschiedene Parameter die Verteilungsfunktionen der Endrenditen und Sharperatios der beiden Strategie innerhalb 5000 Monte-Carlo Durchläufe.

Bewerten Sie die beiden Strategien im Hinblick auf ihre praktische Durchführbarkeit, auf ihre Transaktions-, Implementierung- und Opportunitätskosten.

Share this post


Link to post
100
Posted · Edited by 100

Also konkrete Fragen, schrittweise.

 

Erstmal grundlegend ein Protective Put- man kauft zusätzlich zu einer Aktie vorsichtshalber einen Put auf dieselbe. Wenn der Wert der Aktie fällt, steigt der Put (ggf.) in gleichem Maße und so verhindert man Verlust, wenn aber der Preis der Aktie steigt, dann verliert der Put zwar seinen Wert, was aber nur dazu führt, dass man sozusagen seine kleine Risikoprämie verliert, darüber hinaus partizipiert man dann weiter unbegrenzt an Wertsteigerungen der Aktie.

 

1. Frage: Was soll MatLab da jetzt überhaupt ausrechnen? Es wurde doch überhaupt keine Mathematische Frage aufgeworfen.

 

Ich muss auf jeden Fall irgendwie eine Simulation machen, z.B. möglich anhand eines Random Walks, was, wenn ich es richtig verstehe bedeutet, einfach zufallsgenerierte Zahlen von MatLab erzeugen lassen.

Gleichzeitig habe ich in einem Beispiel aber stehen, dass für die CPPI in einem Beispiel zwei historische Zeitreihen verwendet worden seien und zwar die Monatsendstände der DAX- und REX- Performanceindices. Diese Daten für Januar 1967 bis Juni 2013.

 

2. Frage: Das beides schließt sich gegenseitig aus, oder? Entweder lasse ich MatLab Zufallszahlen per RandomWalk generieren oder ich nehme historische Stände der Indizes, richtig?

In dem Fall würde ich, um ein bisschen Programmierkenntnis zu erlangen, vielleicht beides machen. Einmal RandomWalk, einmal historische Daten.

 

Random Walk programmieren versuche ich grad mit Hilfe der MatLab-Hilfe zu schaffen, aber wie mache ich das mit den historischen Daten?

3. Frage: Wie mache ich einen RandomWalk bzw. wie lasse ich MatLab Zahlen erzeugen, die in diesem Kontext Sinn machen?

 

4. Frage: Wenn ich jetzt in zwei Spalten einer Excel Datei die Monatsendstände von Dax und Rex Performanceindex habe - wie kriege ich die dann in MatLab?

 

5. Frage: Wenn ich nun Zeitreihen habe, einmal fiktiv, einmal historisch- was mache ich dann damit?

Ein Protective Put heißt einen Put zur Aktie kaufen- wie soll ich das in eine Simulation machen?

Share this post


Link to post
DerKlammeSparer
Posted

So macht das doch schon deutlich mehr Sinn....

 

1. Frage: Was soll MatLab da jetzt überhaupt ausrechnen? Es wurde doch überhaupt keine Mathematische Frage aufgeworfen.

Keine Ahnung, vermutlich einmal mit und einmal ohne Absicherung. Und dann halt den Vorteil aufzeigen oder nachweisen, dass die Strategie unter irgendwelchen Umständen völlig nutzlos ist.

 

2. Frage: Das beides schließt sich gegenseitig aus, oder?

Nein, du schreibst eine Funktion. Der ist es doch völlig egal, was für Daten sie bekommt. Ob die jetzt historisch wirklich existieren oder per Zufall erzeugt wurden, interessiert doch die Funktion nicht, solange du sie sinnvoll gestaltet hast => welchen Input hat deine Funktion?

 

3. Frage: Wie mache ich einen RandomWalk bzw. wie lasse ich MatLab Zahlen erzeugen, die in diesem Kontext Sinn machen?

Google "Matlab Zufallszahlen". Deine Fragen sind da eher: wie schaffe ich es, mit den unterschieldichen Zahlentypen (int, double usw) zurechtzukommen.

 

4. Frage: Wenn ich jetzt in zwei Spalten einer Excel Datei die Monatsendstände von Dax und Rex Performanceindex habe - wie kriege ich die dann in MatLab?

Google "Matlab Excel" => http://www.mathworks...ef/xlsread.html

 

5. Frage: Wenn ich nun Zeitreihen habe, einmal fiktiv, einmal historisch- was mache ich dann damit?

Ein Protective Put heißt einen Put zur Aktie kaufen- wie soll ich das in eine Simulation machen?

Überleg dir doch erstmal, was die Simulation können muss. Welche Schritte soll sie durchlaufen, was soll am Anfang passieren, was am Ende.

 

Deinen Put kauft/ verkauft dir deine Funktion doch dann automatisch während deiner Simulation, wenn du die Funktion korrekt ausgestaltet hast => was löst einen Kauf oder Verkauf aus? Vermutlich macht es grundsätzlich auch Sinn, deiner Funktion einen Parameter mitzugeben, ob die Strategie genutzt werden soll oder nicht.

Share this post


Link to post
100
Posted · Edited by 100

Okay, dann muss ich als allererstes, würde ich sagen, das mit dem Ziel der Funktion klären.

 

Eine Funktion, soweit ich bisher verstanden habe, ist so aufgebaut:

 

function [Outputs] = namederfunktion [inputs]

 

 

Das Ziel soll der ganzen Sache soll nun sein, sagen wir mal, die Rendite einer Geldanlage zu berechnen und zwar einmal ohne und außerdem einmal mit Protective Put, sodass man am Ende sagen kann, ob ein Protective Put etwas nützt.

 

d.h. Man sollte ein Startkapital definieren, sagen wir einfach 1000€. Und dann annehmen, dass es in den DAX investiert wurde und einmal, dass es in den REX investiert wurde.

 

Wie lasse ich MatLab die Variable Startkapital elementweise mit allen Zahlen der Matrix der DaxPermance nacheinander multiplizieren ??

 

Dann lässt man MatLab ausrechnen, wie sich das Kapital entwickelt hat im DAX, wie es sich entwickelt hat im REX, vllt auch 50/50 auf beide und diese drei Varianten ohne Put.

Und dann das gleiche nochmal MIT Put, dann kann man vergleichen, ob die Renditen besser waren mit Put. so ungefähr?

 

 

------------

Was ich jetzt grad schonmal hinbekommen habe, ist, die Daten aus Excel einzulesen und ihnen Variablennamen zuzuteilen. Ich habe nun eine Variable DAXperform und REXperform, die jeweils die Monatsperformances über Jahre als Vektor enthalten.

 

Nun müsste ich vermutlich eine Variable als Startkapital definieren und sie dann der Reihe nach mit allen Zahlen des jeweiligen Vektors (Dax oder Rex) multiplizieren lassen, oder ?

Wenn das gemacht wurde, weiß man, wieviel Kapital am Ende aus dem Startkapital geworden wäre, dies dann auch in eine Variable speichern.

Dann hätte ich den Part ohne Put (und ohne 50/50 Aufteilung) schonmal. Richtig so?

------------

 

Aber wie nun einen Protective Put hinzufügen??

 

Man muss vom Startkapital einen Teil abziehen, weil der für den Put verwendet wird. Und wenn der Kurs steigt, muss dieser Teil einfach wegfallen. Wenn der Kurs aber sinkt, muss dieser Teil irgendwie mehr werden. Mit welcher Funktion könnte ich sowas machen?

Share this post


Link to post
DerKlammeSparer
Posted

Okay, dann muss ich als allererstes, würde ich sagen, das mit dem Ziel der Funktion klären.

 

Eine Funktion, soweit ich bisher verstanden habe, ist so aufgebaut:

 

function [Outputs] = namederfunktion [inputs]

 

Ich will dich mit der Funktion übrigens nicht auf eine falsche Fährte führen... das geht auch ohne, aber es ist programmiertechnisch grundsätzlich üblich, verschiedene Aufgabenbereiche in unterschiedliche Funktionen aufzuteilen. Das erhöht die Übersichtlichkeit und schafft leichte Erweiterbarkeit. Schau dir doch mal das Beispiel an, das Schinzilord gepostet hat. Der hat bspw. eine eigene Funktion geschrieben, um die Daten aus Excel gleich in den richtigen Variablen zu haben. In dem Beispiel siehst du übrigens auch, wie man elementweise multipliziert ( "." vor den Operator). Da findest du sicher noch jede Menge andere Tipps und Herangehensweisen.

 

 

Dann lässt man MatLab ausrechnen, wie sich das Kapital entwickelt hat im DAX, wie es sich entwickelt hat im REX, vllt auch 50/50 auf beide und diese drei Varianten ohne Put.

Und dann das gleiche nochmal MIT Put, dann kann man vergleichen, ob die Renditen besser waren mit Put. so ungefähr?

Hört sich für mich nachvollziehbar an, aber ich kenne die Aufgabenstellung nicht.

 

Aber wie nun einen Protective Put hinzufügen??

 

Man muss vom Startkapital einen Teil abziehen, weil der für den Put verwendet wird. Und wenn der Kurs steigt, muss dieser Teil einfach wegfallen. Wenn der Kurs aber sinkt, muss dieser Teil irgendwie mehr werden. Mit welcher Funktion könnte ich sowas machen?

Die "wenns" deuten doch eindeutig darauf hin, dass du mit Bedingungen ("if") arbeiten solltest. Jetzt wäre doch die nächste Frage, WANN musst du überprüfen, ob sich der Kurs geändert hat? Wie lässt sich das realisieren?

Share this post


Link to post
100
Posted · Edited by 100

In dem Beispiel siehst du übrigens auch, wie man elementweise multipliziert ( "." vor den Operator). Da findest du sicher noch jede Menge andere Tipps und Herangehensweisen.

 

 

Das mit dem Multiplizieren meinte ich anders: Ich will nicht, dass jedes Element mit dem Skalar multipliziert wird, sodass man am Ende eine neue Matrix hat, sondern ich will den einen Skalar erst mit dem ersten Element malnehmen, dann mit dem zweiten Element, dann mit dem dritten Element usw. sodass am Ende nur ein einziger Skalar rauskommt, der das Endkapital darstellt.

Das meinte ich mit Elementweise alle nacheinander multiplizieren.

 

Den Rest muss ich erstmal wieder eben durcharbeiten...

Share this post


Link to post
DerKlammeSparer
Posted

Das mit dem Multiplizieren meinte ich anders: Ich will nicht, dass jedes Element mit dem Skalar multipliziert wird, sodass man am Ende eine neue Matrix hat, sondern ich will den einen Skalar erst mit dem ersten Element malnehmen, dann mit dem zweiten Element, dann mit dem dritten Element usw. sodass am Ende nur ein einziger Skalar rauskommt, der das Endkapital darstellt.

Das meinte ich mit Elementweise alle nacheinander multiplizieren.

 

Den Rest muss ich erstmal wieder eben durcharbeiten...

 

Per for-Schleife alle Elemente der Matrix durchgehen...

Share this post


Link to post
ZappBrannigan
Posted · Edited by ZappBrannigan

Das mit dem Multiplizieren meinte ich anders: Ich will nicht, dass jedes Element mit dem Skalar multipliziert wird, sodass man am Ende eine neue Matrix hat, sondern ich will den einen Skalar erst mit dem ersten Element malnehmen, dann mit dem zweiten Element, dann mit dem dritten Element usw. sodass am Ende nur ein einziger Skalar rauskommt, der das Endkapital darstellt.

Das meinte ich mit Elementweise alle nacheinander multiplizieren.

Startkapital * prod(DaxPerformance)

 

(wenn du die Zwischenschritte haben möchtest, kannst du cumprod() verwenden)

Share this post


Link to post
100
Posted · Edited by 100

 

Startkapital * prod(DaxPerformance)

 

(wenn du die Zwischenschritte haben möchtest, kannst du cumprod() verwenden)

 

Das habe ich versucht! Aber dann kam er als Endkapital auf null. Lag daran, dass in den DAXPerformances auch zwischendrin mal +-0% waren.

Dann habe ich versucht alle Nullen auszulassen, mit folgendem Befehl, den ich aus dem Internet habe:

 

"DAXPerformONull = DAXPerform(DAXPerform~=0)

GesEntwDAX = (cumprod(DAXPerformONull,1) +1 )"

 

Also ich habe die Variable DAXPerform, wo die Nullen noch sind, schließe diese aus (ist der Befehl richtig??) und nenne es dann DAXPerformONull für ohne Nullen.

 

Aber lasse ich dies nun durchlaufen, so kommt als Ergebnis immer nur 1 raus. (wegen +1, lasse ich die weg kommt 0 raus, warum? ich hab die nullen doch ausgeschlossen)

 

 

EDIT: Achso, ich glaub ich weiß warum. Die Zahlen in der Excel Datei sind alle 0,08 0,02 -0,01 usw usw. das heißt, das Produkt wird kleiner und kleiner und nähert sich am Ende Null an.

Also müsste ich vermutlich ERST alle +1 rechnen und nicht am Ende... okay, versuche ich

Share this post


Link to post
100
Posted

Ich bekomme immer als Ergebnis eine e-Zahl. Kann man das auch einfach normal anzeigen lassen? Ich glaube es bedeutet ja das richtige.

 

GesEntwDAX = prod(DAXPerformONull2)

 

führt zu

 

GesEntwDAX =

 

10.7418

 

aber Startkapital mal GesEntwDAX ergibt dann (Startkapital ist 1000)

 

EndKDAX =

 

1.0742e+04

Share this post


Link to post
ZappBrannigan
Posted · Edited by ZappBrannigan

Ich bekomme immer als Ergebnis eine e-Zahl. Kann man das auch einfach normal anzeigen lassen? Ich glaube es bedeutet ja das richtige.

round(EndKDAX) sollte funktionieren (sich an die wissenschaftliche Notation zu gewöhnen schadet aber auch nicht ;) - Tipp: Das Komma in diesem Fall einfach vier stellen nach rechts schieben).

Share this post


Link to post
100
Posted · Edited by 100

So, ich habe nun auf einfache Weise programmiert, dass man 100 Startkapital hat und als Ergebnis angezeigt bekommt, was man für ein Endkapital hat, wenn man es im genannten Zeitraum in den DAX oder wenn man es in den REX investiert hätte. Das Ergebnis wird als Text ausgegeben.

 

Jetzt muss ich mal den Put einbauen.

 

Ich soll das also mit einer if-Schleife machen...

Nun muss ich erstmal darauf kommen, wie die gestaltet werden muss.

 

Also es muss grundsätzlich vom Startkapital etwas abgezogen werden. Dann könnte geguckt werden, ob das erste Element in der Performance-Matrix positiv ist oder negativ.

Obwohl man kann doch einen Put einfach behalten, auch wenn der Preis der Aktie steigt, hat der Put immer noch Zeitwert und die Möglichkeit, dass in der nächsten Periode der Kurs fällt.

Wie soll ich das denn modellieren??

Die Puts sind ja fiktiv, also haben keine festgelegte Laufzeit. Muss ich willkürlich festlegen, 'jeder Put im Modell läuft nur x Monate' oder so ?

 

EDIT: oder sollte ich es so modellieren, dass einfach JEDEN Monat ein Put Gekauft wird, der nur für denselben Monat gilt? Macht das Sinn? Da könnte ich mich jedenfalls rantasten programmiertechnisch...

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...