Python ist heute eines der wichtigsten Werkzeuge für Datenanalyse, Reporting und quantitative Finanzmodelle. Diese Einführung zeigt, warum die Sprache im Finanzbereich so verbreitet ist, wo ihre Grenzen liegen – und wie Sie mit wenigen Zeilen Code erste Analysen zu Schweizer Aktien durchführen.
Warum überhaupt Python?
Wer heute eine Stellenanzeige für eine quantitative Funktion bei einer Schweizer Bank, in der Vermögensverwaltung oder bei einem FinTech liest, stösst sehr oft auf einen Begriff: Python. Innerhalb weniger Jahre hat sich die Sprache von einem Werkzeug technisch versierter Analysten zu einem Standard in Datenanalyse, Risikomodellierung, Reporting und quantitativer Forschung entwickelt.
Die Gründe dafür sind pragmatisch. Python ist:
- gut lesbar, weil die Syntax vergleichsweise nahe an natürlicher Sprache liegt,
- kostenlos und Open Source, ohne Lizenzgebühren und mit einer grossen internationalen Community,
- vielseitig, von kleinen Excel-Ersatzskripten bis zu produktiven Datenpipelines,
- stark im Ökosystem, mit ausgereiften Bibliotheken für Tabellen, Statistik, Visualisierung, maschinelles Lernen und Finanzmathematik.
Im Finanzbereich wird Python unter anderem für Risk-Reports, Backtests, Portfolioanalysen, Datenbereinigung, regulatorisches Reporting und Prototypen von Handels- oder Pricing-Modellen eingesetzt. Im Alltag vieler Analysten ist Python vor allem deshalb attraktiv, weil sich wiederkehrende Auswertungen reproduzierbar und deutlich robuster durchführen lassen als in manuell gepflegten Excel-Dateien.
Diese Einführung richtet sich an Leserinnen und Leser, die mit Excel und Finanzkennzahlen vertraut sind, aber noch nie oder erst wenig programmiert haben. Am Ende des Artikels sollten Sie verstehen, wie Python aufgebaut ist, welche Bibliotheken im Finanzkontext wicht sind und wie Sie historische Kursdaten von Schweizer Aktien auswerten können.
Was ist Python?
Python wurde Anfang der 1990er-Jahre von Guido van Rossum entwickelt. Der Name bezieht sich nicht auf die Schlange, sondern auf die britische Komikergruppe Monty Python. Das passt zur Philosophie der Sprache: Python sollte mächtig sein, aber nicht unnötig kompliziert wirken.
Drei Eigenschaften sind zentral:
- Python ist interpretiert. Sie schreiben Code und führen ihn direkt aus. Es braucht keinen separaten Kompilierungsschritt wie bei C++.
- Python ist dynamisch typisiert. Variablen müssen nicht vorab als Zahl, Text oder Tabelle deklariert werden. Python erkennt selbst, um welche Art von Wert es sich handelt, sobald der Code ausgeführt wird.
- Python erzwingt Lesbarkeit. Einrückungen sind Teil der Sprache. Das wirkt am Anfang ungewohnt, sorgt aber dafür, dass Code meist klar strukturiert bleibt.
Relevant ist heute ausschliesslich Python 3. Python 2 wird seit Anfang 2020 nicht mehr unterstützt und sollte für neue Projekte nicht mehr verwendet werden. Für die Beispiele in diesem Artikel genügt eine aktuelle Python-3-Version. In der Praxis empfiehlt sich für Finanzbibliotheken häufig eine Version, die breit von pandas, NumPy, SciPy und anderen Paketen unterstützt wird – also nicht zwingend die allerneueste Version am Tag der Veröffentlichung.
Die ersten Schritte: Python-Grundlagen
Variablen und Datentypen
In Python weisen Sie Werte mit einem Gleichheitszeichen zu:
kurs_nestle = 95.20 # Kommazahl: float
anzahl_aktien = 100 # ganze Zahl: int
waehrung = "CHF" # Text: string
ist_aktie = True # Wahrheitswert: bool
position_wert = kurs_nestle * anzahl_aktien
print(position_wert, waehrung)
# Ausgabe:
# 9520.0 CHF
Das #-Zeichen leitet einen Kommentar ein. Alles dahinter wird von Python ignoriert. Gerade in Finanzmodellen sind Kommentare wichtig, weil sie Annahmen dokumentieren: etwa den verwendeten Zinssatz, die Tageszählkonvention oder die Datenquelle.
Listen, Tupel und Dictionaries
Finanzdaten kommen selten einzeln. Drei Sammlungstypen sollten Sie kennen:
# Liste: geordnet und veränderbar
smi_aktien = ["Nestlé", "Roche", "Novartis", "UBS", "ABB"]
# Tupel: geordnet und unveränderbar
eur_chf = ("EUR", "CHF", 0.96)
# Dictionary: Schlüssel-Wert-Zuordnung
portfolio = {
"NESN.SW": 50, # 50 Aktien Nestlé
"ROG.SW": 20, # 20 Roche-Genussscheine
"NOVN.SW": 30, # 30 Aktien Novartis
}
print(portfolio["NESN.SW"])
# Ausgabe: 50
Ein Dictionary ist das natürliche Gegenstück zu einer zweispaltigen Excel-Tabelle: links steht der Schlüssel, rechts der zugehörige Wert.
Kontrollstrukturen
Mit if, for und while steuern Sie den Ablauf eines Programms. Ein einfaches Beispiel:
kurs = 92.50
kaufkurs = 95.20
if kurs < kaufkurs:
print("Aktuell im Verlust")
elif kurs == kaufkurs:
print("Break-even")
else:
print("Im Gewinn")
Eine Schleife über alle Positionen im Portfolio sieht so aus:
for ticker, anzahl in portfolio.items():
print(f"{ticker}: {anzahl} Stück")
Der Buchstabe f vor dem Text macht daraus einen f-String. Damit lassen sich Variablen direkt in Text einsetzen, ähnlich wie bei einer Excel-Verkettung, aber deutlich lesbarer.
Funktionen
Wiederkehrende Berechnungen kapseln Sie in Funktionen. Ein klassisches Finanzbeispiel ist der Zinseszins:
def zinseszins(kapital, zinssatz, jahre):
"""Berechnet den Endwert bei jährlicher Verzinsung."""
return kapital * (1 + zinssatz) ** jahre
endwert = zinseszins(10_000, 0.03, 10)
print(f"Endwert: {endwert:.2f} CHF")
# Ausgabe:
# Endwert: 13439.16 CHF
Der Unterstrich in 10_000 ist reine Lesehilfe. Python erlaubt ihn, um grosse Zahlen besser lesbar zu machen.
Das Gegenstück dazu ist der Barwert einer künftigen Zahlung:
def barwert(zukunftswert, zinssatz, jahre):
"""Diskontiert eine zukünftige Zahlung auf heute."""
return zukunftswert / (1 + zinssatz) ** jahre
print(f"{barwert(13_439.16, 0.03, 10):.2f} CHF")
# Ausgabe:
# 10000.00 CHF
Mit Variablen, Sammlungen, Bedingungen, Schleifen und Funktionen ist das Fundament gelegt. Der eigentliche Nutzen für Finanzthemen entsteht aber durch Bibliotheken.
Welche Python-Bibliotheken im Finanzbereich wichtig sind
Pythons Stärke liegt nicht nur in der Sprache selbst, sondern vor allem in den Paketen, die Sie dazuladen können. Für Finanzanwendungen sind insbesondere diese Bibliotheken relevant:
| Bibliothek | Zweck |
|---|---|
| NumPy | Schnelle Berechnungen mit Zahlenarrays und Matrizen |
| pandas | Tabellen, Zeitreihen, Datenbereinigung – für viele Anwender das „Excel von Python“ |
| Matplotlib | Klassische Diagramme und Visualisierungen |
| Plotly | Interaktive Charts und Dashboards |
| yfinance | Unoffizieller Abruf historischer Marktdaten über Yahoo Finance |
| SciPy | Wissenschaftliches Rechnen, Optimierung, Statistik |
| statsmodels | Ökonometrie, Regressionen, Zeitreihenmodelle |
| scikit-learn | Maschinelles Lernen, Klassifikation, Prognosemodelle |
| QuantLib | Zinskurven, Derivatebewertung, fortgeschrittene Finanzmathematik |
| PyPortfolioOpt | Portfolio-Optimierung nach Markowitz und verwandten Verfahren |
Installiert wird ein Paket typischerweise einmalig mit pip:
pip install pandas numpy matplotlib yfinance
Im Code wird es anschliessend importiert:
import pandas as pd
import numpy as np
Für den Einstieg reichen vier Pakete: pandas, NumPy, Matplotlib und yfinance. Alles Weitere kann später dazukommen.
Praxis: Schweizer Aktien analysieren
Nun wird es konkret. Wir laden historische Kursdaten bekannter Schweizer Titel, berechnen Renditen und Risiken und visualisieren die Entwicklung. Die Yahoo-Finance-Symbole vieler Schweizer Aktien enden auf .SW:
- Nestlé:
NESN.SW - Roche Genussschein:
ROG.SW - Novartis:
NOVN.SW - UBS Group:
UBSG.SW - ABB:
ABBN.SW
Kursdaten herunterladen
import yfinance as yf
import pandas as pd
nestle = yf.Ticker("NESN.SW")
historie = nestle.history(period="3y", auto_adjust=True)
print(historie.tail())
Die Ausgabe ist eine pandas-Tabelle, ein sogenannter DataFrame. Typische Spalten sind Open, High, Low, Close und Volume. Jede Zeile steht für einen Handelstag.
Wichtig: yfinance ist ein praktisches Lernwerkzeug, aber keine offizielle, von Yahoo garantierte Datenschnittstelle. Für private Analysen und Beispiele ist es nützlich; für professionelle, auditierbare oder regulatorische Auswertungen sollten geprüfte Datenquellen verwendet werden.
Renditen und Volatilität berechnen
import numpy as np
# tägliche logarithmische Renditen
renditen = np.log(historie["Close"] / historie["Close"].shift(1)).dropna()
# Annualisierung mit 252 Handelstagen pro Jahr
mittlere_rendite = renditen.mean() * 252
volatilitaet = renditen.std() * np.sqrt(252)
print(f"Annualisierte Rendite: {mittlere_rendite:.2%}")
print(f"Annualisierte Volatilität: {volatilitaet:.2%}")
Zwei Konventionen stecken in diesen Zeilen:
- Logarithmische Renditen lassen sich über die Zeit addieren und sind bei kontinuierlicher Verzinsung mathematisch praktisch.
- 252 Handelstage pro Jahr sind eine verbreitete Faustregel für die Annualisierung täglicher Aktienrenditen.
Für langfristige Privatanalysen ist diese Näherung meist ausreichend. Für präzise professionelle Modelle muss die konkrete Börsenkalenderlogik berücksichtigt werden.
Mehrere Titel vergleichen
import yfinance as yf
import matplotlib.pyplot as plt
tickers = ["NESN.SW", "ROG.SW", "NOVN.SW", "UBSG.SW", "ABBN.SW"]
daten = yf.download(
tickers,
period="3y",
auto_adjust=True,
progress=False
)["Close"]
# Startwert auf 100 indexieren
indexiert = daten / daten.iloc[0] * 100
indexiert.plot(figsize=(10, 6))
plt.title("Ausgewählte Schweizer Aktien – Performance über drei Jahre")
plt.ylabel("Indexiert, Start = 100")
plt.xlabel("Datum")
plt.grid(True, alpha=0.3)
plt.legend()
plt.show()
Damit entsteht eine Performance-Grafik, wie sie in Excel zwar ebenfalls möglich wäre, dort aber deutlich mehr manuelle Schritte erfordert. Der Vorteil von Python liegt in der Wiederholbarkeit: Sobald der Code steht, lässt sich dieselbe Analyse jederzeit mit neuen Daten, anderen Titeln oder einem längeren Zeitraum ausführen.
Korrelationsmatrix
Welche Aktien bewegen sich ähnlich, welche eher unabhängig voneinander? Das misst die Korrelationsmatrix:
tagesrenditen = daten.pct_change().dropna()
korrelation = tagesrenditen.corr()
print(korrelation.round(2))
Werte nahe 1 stehen für starken Gleichlauf, Werte nahe 0 für geringe lineare Abhängigkeit, negative Werte für gegenläufige Bewegungen. Defensive Schwergewichte wie Nestlé, Roche und Novartis können in bestimmten Marktphasen ähnliche Muster zeigen; Bank- und Industriewerte wie UBS oder ABB reagieren oft stärker auf andere Faktoren. Das ist keine feste Regel, sondern eine empirische Frage – genau deshalb berechnet man die Korrelation statt sie nur zu vermuten.
Eine einfache Sharpe Ratio
Die Sharpe Ratio misst die erzielte Überrendite pro Einheit Risiko. Ein einfaches Beispiel:
# Platzhalter: risikofreier Zinssatz in CHF
# Für eine echte Analyse an SARON, Geldmarktrenditen oder passende Zinskurve anpassen.
risikofrei = 0.005
ueberrendite = tagesrenditen.mean() * 252 - risikofrei
risiko = tagesrenditen.std() * np.sqrt(252)
sharpe = ueberrendite / risiko
print(sharpe.round(2))
Der Wert 0.005 entspricht 0.5 Prozent und ist hier nur ein Platzhalter. In einer seriösen Analyse muss der risikofreie Zinssatz zur Währung, Laufzeit und zum Bewertungszeitpunkt passen. Für Schweizer-Franken-Analysen kommen je nach Fragestellung SARON, kurzfristige CHF-Geldmarktrenditen oder eine passende Zinskurve infrage.
Installation und Arbeitsumgebung
Damit Sie die Beispiele ausführen können, brauchen Sie eine Python-Umgebung. Drei Wege sind verbreitet.
1. Klassische Installation über python.org
Sie laden den offiziellen Installer herunter und installieren danach die benötigten Pakete über die Kommandozeile:
pip install pandas numpy matplotlib yfinance
Diese Variante ist schlank und nah am Standard. Für Einsteiger kann die Kommandozeile anfangs ungewohnt sein, langfristig lohnt sich das Verständnis aber.
2. Anaconda oder Miniconda
Anaconda und Miniconda sind Distributionen, die besonders im wissenschaftlichen Rechnen verbreitet sind. Sie erleichtern das Verwalten von Paketen und Umgebungen. Anaconda bringt sehr viele Pakete direkt mit; Miniconda ist schlanker und installiert nur, was Sie tatsächlich brauchen.
3. Notebooks im Browser
Für erste Versuche sind Google Colab oder lokal gestartete Jupyter Notebooks komfortabel. Sie schreiben Code, Text und Diagramme in einem Dokument. Genau diese Arbeitsweise ist in der Datenanalyse verbreitet, weil sie Berechnung und Erklärung verbindet.
Virtuelle Umgebungen
In der Praxis sollte jedes ernsthafte Projekt eine eigene Umgebung haben. Damit verhindern Sie, dass Paketversionen verschiedener Projekte einander stören. Typische Werkzeuge sind venv, conda oder moderne Paketmanager wie uv.
Für die ersten Gehversuche ist das nicht zwingend. Sobald Sie aber ein Modell speichern, weitergeben oder später reproduzieren wollen, sollten Sie die verwendeten Paketversionen festhalten.
Geeignete Editoren
Für den Einstieg eignen sich:
- JupyterLab für interaktive Analysen, Notebooks und Grafiken,
- Visual Studio Code für Skripte, grössere Projekte und sauberes Arbeiten mit Dateien,
- Google Colab für schnelle Experimente ohne lokale Installation.
Grenzen und Risiken von Python im Finanzbereich
Python ist mächtig, aber kein Allheilmittel. Gerade im Finanzkontext sollten Sie die Grenzen kennen.
Performance
Reiner Python-Code ist langsamer als C++, Rust oder Java. Solange Sie mit NumPy und pandas arbeiten, ist das meist unproblematisch, weil die rechenintensiven Teile intern in schnellen Sprachen implementiert sind. Langsam wird es, wenn Sie selbst geschriebene Python-Schleifen über sehr grosse Datenmengen laufen lassen.
Faustregel: Erst mit pandas und NumPy arbeiten. Wenn es wirklich zu langsam wird, kann man optimieren – etwa mit Vektorisierung, Numba, Cython oder einem ausgelagerten Performance-Kern in C++.
Datenqualität
Kostenlose Datenquellen sind praktisch, aber nicht fehlerfrei. Splits, Dividenden, Währungsumrechnungen, fehlende Handelstage oder nachträgliche Korrekturen können Resultate verzerren. Zudem sind viele kostenlose Schnittstellen nicht für professionelle Nutzung gedacht.
Für private Lern- und Plausibilitätsanalysen genügt das oft. Für Anlageberatung, regulatorische Berichte, Jahresabschlüsse, Risikomodelle oder institutionelle Entscheide braucht es belastbare, lizenzierte Datenquellen.
Reproduzierbarkeit
Ein Python-Notebook ist schnell erstellt, aber nicht automatisch reproduzierbar. Wer eine Analyse später nachvollziehen will, muss Datenstand, Paketversionen, Parameter und Annahmen dokumentieren.
In regulierten Umgebungen kommen zusätzlich Governance-Anforderungen hinzu: Code-Reviews, Tests, Modellvalidierung, Änderungsprotokolle und Freigaben. Python kann solche Prozesse unterstützen, ersetzt sie aber nicht.
Finanzielle Interpretation
Eine technisch korrekte Analyse ist noch keine gute Anlageentscheidung. Python berechnet Renditen, Korrelationen, Volatilitäten und Kennzahlen. Ob die Annahmen sinnvoll sind, ob die Datenqualität genügt und ob ein Modell wirtschaftlich plausibel ist, bleibt eine fachliche Frage.
Python im Vergleich zu anderen Werkzeugen
Python ist nicht die einzige Sprache im Finanzbereich. Die folgende Einordnung zeigt, wo Python stark ist – und wo andere Werkzeuge weiterhin ihre Berechtigung haben.
Excel und VBA
Vorteile: Excel ist überall verfügbar, schnell verständlich und für kleine Modelle sehr effizient. VBA kann wiederkehrende Excel-Arbeiten automatisieren.
Nachteile: Grosse Excel-Modelle sind schwer zu testen, schlecht zu versionieren und fehleranfällig. Ab einer gewissen Komplexität werden Nachvollziehbarkeit und Wartbarkeit zum Problem.
Fazit: Für Ad-hoc-Auswertungen bleibt Excel hervorragend. Für wiederholbare Datenanalysen, Backtests und grössere Modelle ist Python meist robuster.
R
Vorteile: R ist stark in Statistik, Ökonometrie und Visualisierung. In Forschung und akademischer Statistik ist R weiterhin sehr verbreitet.
Nachteile: Für produktive Software, Datenpipelines und allgemeine Automatisierung ist Python oft breiter einsetzbar.
Fazit: R bleibt sehr gut für Statistik. Python ist für viele Finanzteams attraktiver, weil es Analyse, Automatisierung und produktive Integration in einer Sprache verbindet.
C++
Vorteile: Sehr schnell, hardwarenah und geeignet für latenzkritische Systeme, Pricing-Engines oder rechenintensive Simulationen.
Nachteile: Deutlich höhere Einstiegshürde, längere Entwicklungszeiten und mehr technische Fehlerquellen.
Fazit: C++ ist richtig, wenn Geschwindigkeit entscheidend ist. Für Analyse, Prototyping und Reporting ist Python in der Regel effizienter.
Java und C#
Vorteile: Robust, gut typisiert und in grossen Bank-IT-Landschaften etabliert.
Nachteile: Weniger geeignet für exploratives Arbeiten mit Daten und schnelle analytische Experimente.
Fazit: Java und C# dominieren viele Backend-Systeme. Python ergänzt sie häufig als analytische Schicht.
Julia
Vorteile: Entwickelt für numerisches Rechnen, mit hoher Geschwindigkeit und einer Syntax, die Python-Anwendern teilweise vertraut wirkt.
Nachteile: Kleineres Ökosystem, weniger Stellenangebote und weniger etablierte Unternehmenspraxis.
Fazit: Julia ist interessant für rechenintensive Modelle. Wer heute breit einsetzbare Finanzkompetenz aufbauen will, fährt mit Python sicherer.
MATLAB
Vorteile: Stark in technischen und mathematischen Anwendungen, mit guten Toolboxen.
Nachteile: Lizenzkosten, geschlosseneres Ökosystem und in vielen modernen Quant-Teams weniger zentral als früher.
Fazit: MATLAB bleibt in einigen akademischen und technischen Bereichen relevant. Für neue Finanzanalyseprojekte ist Python meist die offenere Wahl.
Praktische Empfehlung für Finanzanwender
Wer nicht hauptberuflich programmiert, sollte Python nicht wie Informatik studieren, sondern problemorientiert lernen. Ein sinnvoller Lernpfad sieht so aus:
- Grundlagen verstehen: Variablen, Listen, Dictionaries, Schleifen, Funktionen.
- pandas lernen: Daten einlesen, filtern, gruppieren, zusammenführen.
- Finanzkennzahlen berechnen: Renditen, Volatilität, Drawdown, Korrelation, Sharpe Ratio.
- Visualisieren: Liniencharts, Balkendiagramme, Heatmaps.
- Reproduzierbarkeit verbessern: Projektordner, virtuelle Umgebung, gespeicherte Daten, dokumentierte Annahmen.
- Erst danach erweitern: Backtesting, Optimierung, maschinelles Lernen oder Derivatebewertung.
Das Ziel ist nicht, möglichst viele Bibliotheken zu kennen. Das Ziel ist, wiederkehrende Finanzfragen sauber, nachvollziehbar und wiederholbar zu beantworten.
Wie es weitergeht
Der beste Einstieg ist ein kleines eigenes Projekt. Öffnen Sie ein Notebook, kopieren Sie das Beispiel mit den Schweizer Aktien hinein und ändern Sie eine Variable: den Zeitraum, die Tickerliste oder den risikofreien Zinssatz. Danach ergänzen Sie Schritt für Schritt eigene Kennzahlen.
Mögliche nächste Projekte:
- ein Rendite- und Risiko-Dashboard für das eigene Depot,
- ein Vergleich von ETF-Kosten und historischer Entwicklung,
- ein einfacher Sparplanrechner,
- ein Backtest einer gleitenden-Durchschnitts-Strategie,
- eine Analyse von Dividenden, Drawdowns und Korrelationen.
Python nimmt Ihnen die Anlageentscheidung nicht ab. Es hilft aber, Behauptungen quantitativ zu prüfen, Daten sauberer zu verarbeiten und Finanzmodelle reproduzierbar zu machen. Genau darin liegt sein Wert: weniger manuelle Arbeit, weniger versteckte Excel-Fehler und mehr nachvollziehbare Analyse.
Hinweis: Die Code-Beispiele dienen der Illustration und sind keine Anlageempfehlung. Historische Renditen, Volatilitäten und Korrelationen lassen keine verlässlichen Rückschlüsse auf zukünftige Entwicklungen zu.














































