Wir tummeln uns am Aktienmarkt

Warum Du diesen Beitrag lesen solltest

Vielleicht interessieren Dich Aktien. Vielleicht findest Du aber einfach auch nur spannend, welche Einsichten möglich sind, wenn Märkte transparent und Daten dazu verfügbar sind? Dann bietet Dir dieser Beitrag einen ersten Einblick. Wie sonst auch ist der Ansatz, die Analysen selbst durchzuführen.

Unsere heutige Fragestellung

Wir haben uns bisher öffentlich verfügbare Daten im Licht „einer großen Sache“ angesehen: Klimawandel oder Demokratie. Heute wollen wir die Füße auf dem Boden behalten und über Aktien sprechen.

Hältst Du Aktien und möchtest wissen, wie sie „performen“? Wenn Du „Adidas Aktie“ in Deine Suchmaschine eingibst, dann siehst Du sofort Stand  und Entwicklung. Das ist sehr praktisch. Aber vielleicht möchtest Du sehen, wie sich Deine Aktie im Vergleich zum DAX oder zu anderen Werten entwickelt hat. So fragt zum Beispiel der Economist vom 25. März 2023, ob Adidas jemals zu Nike wird aufschließen können und nimmt in dem Artikel „No Yeezy answers“ dabei auch die Aktie von Puma mit in den Blick.

Wenn Du „richtig“ mit Aktien handelst, dann kennst Du für solche Vergleiche vermutlich einige einschlägige Seiten, die auch weitergehende Analysen erlauben. Aber warum solltest Du Dich damit auseinandersetzen und all die Tricks und Kniffe lernen, wenn Du Dir mit wenigen Zeilen Code Deine eigenen Analysewerkzeuge bauen kannst?

Der Vorteil von DIY („do it yourself“):

Du bist von niemandem abhängig.

Du weißt genau, was Du tust.

Du bleibst flexibel.

Wie wir vorgehen wollen

Wir verwenden wieder die Skript-, Berichts- und Webapplikationssprache R, die speziell für die Handhabung von Daten, Texten und zunehmend auch Bildern entwickelt wurde. Du kannst Sie kostenfrei installieren und hast so auf einen Schlag Zugang zu den neuesten und besten Analysewerkzeugen.

Der Vorteil unserer Herangehensweise hier liegt vor allem auch darin, dass Du Deine Analysen ständig aktuell halten kannst: einmal „Run“ gedrückt und schon lädt Dein Skript wieder die neuesten Daten von Adidas, Puma, Nike und welchem Unternehmen oder Aktienindex auch immer herunter und wertet sie für Dich aus. Wenn Du möchtest, dann kannst Du Dein Skript auch in eine Webapplikation einbauen und schon sind Deine Werkzeuge und Analysen allgemein zugänglich.

Diese Möglichkeiten hast Du auch mit Python. Ich verwende R.

Ein Beispiel von dem, was möglich ist

Bevor wir loslegen, möchte ich Dir ein Beispiel dafür zeigen, was sich mit frei verfügbaren Aktiendaten machen lässt.  Diese App erlaubt Dir, den Aktienstand und die Entwicklung verschiedener Unternehmen zu vergleichen. Dabei habe ich eine gewisse Auswahl getroffen, die hier jedoch keine Rolle spielt. Schau es Dir einfach an: so etwas ist möglich.

Warum wir heute auf ausgefeilte Werkzeuge verzichten

Mit Aktiendaten lassen sich Einsichten gewinnen und mit Einsichten fällst Du bessere Entscheidungen. Also sind Aktiendaten etwas wert. Interessanterweise stellt Yahoo Finance trotzdem sämtliche Aktiennotierungen umsonst zur Verfügung. Mit dem Paket „quantmod“ kannst Du Dir die Daten einfach beschaffen und zahlreiche ausgebuffte Analysen durchführen (siehe dazu die Doku). Wir wollen darauf verzichten und nutzen quantmod nur, um an die Daten heranzukommen.

Falls Du ein Trader bist, der sich mit mit diesem Paket ausgetüftelte Analysen zurechtlegt, dann mag Dir mein heutiges Vorgehen wie eine Verschwendung vorkommen: all diese tollen Werkzeuge einfach links liegen lassen! Ich ziehe in diesem Blog jedoch, egal mit welchen Daten, „einfach immer den gleichen Stiefel durch“. Es geht mir nicht um das Traden sondern um die Analyse von frei verfügbaren Daten. Beim nächsten Mal werden wir uns wieder andere Daten anschauen und wollen möglichst analog vorgehen können.

