Aktieninformationen mit Python in Excel speichern | Schritt für Schritt

Wie du die Bibliothek yfinance allgemein und für eine Aktie benutzt kannst du in meinem Artikel hier nachlesen.

Sicher hast du mehr als nur eine Aktie und auch mehr als nur einen Wert den du im Auge behalten willst.
Eine schöne Übersicht in Excel wäre sicher hilfreich, oder?

Genau darum soll es in dem Beitrag gehen.
Wir sammeln ausgewählte Aktieninformationen zusammen.
Anschließend werden sie übersichtlich in einer Excel Datei dargestellt.

Am Ende des Artikels hast du also eine Excel Datei mit einer Aktie pro Zeile.
In den Spalten finden sich dann die von dir gewählten Informationen zu der jeweiligen Aktie.

Du weißt nicht, was du mit den Dateien machen sollst?
Hier findest du Hilfe.

Welche Informationen zur Aktie brauche ich?

Zuerst bleiben wir mal bei dem Beispiel aus dem vorherigen Artikel.
Als Erstes rufst du die Statistiken auf Yahoo Finance auf.

Natürlich kannst du deine eigenen Werte festlegen.
Was ich mir bei Aktien jedoch immer wieder gerne ansehe, sind die folgenden:

  • 52-Wochen-Hoch
  • 52-Wochen-Tief
  • Unternehmenswert/EBITDA
  • Durchschnittliche Dividendenrendite über 5 Jahre
  • Eigenkapitalrendite
  • Schulden / Equity (gesamt) (mrq)

Wo finde ich die Fundamentaldaten zur Aktie?

Falls du yfinance noch nicht installiert hast, ist jetzt der Zeitpunkte dafür:

%pip install yfinance

Damit ist festgelegt, welche Werte dich interessieren.

Jetzt geht es dran die Werte auch zu finden.

Im letzten Teil hast du zur Preisabfrage schon das Attribut info benutzt.
Genau das wird dir Daten liefern.
Also einmal das JSON abfragen und herauslesen wie die Attribute heißen.

import yfinance, json

microsoft = yfinance.Ticker('MSF.DE')
print(json.dumps(microsoft.info, indent=4))

Um die Werte zu finden, versuche ich einfach markante Punkte aus den Namen zu nehmen. Oft sind die Attributnamen ähnlich.

Zum Beispiel suche ich nach ebitda in der Ausgabe und finde damit enterpriseToEbitda. Übersetzt: Unternehmen zu EBITDA. Also genau das was ich suche.

WertAttribut
52-Wochen-HochfiftyTwoWeekHigh
52-Wochen-TieffiftyTwoWeekLow
Unternehmenswert / EBITDAenterpriseToEbitda
Durchschnittliche Dividendenrendite über 5 JahrefiveYearAvgDividendYield
EigenkapitalrenditereturnOnEquity
Schulden / Equity (gesamt) (mrq)debtToEquity

Fundamentaldaten aus der API auslesen

Jetzt weißt du, welche Attribute du brauchst.
Damit sollte es ein Leichtes sein die Ausgabe auf das Wesentliche zu beschränken.

Leserlich wäre auch noch schön.
Dafür sammelst du einfach alle Daten in einem Dictionary zusammen.
Das lässt sich am Ende wieder schön über das json Modul formatiert ausgeben.

import yfinance, json

microsoft = yfinance.Ticker('MSF.DE')
microsoft_info = microsoft.info
data = {
    '52-Wochen-Hoch': microsoft_info['fiftyTwoWeekHigh'],
    '52-Wochen-Tief': microsoft_info['fiftyTwoWeekLow'],
    'Unternehmenswert / EBITDA': microsoft_info['enterpriseToEbitda'],
    'Durchschnittliche Dividendenrendite über 5 Jahre': microsoft_info['fiveYearAvgDividendYield'],
    'Eigenkapitalrendite': microsoft_info['returnOnEquity'],
    'Schulden / Equity (gesamt) (mrq)': microsoft_info['debtToEquity']
}
print(json.dumps(data, indent=4))

Der Aufruf microsoft.info schickt die Anfrage an Yahoo.

Natürlich brauchen wir nicht für jedes Attribut eine volle Abfrage!
Also speicherst du das Ergebnis einfach in einer Variablen microsoft_info.
Aus der Variablen lassen sich dann bequem die einzelnen Werte auslesen.

