Beim Berechnen finanzieller Ziele wird häufig wie beispielsweise auf der sehr informativen Seite Finanzfluss angenommen, es gäbe eine jährlich feste Rendite. In den suggerierten Renditebereichen um die 5%-7% pro Jahr erdreiste ich mich, die Renditeerwartung ohne schwankende Aktieninvestments für unrealistisch zu halten. Daher habe ich mich oberflächlich mit der Simulation von Aktienkursen beschäftigt und darauf basierend einen Sparplanrechner umgesetzt, dessen Simulationsaspekt der Gegenstand dieses Artikels ist. Der Leser sei jedoch gewarnt. Ich habe weder ein Buch zur Rate gezogen noch eine Koryphäe konsultiert, da ich nur zum Spaß hier bin. Meine durch Frontalunterricht erlangten Kenntnisse der Finanzmathematik beschränken sich auf die Zinseszinsrechnung der Mittelstufe. Im Wesentlichen ähneln die erzeugten Kursverläufe der Meinung meines naiven Auges nach den Verläufen historischer Kurse. Mehr dazu findet sich am Ende des Artikels. Im Übrigen sei die Anwesenheit mathematischer Formeln gefeiert 🥳.

Bevor ich hier weiter über ein Finanzthema schreibe, weise ich darauf hin, dass ich so gar kein Finanzexperte bin, sondern nur eine Privatperson, die sich für ihre eigene Altersvorsorge und andere Finanzthemen interessiert, daher solides Halbwissen anhäuft und dabei auf seinen mehr oder weniger gesunden Menschenverstand vertraut und hin und wieder einen Rechner programmiert.

Wie in einem älteren Artikel über Dividenden sei $W_{m}\in\mathbb{R_{\geq 0}}$ der Kurswert eines Wertpapiers im Monat $m$. Das Ziel der Simulation ist eine Folge $W_0, \dots, W_M$ zu erzeugen, deren Chart dem eines Indexkurses oder Aktienkurses ähnelt. Als Ähnlickeitskriterium verwenden wir die Einschätzung meines Laienauges.

Zufallsläufe mit variabler Varianz

Unter zu stark vereinfachter Annahme fester Rendite ist der konstante monatliche Renditefaktor $\rho_{\rm month}$ definiert durch $$ W_{m} \rho_{\rm month} = W_{m + 1} $$ Wir möchten einen Kursverlauf simulieren, der ohne Beschränkung der Allgemeinheit jedes Jahr im Erwartungswert um $5$% steigt, also mit dem Faktor $1.05$ multipliziert wird. Für feste Rendite führt $$ 1.05 W_{m}=W_{m + 12} $$ zu $$ 1.05 W_{m}=W_{m+12}=W_{m + 11}\rho_{\rm month}=(W_{m + 10}\rho_{\rm month}) \rho_{\rm month} =W_{m} (\rho_{\rm month})^{12} $$ $$ \Rightarrow \rho_{\rm month}=\sqrt[12]{1.05} $$ Für unsere Simulation verwenden wir keinen konstanten Faktor $\rho_{\rm month}$ sondern Realisierungen $r_m$ einer normalverteilten Zufallsvariable $R_{\rm month}\sim\mathcal{N}(\rho_{\rm month}, \sigma)$ mit Erwartungswert $\rho_{\rm month}$ und Standardabweichung $\sigma$. Im RL*neudeutsch für das echte Leben, aus dem Englischen von real life ist die Volatilität*Ein Maß für die Schwankungswilligkeit des Kurses. Genauer weiß ich es auch nicht. des Kurses entlang der Zeitachse, die irgendwie mit der Standardabweichung $\sigma$ der Zufallsvariable $R_{\rm month}$ verbandelt ist, nicht konstant. Daher nehmen wir keine feste Standardabweichung $\sigma$ an sondern variieren diese. Aus Mangel an Kreativität und Verstand und da die Welt sowieso immer und überall und zu jedem Zeitpunkt normalverteilt ist, damit man in ihr besser rechnen kann, bestimmen wir $\sigma_m$ als monatliche Realisierung einer weiteren Zufallsvariablen $S\sim\mathcal{N}(v, v)$. Wir nehmen $v$ einfach als Maß für Volatilität. Eine Volatilität nahe $0$ impliziert eine hohe Wahrscheinlichkeit für ein $\sigma_m$ nahe $0$, so dass der monatliche Renditefaktor $r_m$ nahe ihres Erwartungswerts $\rho_{\rm month}$ liegt. Dabei ist $r_m$ die Realisierung einer jeden Monat neuen Zufallsvariablen $R_m\sim\mathcal{N}(\rho_{\rm month}, \sigma_m)$,

