Wie man Derivatrisiken und -preise in Python mit C++-Geschwindigkeit berechnet
Wenn Sie schon einmal versucht haben, Finanzmodelle zur Bewertung von Optionen, Swaps oder Anleihen in Python zu schreiben, sind Sie wahrscheinlich auf ein bekanntes Dilemma gestoßen. Einerseits gibt es langsames reines Python, bei dem Monte-Carlo-Simulationen zu lange dauern. Andererseits gibt es umfangreiche Bibliotheken wie QuantLib mit C++-Wrappers, bei denen das Lesen des Quellcodes oder das Debuggen von Modellverhalten zu einer aufwendigen Aufgabe wird.
Die FinancePy-Bibliothek bietet einen anderen Weg. Sie wurde von Dominic O'Kane entwickelt, einem ehemaligen Finanzprofessor an der EDHEC Business School mit zwölf Jahren Erfahrung in der Finanzbranche. Er wollte ein Open-Source-Tool schaffen, bei dem der gesamte Code in Python geschrieben ist und die Berechnungsergebnisse so nah wie möglich an professionellen Systemen wie Bloomberg liegen.
Wie das Projekt aufgebaut ist
Die Bibliotheksarchitektur dreht sich um ein klares Konzept. Jede Bewertungsberechnung wird durch die Formel beschrieben:
Bewertung = Produkt + Modell + Markt
Im Code sieht das logisch aus. Die Bibliotheksmodule sind in mehrere Hauptverzeichnisse aufgeteilt:
- utils: Datumsangaben, Finanzkalender und Zahlungsplan-Generatoren
- market: Zinsstrukturkurven, Volatilitätsflächen und Marktpreise
- models: mathematische Preismodelle vom Black-Scholes-Modell bis zum Vasicek-Modell
- products: spezifische Instrumente, aufgeteilt in die Kategorien Anleihen, Kredit, Aktien, Devisen und Zinsen
Jedes Produkt hat eine value()-Methode. Sie erstellen ein Finanzinstrument-Objekt, übergeben ihm ein Modell und die aktuelle Marktsituation und erhalten dann den Wert oder die Risikoparameter. Für die meisten Produkte hat der Autor Monte-Carlo-Simulationen hinzugefügt. Dies hilft zu verstehen, wie Auszahlungen im Zeitverlauf funktionieren.
Wie die Geschwindigkeit erreicht wird
FinancePy ist in reinem Python geschrieben, nutzt aber aktiv die Numba-Bibliothek. Beim ersten Funktionsaufruf transformiert der JIT-Compiler die Modellmathematik in Maschinencode. Dadurch kann der erste Import eines Moduls ein paar Sekunden dauern.
Alle nachfolgenden Aufrufe dauern jedoch Bruchteile einer Millisekunde. Kompilierte Funktionen werden im Cache gespeichert. Dadurch erhalten Sie C/C++-Niveau-Geschwindigkeit, während Sie die Möglichkeit behalten, eine Quelldatei zu öffnen und den Algorithmus Zeile für Zeile zu lesen, ohne Cython zu kompilieren oder C-Erweiterungen zu schreiben.
Ein anschauliches Beispiel und Notebooks
Die Installation erfolgt mit einem Standard-pip-Aufruf:
pip install financepy
Sie können dann die Datumswerkzeuge importieren:
from financepy.utils import Date
start_date = Date(19, 2, 2026)
future_date = start_date.add_days(2)
print(future_date) # 21-FEB-2026
Entwickler müssen Funktionssignaturen nicht aus dem Quellcode erraten. Im Repository finden Sie über 90 Jupyter-Notebooks mit fertigen Beispielen. Diese enthalten detaillierte Szenarien: von der Bewertung einfacher Unternehmensanleihen und Währungs-Barriere-Optionen bis zum Aufbau komplexer Diskontkurven und Credit Default Swaps.
Codestil und Beitragen
Der Autor vermeidet bewusst komplexe Vererbung und überladene Architektur. Lesbarkeit und Leistung haben Vorrang vor cleveren Sprachtricks. Eine einfache for-Schleife im FinancePy-Code wird gegenüber einer ausgefeilten List Comprehension bevorzugt, da Numba reguläre Schleifen effektiver optimiert.
Wenn Sie einen Pull-Request an das Projekt senden möchten, hat der Autor klare Anforderungen:
- Strikte Einhaltung des PEP8-Standards
- Klare Kommentare für jede Funktion und Klasse
- Vorhandensein von Unit-Tests und mindestens einem Integrationstest für jede Methode
Lohnt es sich, FinancePy zu verwenden
FinancePy eignet sich für quantitative Analysten, Risiko- und Portfoliomanager, die ein klares Tool zur schnellen Preis- und Sensitivitätsprüfung benötigen. Das Projekt ist auch für Studierende und Dozenten von Finanzkursen nützlich, um die Mathematik von Derivaten zu erlernen.
Das Projekt benötigt nur NumPy, SciPy und Numba als Abhängigkeiten. Die GPL-3.0-Lizenz gewährt Zugriff auf den gesamten Quellcode. Das Projekt befindet sich im Beta-Status, und der Autor warnt ehrlich vor möglichen Abweichungen bei der Datumsgenerierung oder Interpolationsmethoden im Vergleich zu proprietären Terminals. Für persönliche Forschung, das Testen von Handelsstrategien und die schnelle Bewertung von Derivaten sind die Fähigkeiten der Bibliothek jedoch mehr als ausreichend.
Ähnliche Projekte