Bei meinem Eintrag Durchschnittliche Dividendenrendite über 5 Jahre ist der Umlaut kaputt.
Das liegt an dem json Modul und kann ganz einfach in Ordnung gebracht werden.

Dafür fügst du einfach das zusätzliche Attribut ensure_ascii=False mit an.
Mehr zu ensure_ascii kannst du am Ende von diesem Artikel lesen.
Da hab ich das Problem etwas genauer beschrieben.

import yfinance, json

microsoft = yfinance.Ticker('MSF.DE')
microsoft_info = microsoft.info
data = {
    '52-Wochen-Hoch': microsoft_info['fiftyTwoWeekHigh'],
    '52-Wochen-Tief': microsoft_info['fiftyTwoWeekLow'],
    'Unternehmenswert / EBITDA': microsoft_info['enterpriseToEbitda'],
    'Durchschnittliche Dividendenrendite über 5 Jahre': microsoft_info['fiveYearAvgDividendYield'],
    'Eigenkapitalrendite': microsoft_info['returnOnEquity'],
    'Schulden / Equity (gesamt) (mrq)': microsoft_info['debtToEquity']
}
print(json.dumps(data, indent=4, ensure_ascii=False))

Fundamentaldaten mehrerer Aktien sammeln

So. Jetzt hast du die Daten zu einer Aktie.
Auf Knopfdruck bekommst du sofort alle relevanten Informationen. Du musst dich also nicht mehr durch die Webseite wühlen.

In der Regel ist dein Watchlist aber nicht nur eine Aktie lang.
Als Nächstes konzentrieren wir uns also darauf beliebig viele Aktien abfragen zu können.

Dafür legst du dir erstmal eine Liste mit allen Symbolen an, die du abfragen möchtest.

# Microsoft, AMD, Apple, RWE
symbols = ['MSF.DE', 'AMD.DE', 'APC.DE', 'RWE.DE']

Anschließend musst du die gesammelten Aktiendaten auch speichern.
Damit du die Daten später auch wiederfindest, würde ich dafür ein Dictionary verwenden.

Falls du die Daten nur speichern möchtest, findest du am Ende eine Alternative.

Als Schlüssel kannst du das Symbol verwenden. Die gesammelten Daten geben dann den Wert.

Also gehst du mit einer for-Schleife durch die Liste der Symbole und sammelst die Daten ein.

import yfinance, json

# Microsoft, AMD, Apple, RWE
symbols = ['MSF.DE', 'AMD.DE', 'APC.DE', 'RWE.DE']
stock_data = {}

for symbol in symbols:
  stock = yfinance.Ticker(symbol)
  info = stock.info
  data = {
      'Aktueller Preis': info['regularMarketPrice'],
      '52-Wochen-Hoch': info['fiftyTwoWeekHigh'],
      '52-Wochen-Tief': info['fiftyTwoWeekLow'],
      'Unternehmenswert / EBITDA': info['enterpriseToEbitda'],
      'Durchschnittliche Dividendenrendite über 5 Jahre': info['fiveYearAvgDividendYield'],
      'Eigenkapitalrendite': info['returnOnEquity'],
      'Schulden / Equity (gesamt) (mrq)': info['debtToEquity']
  }
  stock_data[symbol] = data

print(json.dumps(stock_data, indent=4, ensure_ascii=False))

Damit hast du ein Dictionary mit dem Ticker Symbol als Schlüssel und den Daten die du möchtest als Wert.
Du hast also sofort einen Überblick über die wichtigen Daten.

Aktien Daten mit openpyxl in eine Excel Datei schreiben

Zugegeben: Ich bin kein Fan von Excel.

Dennoch wird es von vielen Leuten benutzt.
Und für bestimmte Einsatzzwecke hat es auch seine Daseinsberechtigung.

Deshalb möchte ich dir hier noch zeigen wie du deine Daten jetzt auch in ein Excel Blatt bekommst.

Vielleicht gefällt dir die Übersicht besser, oder du willst damit weiter arbeiten.
Die Gründe können unterschiedlich sein.

Um mit Excel zu arbeiten, eignet sich die Bibliothek openpyxl sehr gut.

Als Erstes musst du die Bibliothek natürlich wieder installieren:

