>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Jupyter

Hoe u derivative risico's en prijzen in Python berekent met C++-snelheid

Als u ooit geprobeerd heeft om financiële modellen te schrijven voor het prijzen van opties, swaps of obligaties in Python, bent u waarschijnlijk een bekend dilemma tegengekomen. Aan de ene kant is er de trage pure Python, waarbij Monte Carlo-simulaties te lang duren. Aan de andere kant zijn er zware bibliotheken zoals QuantLib met C++-wrappers, waarbij het lezen van broncode of het debuggen van modelgedrag een niet-triviale taak wordt.

De FinancePy-bibliotheek biedt een andere aanpak. Deze is gecreëerd door Dominic O'Kane, een voormalig financieprofessor aan de EDHEC Business School met twaalf jaar ervaring in de financiële sector. Hij streefde ernaar om een open tool te creëren waarbij alle code in Python is geschreven en de berekeningsresultaten zo dicht mogelijk bij professionele systemen zoals Bloomberg liggen.

Hoe het project is gestructureerd

De bibliotheekarchitectuur draait rond een duidelijk concept. Elke waarderingsberekening wordt beschreven door de formule:

Waardering = Product + Model + Markt

In code ziet dit er logisch uit. De bibliotheekmodules zijn opgesplitst in verschillende hoofdmappen:

  • utils: datums, financiële kalenders en betalingsschema-generators
  • market: rentecurves, volatiliteitsoppervlakken en marktprijzen
  • models: wiskundige prijsmodellen van Black-Scholes tot het Vasicek-model
  • products: specifieke instrumenten, onderverdeeld in categorieën Obligaties, Krediet, Aandelen, FX en Rentes

Elk product heeft een value() methode. U maakt een financieel instrumentobject aan, geeft het een model en de huidige marktsituatie, en krijgt vervolgens de waarde of risicoparameters. Voor de meeste producten heeft de auteur Monte Carlo-simulaties toegevoegd. Dit helpt om te begrijpen hoe contractuitbetalingen in de loop van de tijd werken.

Hoe snelheid wordt bereikt

FinancePy is geschreven in pure Python, maar gebruikt actief de Numba-bibliotheek. Bij de eerste functieaanroep transformeert de JIT-compiler de modelwiskunde naar machinecode. Hierdoor kan de eerste import van een module enkele seconden duren.

Echter, alle volgende aanroepen duren fracties van een milliseconde. Gecompileerde functies worden in de cache opgeslagen. Als resultaat krijgt u C/C++-niveau snelheid terwijl u de mogelijkheid behoudt om een broncodebestand te openen en de algoritme regel voor regel te lezen zonder Cython te compileren of C-extensies te schrijven.

Een duidelijk voorbeeld en notebooks

Installatie wordt gedaan met een standaard pip-aanroep:

pip install financepy

U kunt dan datumhulpmiddelen importeren:

from financepy.utils import Date

start_date = Date(19, 2, 2026)
future_date = start_date.add_days(2)
print(future_date) # 21-FEB-2026

Ontwikkelaars hoeven functiehandtekeningen niet te raden uit broncode. In de repository vindt u meer dan 90 Jupyter-notebooks met kant-en-klare voorbeelden. Deze bevatten gedetailleerde scenario's: van basis bedrijfsobligatiewaardering en valuta-barrièreopties tot het bouwen van complexe disconto curves en credit default swaps.

Codestijl en bijdragen

De auteur vermijdt bewust complexe overerving en overbelaste architectuur. Leesbaarheid en prestaties krijgen voorrang op slimme taaltrucs. Een eenvoudige for-loop in FinancePy-code heeft de voorkeur boven een uitgebreide list comprehension, omdat Numba reguliere loops effectiever optimaliseert.

Als u een pull request naar het project wilt indienen, heeft de auteur duidelijke vereisten:

  • Strikte naleving van de PEP8-standaard
  • Duidelijke commentaren voor elke functie en klasse
  • Aanwezigheid van unit tests en minstens één integratietest voor elke methode

Is het de moeite waard om te gebruiken

FinancePy is geschikt voor kwantitatieve analisten, risico- en portfoliomanagers die een duidelijk hulpmiddel nodig hebben voor snelle prijs- en gevoeligheidsverificatie. Het project zal ook nuttig zijn voor studenten en docenten van financiële cursussen voor het leren van derivatenwiskunde.

Het project vereist alleen NumPy, SciPy en Numba als afhankelijkheden. De GPL-3.0-licentie biedt toegang tot alle broncode. Het project is in bèta-status en de auteur waarschuwt eerlijk over mogelijke discrepanties in datumgeneratie of interpolatiemethoden vergeleken met proprietaire terminals. Echter, voor persoonlijk onderzoek, het testen van handelsstrategieën en snelle derivatenwaardering zijn de mogelijkheden van de bibliotheek meer dan voldoende.

Gerelateerde projecten