Wir schauen uns im folgenden Plot an, wie das aussehen kann. Die drei Graphen mit sim im Namen sind unabhängige Simulationen. Der Graph mit no vola im Namen zeigt 5% Rendite pro Jahr ohne Volatilität. Das könnte beispielsweise der Verlauf eines Tagesgeldkonto oder gebührenfreien*Schenkelklopfer! Bausparers mit 5% Zinsen sein. Die Daten der x-Achse sind reine Willkür.

Mein Laienauge findet das schon ganz nett. Aber irgendwie fehlt noch etwas.

Zum Vergleich folgen historische Indexverläufe die alle bei einem initialen Investment von einem Euro starten.

Im RL gibt es Zeiträume höherer Volatilität und Zeiträume niedrigerer Volatilität. Kursverläufe sehen oft nicht einfach nach Exponentialfunktionen mit etwas Rauschen aus, sondern haben beispielsweise auch mal längere Seitwärts- oder Abwärtsbewegungen wie im Plot gut erkennbar.

Die geglättete Vola sieht ungefähr aus wie in echt

Um meinem Laienauge ein wenig mehr Befriedigung zu verschaffen, wenden wir einen Medianjahresglätter auf die Realisierungen $\sigma_m$ an. Genauer gesagt bestimmen wir $r_m$ als Realisierung von $R^\prime_m\sim\mathcal{N}(\rho_{\rm month}, \sigma^\prime_m)$ wobei $$ \sigma^\prime_m = \rm{median}(\sigma_{m-12},\dots,\sigma_m). $$ Das führt zu folgendem Plot.

Schon besser!

Bisher haben wir nur Simulationen besprochen, die markovsche Zufallsläufe sind. Das heißt, der Kursänderungsfaktor $r_m$ im Monat $m$ ist unabhängig von den vergangenen Monaten $\lbrace m_i:0\leq i \leq m-1\rbrace$. Dadurch haben unsere Simulationen eine sehr große Varianz in den finalen Kurswerten am Ende ihres Zeitraums.

Markovsch oder nicht markovsch?

Falls einem die markovsche Annahme zu unromantisch ist, haben wir*ChatGPT und ich eine Option implementiert, die den Erwartungswert nicht fest auf $\rho_{\rm month}$ setzt, sondern abhängig von der bisherigen Rendite anpasst. Die Verteilungen der verschiedenen Monate unterscheiden sich nicht mehr nur durch ihre Standardabweichung, sondern auch durch ihren Erwartungswert. Dabei berechnen wir den Erwartungswert $\mu_m$ durch $$ \mu_m = \frac{(\prod_{i=1}^m r_i)^{\frac{1}{M-m}}}{(\rho_{\rm month})^{\frac{m}{M-m}}} $$ wobei $M$ die Anzahl aller Monate bezeichnet, die wir simulieren wollen. Wir passen also unseren Erwartungswert immer so an, dass er unerwartetes Verhalten der Vergangenheit auszugleichen versucht. Entsprechende Plots zeigen im Folgenden, dass die Enden der Simulationen deutlich näher am volatilitätsfreien Kursverlauf liegen.

Vielleicht willst du auch mal probieren?

Alle besprochenen Simulationsschritte sind in unserem Sparplanrechner implementiert. Die Optionen zu den Zeiträumen ähnlicher Volatilität findet sich unter Simulate price development->Advanced->Times of similar volatility. Erwartungswerte ausgleichen kann man durch Deselektion der Option Simulate price development->Advanced->Return independent of previous returns. Übrigens ist die verwendete Random-Walk-Funktion von ChatGPT gereviewed worden. Das freundliche AI Tool aus dem Internet hat mich darauf hingewiesen, dass Geometric Brownian Motion (GBM) ein genauerer Weg sei, Kursverläufe zu simulieren.

Zitat ChatGPT:

While the random walk function you provided can give you a basic idea of how stock prices might evolve, GBM provides a more accurate and nuanced representation of the dynamics seen in real financial markets, especially when considering continuous changes, volatility, and drift.

Dennoch sei die Genauigkeit für die Zwecke eines Sparplanrechners ausreichend flüstert mir mein Laienauge zu. Dabei achtet es darauf zum Ende des Satzes mit der Stimme in die Tiefe zu tendieren um mehr Selbstbewusstsein auszustrahlen. Der Sparplanrechner sollte während Anspar- und Entnahmephasen aussagekräftiger für das simulierte Szenario sein als eine feste jährliche Rendite. Viel Spaß beim Simulieren.