Falls Du ein Trader bist oder werden möchtest und Du Dir nach diesem Beitrag R herunterlädst und Dich in quantmod einfuchst, dann lass es mich wissen, denn dann, aber nicht nur dann, hat sich dieser Beitrag gelohnt.

Woher Aktiendaten nehmen wenn nicht stehlen?

Ehrlich gesagt weiß ich gar nicht, ob Du Dir Aktiendaten auch anderweitig bequem herunterladen und dann mit Excel analysieren kannst. Mit R ist es jedenfalls sehr einfach:

# Verwendete Pakete
library(tidyverse)
library(quantmod)

# Diese Kurse wollen wir uns beschaffen:
aktie <- "ADS.DE"        # Adidas an der Frankfurter Börse
index <- "^GDAXI"       # DAX

# Wir wollen ständig 20 Jahre zurückblicken können:
end <- Sys.Date()-1     # gestern
start <- end - 365*20   # vor 20 Jahren


Stock <- getSymbols(aktie, 
                    from = start, 
                    to = end, 
                    auto.assign = FALSE)

Das war’s eigentlich schon. Wenn Du Dir das so erzeugte xts-Objekt anschaust, dann siehst Du, dass Tag für Tag Werte für Open, High, Low, Close, Volume und „Adjusted“ erfasst werden. Das ist für Aficionados. Wir verzichten hier darauf. In der praktischen „Pipe“-Logik tun wir folgendes (ich beschreibe den folgenden Code, und lese dabei die Pipe „%>%“ als „dann“):

  • Nimm die Daten in der Variablen „Stock“
  • Dann mache daraus einen data.frame
  • Dann erstelle aus den Zeilennamen eine Spalte
  • Dann lass alle na-Einträge fallen
  • Dann wähle nur Spalte 1 und 5.

Wir vergeben zudem handliche Spaltennamen und verwandeln die Datumsspalte vom Typ „character“ in den Typ „date“, sodass wir damit rechnen können. Diese beiden Zeilen habe ich nicht in die „Pipe“ mit eingefügt. Ich halte meinen Code so für lesbarer.

Jetzt können wir uns die Entwicklung des Aktienkurses anschauen. Falls Du ggplot kennst, dann möchte ich hinzufügen: es gibt Gründe, die Du später erkennen wirst, warum ich die Definition der Daten und der Ästhetik (aes) in geom_point() hereinnehme und nicht bei ggplot() belasse:

Werte <- Werte %>% 
         as.data.frame() %>% 
         rownames_to_column() %>% 
         drop_na() %>% 
         select(1, 5)



colnames(Stock) <- c("Datum", "Adidas")
Stock$Datum <- as.Date(Stock$Datum)

ggplot() +
  geom_point(data = Stock,
             aes(x = Datum, y = Adidas))

Aktienkurs der letzten 20 Jahre von Adidas. Stand: 31. März 2023

Du magst Dich vielleicht fragen, was Anfang 2015 passiert ist, dass die Aktie in der Folge „so abgeht“. Karsten Rorsted wurde jedenfalls erst am 1. Oktober 2016 zum CEO berufen – und am 22. August wurde bekannt gegeben, dass sich das Unternehmen wieder einvernehmlich von ihm trennt. Diese beiden Ereignisse habe ich über die roten Linien dargestellt.

Solche Überlegungen sind natürlich der Grund, warum man sich überhaupt Aktienkurse anschaut. Heute geht es mir aber nicht um das Thema, also den Einfluss, den Führungskräfte auf die Unternehmensbewertung haben, sondern darum, wie Du diese Fragen sehr einfach selbst stellen und quantitativ bewerten kannst.

Wie entwickelt sich Adidas im Vergleich zum DAX?

Die Daten für den DAX kannst Du Dir analog zu den Code-Zeilen oben beschaffen. Und nun kommt das Problem: Wir möchten beide Kursverläufe gemeinsam darstellen, um zum Beispiel die Frage zu beantworten: schlägt Adidas den Dax? Dafür wird üblicherweise die Entwicklung relativ zu einem gewissen „Einstiegsdatum“ betrachten: Wenn Du am 1. Oktober 2016 Adidas und den DAX für je 100 Euro gekauft hättest, wo würden diese Papiere heute stehen? So wählt der oben zitierte Artikel des Economist dieses Datum, eben das Einstiegsdatum von Karsten Rorsted bei Adidas, für seinen Vergleich zwischen Adidas, Puma und Nike.