%pip install openpyxl

Excel Datei erzeugen

Excel arbeitet mit einzelnen Arbeitsblättern – Sheets.
Genauso ist es auch in openpyxl.

Zuerst erzeugst du ein Workbook.
Das Workbook ist praktisch deine Excel Datei.

In dem Workbook hast du jetzt mehrere Möglichkeiten.
Excel erzeugt im Standard schon ein leeres Arbeitsblatt beim Erzeugen einer Datei.
Mit .active kannst du auf das Arbeitsblatt zugreifen und es einfach benutzen.
Optional kannst du auch den Namen von dem Arbeitsblatt ändern.
Dafür benutzt du das title Attribut.

Du kannst aber auch ein eigenes Arbeitsblatt erzeugen.
Dafür erzeugst du mit .create_sheet(„NAME“) dein eigenes Arbeitsblatt. Den Namen kannst du frei wählen. Er erscheint dann unten in Excel in den Reitern bzw. Arbeitsblättern.

Dann musst du nur noch deine Daten einfügen.
Abschließend wird das Arbeitsblatt mit der Funktion .save() gespeichert.
Als Übergabe an save() gibst du den Pfad, einschließlich Dateiname, an unter dem du die Datei speichern möchtest.

import openpyxl

# Neue Datei erzeugen
workbook = openpyxl.Workbook()
# Das Standard Arbeitsblatt
sheet = workbook.active
# Name ändern
sheet.title = 'Erstes Arbeitsblatt'
# Dein eigenes Arbeitsblatt
sheet = workbook.create_sheet('Mein Arbeitsblatt')

# hier kommen deine Daten

# Datei speichern
workbook.save('test.xlsx')

Aktiendaten anordnen

Am liebsten hätte ich die Daten in dem Format später in der Excel Datei:

SymbolAktueller Preis52-Wochen-Hoch52-Wochen-TiefUnternehmenswert / EBITDADurchschnittliche Dividendenrendite über 5 JahreEigenkapitalrenditeSchulden / Equity (gesamt) (mrq)
MSF.DE256262.25170.2822.9691.510.4707957.947
AMD.DE89.93103.259.4635.5760.662689.299
APC.DE125.6213390.118.9931.271.27125210.782
RWE.DE32.3338.6528.394.5210.06636000430.069

Das gibt einen schönen Überblick über die Zahlen.

Dafür schreiben wir erstmal die Kopfzeile in die Datei:

import openpyxl

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = 'Erstes Arbeitsblatt'

header = ['Symbol', 'Aktueller Preis', '52-Wochen-Hoch', '52-Wochen-Tief', 'Unternehmenswert / EBITDA', 'Durchschnittliche Dividendenrendite über 5 Jahre', 'Eigenkapitalrendite', 'Schulden / Equity (gesamt) (mrq)']
sheet.append(header)

workbook.save('test.xlsx')

Damit hast du jetzt eine Excel Datei mit dem Namen test.xlsx.
Darin findest du ein Arbeitsblatt mit dem Namen Erstes Arbeitsblatt.
Und darin wiederum ist die Kopfzeile enthalten.

Das Arbeitsblatt (sheet) kannst du dir hier wie eine Liste von Listen vorstellen.
Du kannst es dir auch als Excel Arbeitsblatt vorstellen.
Mit jedem .append() fügst du eine Zeile in dein Arbeitsblatt ein.

Jede Zeile ist wiederum eine Liste.
Und jeder Eintrag in dieser „Zeile-Liste“ stellt eine Spalte dar.

Also Zeile 1, Spalte 1 (Zelle A1) ist „Symbol“.
Zeile 1, Spalte 2 (Zelle B1) ist „Aktueller Preis“.
Und so weiter.

Zellen lassen sich auch direkt belegen.
Willst du also in Zeile 1, Spalte 3 (Zelle C1) den Wert „52-Wochen-Hoch“ schreiben, kannst du das auch so erledigen:

sheet['C1'] = '52-Wochen-Hoch'

Da du hier aber bereits die gesamte Kopfzeile hast, brauchst du dir die Mühe nicht zu machen.
Übergib einfach die ganze Kopfzeile an dein Arbeitsblatt.

Alles klar?
Dann weiter an die Daten!

Aktieninformationen in die Excel Datei schreiben

