Getting started
Installation
regimelib depends on numpy, scipy, mpmath and sympy. QuantLib is optional: instruments accept QuantLib payoff, exercise and date objects when it is present, and the certificates compare with QuantLib’s engines.
pip install regimelib
pip install QuantLib # optional
Importing
import regimelib as rl
import QuantLib as ql # optional
Everything documented here is exported at the top level: rl.RegimeChain, rl.SwitchingVasicek,
rl.VanillaOption, rl.FastSwitchingEngine and so on. The closed forms live in rl.symbolic.
Three lines of pricing
A model takes a chain and per-regime parameters (a scalar means the same value in every regime); an instrument takes its contractual terms; an engine binds them.
chain = rl.RegimeChain.twoState(3.0, 5.0)
model = rl.SwitchingBlackScholesProcess(chain, S0=100.0, r=0.03, q=0.0, sigma=[0.35, 0.15])
option = rl.VanillaOption(("call", 100.0), maturity=1.0)
option.setPricingEngine(rl.FastSwitchingEngine(model, order=4, regime=0))
option.NPV(), option.delta(), option.gamma(), option.theta(), option.rho()
Change the engine to rl.NumericalSwitchingEngine(model, regime=0) to solve the reduced system without expanding,
or to rl.SwitchingFDEngine(model, regime=0) for an American exercise.