Schauen wir uns das einmal an. Ich zeige die Rechnung für Adidas und lasse alle Formatierungsanweisungen wie Farbzuweisungen der Einfachheit halber weg. Da ich die Daten erst in „geom_line“ definiere kann ich die beiden Datensätze in den Plot „hineinaddieren“:

RefDatum <- "2016-10-04"
RefAdidas <- Stock %>% 
             filter(Datum == RefDatum) %>% 
             pull(Adidas)

Stock$Performance <- Stock$Adidas/RefAdidas
ggplot() +
   geom_line(data = Index,
             aes(x = Datum, y = Performance)) +
   geom_line(data = Stock,
             aes(x = Datum, y = Performance))

Vergleich von Adidas (blau) und Dax (grau). Referenzdatum: 4. Oktober 2016.

Adidas hat den Dax also zwischenzeitlich um Längen geschlagen und seinen Wert im Vergleich zum 4. Oktober 2016 im Januar 2020 und im Juli und August 2021 sogar mehr als verdoppelt, ist dann aber deutlich zurückgefallen und steht Ende März 2023 wieder in etwa beim Ausgangspunkt vom Oktober 2016.

Keine Taschenspielertricks!

Wenn Du in der Strategieabteilung eines aktiennotierten Unternehmens sitzt, dann kennst Du vermutlich folgendes Dilemma: „Lasst uns vielleicht nicht den 4. Oktober sondern lieber den 10. November 2016 als Referenzdatum nehmen“. Der 1. Oktober war ein Samstag und der 4. Oktober war der erste Handelstag nach Rorsteds Einstieg. Der Kurs stand an dem Tag bei 157,40 Euro. Am 10. November stand er dagegen bei 131,70 Euro, also ganze 16% tiefer. Die Entwicklung relativ zum 10. November fällt also entsprechend positiver aus…

Ich verwende Aktienanalysen nicht, um meine eigene Rendite bei bestimmten Papieren zu berechnen und wieviel ich gemacht hätte, wenn ich am Tag X stattdessen einen anderen Wert gekauft hätte. Mir geht es eher um „Ursache-Wirkung“. Und dabei kann ich solche „Taschenspielertricks“ nicht gebrauchen und möchte meine Analyse auch nicht der täglichen Schwankung eines Wertes unterwerfen. Deshalb verwendet die oben schon gezeigte App auch nicht nicht ein Referenzdatum sondern einen Referenzzeitraum, über den Du mitteln kannst. Startpunkt und Dauer des Zeitraums kannst Du in der App bequem wählen und auch unter verschiedenen Vergleichsindizes auswählen. So kannst Du überprüfen, wie robust Deine Aussagen gegen die Wahl von diesen Randbedingungen ist.

Ich halte solche Betrachtungen zu Robustheit einer Aussage für unerlässlich, wenn Du Hypothesen zu Ursache-Wirkungsbeziehungen anhand von Aktienkursen betrachten möchtest.

Wie das für Adidas, Puma und Nike aussieht, kannst Du mit der App jedenfalls selbst überprüfen. Den Code, wie Du statt eines Referenzdatums einen Referenzzeitraum verwenden kannst, möchte ich Dir hier noch mitgeben:

# Wir definieren eine "Baseline":
blstart <- as.Date("2016-10-01")
blend <- blstart + 60     # Referenzzeitraum von 60 Tagen

BLAdidas <- Stock %>% 
            filter(Datum >= blstart) %>% 
            filter(Datum <= blend) %>% 
            pull(Adidas) %>% 
            mean()

„Nice to have“?

Jetzt stelle Dir vor, Du sitzt in der Strategieabteilung von Adidas und hast so ein Skript. Jeden Monat kannst Du es laufen lassen und nach wenigen SEKUNDEN hast Du die Übersicht, wo Konkurrenz und „Markt“ stehen. Es ist vielleicht nicht jedes Mal spannend genug, um dafür einen Termin beim Vorstand zu kriegen. Aber vielleicht möchten sie die Graphik irgendwann in den Standardunterlagen des Monatsrückblicks sehen – denn ein Blick auf den Markt und die Konkurrenz schadet ja nicht.

Und dann erstellst Du eine App, die jederzeit auf Knopfdruck genau das tut…

Wäre das vielleicht etwas?
Aber das ist eine andere Geschichte.
Und die musst Du ein andermal selbst erzählen.