import openpyxl

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = 'Erstes Arbeitsblatt'

header = ['Symbol',	'Aktueller Preis',	'52-Wochen-Hoch', '52-Wochen-Tief',	'Unternehmenswert / EBITDA',	'Durchschnittliche Dividendenrendite über 5 Jahre',	'Eigenkapitalrendite',	'Schulden / Equity (gesamt) (mrq)']
sheet.append(header)

for key, value in stock_data.items():
  line = []
  line.append(key)
  line.extend(list(value.values()))
  sheet.append(line)

workbook.save('test.xlsx')

Die Daten sind jetzt in einem großen Dictionary.
Das macht es für Python zwar einfach und übersichtlich, für Excel ist das Format aber nicht geeignet.

Also musst du das Dictionary jetzt einmal in eine flache Struktur überführen.

Um das Dictionary zu durchlaufen, rufst du .items() auf (Zeile 10).
Python liefert dir zu einem Dictionary dann immer den Schlüssel (key) und den Wert (value)

Der Schlüssel ist dein Symbol, der Wert ist das ganze Dictionary mit den Aktiendaten.

Du musst also einzelne Zeilen zusammen bauen.
Dafür nimmst du dir dein Symbol und fügst es zu einer neuen Liste hinzu (Zeilen 11 + 12).

Anschließend willst du das Dictionary zufügen, dass in den Werten drin steckt.

Du brauchst hier aber nicht das ganze Dictionary.
Du brauchst nur die Werte daraus.

value ist dein Dictionary und mit .values() bekommst du die Werte aus dem Dictionary.
Also value.values() (Zeile 13).

Python liefert hier aber nicht direkt eine Liste. Du bekommst ein Werte-Objekt, dass die Dictionary-Werte repräsentiert.
Um die jetzt in eine Liste umzuwandeln, musst du noch einmal das BuiltIn list() verwenden.

Mit list(value.values()) (Zeile 13) erhältst du eine Liste mit deinen Aktiendaten.
Entnommen aus den Werten deines Dictionary.

Geschafft!
Jetzt musst du die entstandene Zeile nur noch an dein Arbeitsblatt hängen (Zeile 14).
Und zum Schluss die Datei speichern (Zeile 16).

Alternative als Liste

Ein Dictionary hat den Vorteil, dass du immer die Schlüssel-Wert-Zuordnung hast.
Das macht späteren Zugriff auf die Daten deutlich einfacher und übersichtlicher.

Es kann aber auch sein, dass du gar nicht weiter damit arbeiten willst.
Brauchst du die Daten einfach nur in einer Excel-Datei, spar dir die Arbeit mit dem Dictionary.

Dann nimm einfach eine Liste:

# %pip install yfinance openpyxl

import yfinance, json, openpyxl

# Microsoft, AMD, Apple, RWE
symbols = ['MSF.DE', 'AMD.DE', 'APC.DE', 'RWE.DE']
stock_data_liste = []

for symbol in symbols:
  print(f'Daten für {symbol} werden abgefragt...')
  stock = yfinance.Ticker(symbol)
  info = stock.info
  data = []
  data.append(symbol)
  data.append(info['regularMarketPrice'])
  data.append(info['fiftyTwoWeekHigh'])
  data.append(info['fiftyTwoWeekLow'])
  data.append(info['enterpriseToEbitda'])
  data.append(info['fiveYearAvgDividendYield'])
  data.append(info['returnOnEquity'])
  data.append(info['debtToEquity'])

  stock_data_liste.append(data)

print(json.dumps(stock_data_liste, ensure_ascii=False))
print('Daten in Excel Datei schreiben...')

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = 'Erstes Arbeitsblatt'

header = ['Symbol',	'Aktueller Preis',	'52-Wochen-Hoch', '52-Wochen-Tief',	'Unternehmenswert / EBITDA',	'Durchschnittliche Dividendenrendite über 5 Jahre',	'Eigenkapitalrendite',	'Schulden / Equity (gesamt) (mrq)']
sheet.append(header)

for stock in stock_data:
  sheet.append(stock)

workbook.save('test.xlsx')

print('Fertig!')

Bei einer Liste wirfst du direkt nur die Werte in die Liste, die du haben möchtest.
Eine Zeile besteht dann nur noch aus den Zahlen in der richtigen Reihenfolge.

