Model Classes
The following models are available:
geometric_brownian_motion
: Black-Scholes-Merton (1973) geometric Brownian motionjump_diffusion
: Merton (1976) jump diffusionstoch_vol_jump_diffusion
: Bates (1996) stochastic volatility jump diffusionsquare_root_diffusion
: Cox-Ingersoll-Ross (1985) square-root diffusionsquare_root_jump_diffusion
: square-root jump diffusionsquare_root_jump_diffusion_plus
: square-root jump diffusion plus term structurefrom dx import *
np.set_printoptions(precision=3)
r = constant_short_rate('r', 0.06)
me = market_environment('me', dt.datetime(2015, 1, 1))
me.add_constant('initial_value', 36.)
me.add_constant('volatility', 0.2)
me.add_constant('final_date', dt.datetime(2015, 12, 31))
me.add_constant('currency', 'EUR')
me.add_constant('frequency', 'M')
# monthly frequency
me.add_constant('paths', 10000)
me.add_curve('discount_curve', r)
gbm = geometric_brownian_motion('gbm', me)
gbm.generate_time_grid()
gbm.time_grid
paths = gbm.get_instrument_values()
paths[:, :2]
%matplotlib inline
colormap='coolwarm'
lw=1.25
figsize=(8, 4)
legend=False
no_paths=10
pdf = pd.DataFrame(paths, index=gbm.time_grid)
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
me.add_constant('lambda', 0.7)
me.add_constant('mu', -0.8)
me.add_constant('delta', 0.1)
jd = jump_diffusion('jd', me)
paths = jd.get_instrument_values()
pdf = pd.DataFrame(paths, index=jd.time_grid)
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
me.add_constant('rho', -.5)
me.add_constant('kappa', 2.5)
me.add_constant('theta', 0.1)
me.add_constant('vol_vol', 0.1)
svjd = stoch_vol_jump_diffusion('svjd', me)
paths = svjd.get_instrument_values()
pdf = pd.DataFrame(paths, index=svjd.time_grid)
# index level paths
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
vols = svjd.get_volatility_values()
pdf = pd.DataFrame(vols, index=svjd.time_grid)
# volatility paths
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
# short rate like parameters
me.add_constant('initial_value', 0.05)
me.add_constant('volatility', 0.1)
me.add_constant('kappa', 2.5)
me.add_constant('theta', 0.01)
srd = square_root_diffusion('srd', me)
paths = srd.get_instrument_values()
pdf = pd.DataFrame(paths, index=srd.time_grid)
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
Experimental Status
# volatility index like parameters
me.add_constant('initial_value', 25.)
me.add_constant('theta', 20.)
me.add_constant('volatility', 1.)
me.add_constant('mu', 0.4)
srjd = square_root_jump_diffusion('srjd', me)
paths = srjd.get_instrument_values()
pdf = pd.DataFrame(paths, index=srjd.time_grid)
pdf[pdf.columns[:no_paths]].plot(colormap=colormap, lw=lw,
figsize=figsize, legend=legend)
Experimental Status
srjd = square_root_jump_diffusion_plus('srjd', me)
# no particular term structure provided
srjd.update_forward_rates()
srjd.forward_rates
# term structure resulting from parameters