Jak obliczać ryzyko i ceny instrumentów pochodnych w Pythonie z szybkością C++
Jeśli kiedykolwiek próbowałeś pisać modele finansowe do wyceny opcji, swapów lub obligacji w Pythonie, prawdopodobnie napotkałeś dobrze znany dylemat. Z jednej strony masz wolny czysty Python, gdzie symulacje Monte Carlo trwają zbyt długo. Z drugiej strony istnieją rozbudowane biblioteki jak QuantLib z wrapperami C++, gdzie czytanie kodu źródłowego lub debugowanie zachowania modelu staje się niebanalnym zadaniem.
Biblioteka FinancePy oferuje inną ścieżkę. Została stworzona przez Dominica O'Kane, byłego profesora finansów w EDHEC Business School z dwunastoletnim doświadczeniem w branży finansowej. Postawił sobie za cel stworzenie otwartego narzędzia, gdzie cały kod jest napisany w Pythonie, a wyniki obliczeń są jak najbliższe profesjonalnym systemom jak Bloomberg.
Jak zbudowany jest projekt
Architektura biblioteki opiera się na jasnej koncepcji. Każda kalkulacja wyceny jest opisana wzorem:
Wycena = Produkt + Model + Rynek
W kodzie wygląda to logicznie. Moduły biblioteki są podzielone na kilka głównych katalogów:
- utils: daty, kalendarze finansowe i generatory harmonogramów płatności
- market: krzywe stóp procentowych, powierzchnie zmienności i ceny rynkowe
- models: matematyczne modele wyceny od Blacka-Scholesa po model Vasicka
- products: konkretne instrumenty, podzielone na kategorie Obligacje, Kredyt, Akcje, FX i Stopy
Każdy produkt ma metodę value(). Tworzysz obiekt instrumentu finansowego, przekazujesz mu model i aktualną sytuację rynkową, a następnie otrzymujesz wartość lub parametry ryzyka. Dla większości produktów autor dodał symulacje Monte Carlo. Pomaga to zrozumieć, jak wypłaty z kontraktów kształtują się w czasie.
Jak osiągana jest szybkość
FinancePy jest napisane w czystym Pythonie, ale aktywnie korzysta z biblioteki Numba. Przy pierwszym wywołaniu funkcji kompilator JIT przekształca matematykę modelu w kod maszynowy. Z tego powodu pierwszy import modułu może zająć kilka sekund.
Jednak wszystkie kolejne wywołania trwają ułamki milisekundy. Skompilowane funkcje są przechowywane w cache. W rezultacie otrzymujesz szybkość na poziomie C/C++, zachowując możliwość otwarcia pliku z kodem źródłowym i czytania algorytmu linia po linii bez kompilowania Cythona czy pisania rozszerzeń C.
Przejrzysty przykład i notebooki
Instalacja odbywa się standardowym wywołaniem pip:
pip install financepy
Następnie możesz zaimportować narzędzia do pracy z datami:
from financepy.utils import Date
start_date = Date(19, 2, 2026)
future_date = start_date.add_days(2)
print(future_date) # 21-FEB-2026
Programistów nie będą musieli zgadywać sygnatur funkcji z kodu źródłowego. W repozytorium znajdziesz ponad 90 notebooków Jupyter z gotowymi przykładami. Zawierają one szczegółowe scenariusze: od podstawowej wyceny obligacji korporacyjnych i opcji barierowych walutowych po budowanie złożonych krzywych dyskontowych i swapów ryzyka kredytowego.
Styl kodu i współtworzenie
Autor świadomie unika złożonego dziedziczenia i przeciążonej architektury. Czytelność i wydajność są priorytetem nad sprytnymi sztuczkami językowymi. Prosta pętla for w kodzie FinancePy jest preferowana nad rozbudowaną listą składaną, ponieważ Numba lepiej optymalizuje zwykłe pętle.
Jeśli chcesz przesłać pull request do projektu, autor ma jasne wymagania:
- Ścisłe przestrzeganie standardu PEP8
- Jasne komentarze dla każdej funkcji i klasy
- Obecność testów jednostkowych i co najmniej jednego testu integracyjnego dla każdej metody
Czy warto używać
FinancePy jest odpowiednie dla analityków ilościowych, menedżerów ryzyka i portfela, którzy potrzebują jasnego narzędzia do szybkiej weryfikacji cen i wrażliwości. Projekt będzie również przydatny dla studentów i wykładowców kursów finansowych do nauki matematyki instrumentów pochodnych.
Projekt wymaga tylko NumPy, SciPy i Numba jako zależności. Licencja GPL-3.0 zapewnia dostęp do całego kodu źródłowego. Projekt jest w statusie beta, a autor uczciwie ostrzega o możliwych rozbieżnościach w generowaniu dat lub metodach interpolacji w porównaniu z terminalami proprietary. Jednak do osobistych badań, testowania strategii tradingowych i szybkiej wyceny instrumentów pochodnych możliwości biblioteki są więcej niż wystarczające.
Powiązane projekty