In der Excel Datei landen sie wieder mit der Kopfzeile. So hast du dann wieder die Übersicht.

Zur weiteren Arbeit sind sie nur nicht gut geeignet.
Du müsstest immer wieder kontrollieren welche Position welche Bedeutung hat.

Das macht das Dictionary durch die Zuordnung übersichtlicher.

Zusammenfassung

Mit der Bibliothek yfinance lassen sich Aktieninformationen schnell und unkompliziert sammeln.
Du brauchst einfach nur das Symbol und schon geht’s los.

Wie viele Aktien du abfragst, ist unerheblich. Erweiter einfach deine Liste symbols und schon werden die zusätzlichen Aktien abgefragt.
Der Rest vom Code muss nicht angepasst werden.

Durch openpyxl kannst du die Daten dann unkompliziert in eine Excel Datei schreiben.
Dabei arbeitest du ganz genau so, wie du es mit Excel gewohnt bist.
In Dateien, Arbeitsblättern, Zeilen, Spalten und Zellen.

Ich kann dir nicht sagen, ob das Sammeln besser in einer Liste oder einem Dictionary gemacht wird.
Das hängt davon ab, was du mit den Daten machen möchtest.

Weiter damit arbeiten?
Dann ist ein Dictionary besser geeignet.

Einfach nur sammeln und in eine Excel Datei schreiben?
Dann ist die Liste der einfachere Weg.

Ich habe dir hier beide Versionen gezeigt und erläutert.
Damit kannst du selbst entscheiden, welcher Weg für dich der bessere ist.
Ein „richtig“ oder „falsch“ gibt es nicht.

Vollständiger Code

%pip install yfinance openpyxl

import yfinance, json, openpyxl

# Microsoft, AMD, Apple, RWE
symbols = ['MSF.DE', 'AMD.DE', 'APC.DE', 'RWE.DE']
stock_data = {}
stock_data_liste = []


for symbol in symbols:
  print(f'Daten für {symbol} werden abgefragt...')
  stock = yfinance.Ticker(symbol)
  info = stock.info

  # Aktieninformationen als Dictionary
  data = {
      'Aktueller Preis': info['regularMarketPrice'],
      '52-Wochen-Hoch': info['fiftyTwoWeekHigh'],
      '52-Wochen-Tief': info['fiftyTwoWeekLow'],
      'Unternehmenswert / EBITDA': info['enterpriseToEbitda'],
      'Durchschnittliche Dividendenrendite über 5 Jahre': info['fiveYearAvgDividendYield'],
      'Eigenkapitalrendite': info['returnOnEquity'],
      'Schulden / Equity (gesamt) (mrq)': info['debtToEquity']
  }
  stock_data[symbol] = data

  # Aktieninformationen als Liste
  data = []
  data.append(symbol)
  data.append(info['regularMarketPrice'])
  data.append(info['fiftyTwoWeekHigh'])
  data.append(info['fiftyTwoWeekLow'])
  data.append(info['enterpriseToEbitda'])
  data.append(info['fiveYearAvgDividendYield'])
  data.append(info['returnOnEquity'])
  data.append(info['debtToEquity'])

  stock_data_liste.append(data)

print(json.dumps(stock_data_liste, ensure_ascii=False))
print(json.dumps(stock_data, indent=4, ensure_ascii=False))
print('Daten in Excel Datei schreiben...')

workbook = openpyxl.Workbook()
sheet_dictionary = workbook.active
sheet_dictionary.title = 'Daten als Dictionary'

sheet_liste = workbook.create_sheet('Daten als Liste')

header = ['Symbol',	'Aktueller Preis',	'52-Wochen-Hoch', '52-Wochen-Tief',	'Unternehmenswert / EBITDA',	'Durchschnittliche Dividendenrendite über 5 Jahre',	'Eigenkapitalrendite',	'Schulden / Equity (gesamt) (mrq)']
sheet_dictionary.append(header)
sheet_liste.append(header)

for key, value in stock_data.items():
  line = []
  line.append(key)
  line.extend(list(value.values()))
  sheet_dictionary.append(line)

for stock in stock_data_liste:
  sheet_liste.append(stock)

workbook.save('test.xlsx')

print('Fertig!')
Scroll to Top