donlelef
vanilla-option-pricing
Python

Stochastic models to price financial options

Last updated Mar 14, 2025
24
Stars
2
Forks
1
Issues
0
Stars/day
Attention Score
12
Language breakdown
No language data available.
Files click to expand
README

Vanilla Option Pricing

Actions Status codecov Documentation Status Downloads DOI

A Python package implementing stochastic models to price financial options. The theoretical background and a comprehensive explanation of models and their parameters can be found is the paper Fast calibration of two-factor models for energy option pricing by Emanuele Fabbiani, Andrea Marziali and Giuseppe De Nicolao, freely available on arXiv. A software paper describing the repository can be found in Software Impact.

Installing

The preferred way to install the package is using pip, but you can also download the code and install from source

To install the package using pip:

pip install vanillaoptionpricing

Quickstart

Let's create a call option.
from datetime import datetime, timedelta
from vanillaoptionpricing.option import VanillaOption

option = VanillaOption( spot=100, strike=101, dividend=0, date=datetime.today(), maturity=datetime.today() + timedelta(days=30), opti, price=1, instrument='TTF' )

We can compute the implied volatility and create a Geometric Brownian Motion model with it. Of course, if now we ask price the option using the Black framework, we'll get back the initial price.

from vanillaoptionpricing.models import GeometricBrownianMotion

volatility = option.impliedvolatilityofundiscountedprice gbm_model = GeometricBrownianMotion(volatility) gbmprice = gbmmodel.priceoptionblack(option) print(f'Actual price: {option.price}, model price: {gbm_price}')

But, if we adopt a different model, say a Log-spot price mean reverting to generalised Wiener process model (MLR-GW), we will get a different price.

import numpy as np
from vanillaoptionpricing.models import LogMeanRevertingToGeneralisedWienerProcess

p_0 = np.eye(2) model = LogMeanRevertingToGeneralisedWienerProcess(p_0, 1, 1, 1) lmrgwprice = model.priceoption_black(option) print(f'Actual price: {option.price}, model price: {lmrgw_price}')

In the previous snippet, the parameters of the LMR-GW model were chosen at random. We can also calibrate the parameters of a model against listed options.

from datetime import date
from vanillaoptionpricing.option import VanillaOption
from vanillaoptionpricing.models import OrnsteinUhlenbeck, GeometricBrownianMotion
from vanillaoptionpricing.calibration import ModelCalibration

data_set = [ VanillaOption('TTF', 'c', date(2018, 1, 1), 2, 101, 100, date(2018, 2, 1)), VanillaOption('TTF', 'p', date(2018, 1, 1), 2, 98, 100, date(2018, 2, 1)), VanillaOption('TTF', 'c', date(2018, 1, 1), 5, 101, 100, date(2018, 5, 31)) ]

models = [ GeometricBrownianMotion(0.2), OrnsteinUhlenbeck(p_0=0, l=100, s=2) ] calibration = ModelCalibration(data_set)

print(f'Implied volatilities: {[o.impliedvolatilityofundiscountedprice for o in data_set]}\n')

for model in models: result, trainedmodel = calibration.calibratemodel(model) print('Optimization results:') print(result) print(f'Calibrated parameters: {trained_model.parameters}\n\n')

🔗 More in this category

© 2026 GitRepoTrend · donlelef/vanilla-option-pricing · Updated daily from GitHub