ragtop {ragtop} | R Documentation |
Pricing schemes for derivatives using equity-linked default intensity
Description
Using numerical integration, we price convertible bonds, straight bonds, equity options and various other derivatives consistently using a jump-diffusion model in which default intensity can vary with equity price in a user-specified deterministic manner.
Details
We apply the stochastic model
dS/S=(r+h-q) dt + \sigma dZ - dJ
where r
and q
play their usual roles, h
is a
deterministic function of stock price and time, and J
is a Poisson jump process adapted to the default intensity
or hazard rate h
. This model is a jump-diffusion
extension of Black-Scholes, with the jump process J representing
default, compensated by extra drift in the equity at rate h
.
Volatilities, default intensities and risk-free rates may all be represented with arbitrary term structures. Default intensity term structures may also take the underlying equity price into account.
Pricing in the standard Black-Scholes model is a special case with default intensity set to zero. Therefore this package also serves to price securities in the standard Black-Scholes model, while still allowing risk-free rates and volatilites have nontrivial term structures.
Important Features
Black-Scholes: The standard model is automatically supported as a special case, but also has optimized routines
Term Structures: The package allows for any kind of instrument to be priced with time-varying rates, volatility and default intensity
Dividends: Allows for discrete dividends in an arbitrary combination of fixed and proportional amounts. The difference between fixed and proprtional can be up to 10 percent in implied volatility terms.
Calibration: Model calibration routines are included
Bankruptcy Realism: A parsimonious deterministic model of default intensity gives rich behavior and conforms reasonably well to observed market data
Algorithm Parameters: Default parameters for the algorithm work well for a very wide variety of pricing and implied volatility scenarios
Examples
## Vanilla European exercise
blackscholes(callput=-1, S0=100, K=90, r=0.03, time=1, vola=0.5)
blackscholes(PUT, S0=100, K=90, r=0.03, time=1, vola=0.5,
default_intensity=0.07, borrow_cost=0.005)
## With a term structure of volatility
## Not run:
black_scholes_on_term_structures(callput=-1, S0=100, K=90, time=1,
const_short_rate=0.025,
variance_cumulation_fcn = function(T, t) {
0.45 ^ 2 * (T - t) + 0.15^2 * max(0, T-0.25)
})
## End(Not run)
## Vanilla American exercise
## Not run:
american(PUT, S0=100, K=110, time=0.77, const_short_rate = 0.06,
const_volatility=0.20, num_time_steps=200)
## End(Not run)
## With a term structure of volatility
## Not run:
american(callput=-1, S0=100, K=90, time=1, const_short_rate=0.025,
variance_cumulation_fcn = function(T, t) {
0.45 ^ 2 * (T - t) + 0.15^2 * max(0, T-0.25)
})
## End(Not run)
## With discrete dividends, combined fixed and proportional
divs = data.frame(time=seq(from=0.11, to=2, by=0.25),
fixed=seq(1.5, 1, length.out=8),
proportional = seq(1, 1.5, length.out=8))
## Not run:
american(callput=-1, S0=100, K=90, time=1, const_short_rate=0.025,
const_volatility=0.20, dividends=divs)
## End(Not run)
## American Exercise Implied Volatility
american_implied_volatility(25,CALL,S0=100,K=100,time=2.2, const_short_rate=0.03)
df250 = function(t) ( exp(-0.02*t)*exp(-0.03*max(0,t-1.0))) # Simple term structure
df25 = function(T,t){df250(T)/df250(t)} # Relative discount factors
## Not run:
american_implied_volatility(25,-1,100,100,2.2,discount_factor_fcn=df25)
## End(Not run)
## Convertible Bond
## Not Run
pct4 = function(T,t=0) { exp(-0.04*(T-t)) }
cb = ConvertibleBond(conversion_ratio=3.5, maturity=1.5, notional=100,
discount_factor_fcn=pct4, name='Convertible')
S0 = 10; p = 6.0; h = 0.10
h_fcn = function(t, S, ...){0.9 * h + 0.1 * h * (S0/S)^p } # Intensity linked to equity price
## Not run:
find_present_value(S0=S0, instruments=list(Convertible=cb), num_time_steps=250,
default_intensity_fcn=h_fcn,
const_volatility = 0.4, discount_factor_fcn=pct4,
std_devs_width=5)
## End(Not run)
## Fitting Term Structure of Volatility
## Not Run
opts = list(m1=AmericanOption(callput=-1, strike=9.9, maturity=1/12, name="m1"),
m2=AmericanOption(callput=-1, strike=9.8, maturity=1/6, name="m2"))
## Not run:
vfit = fit_variance_cumulation(S0, opts, c(0.6, 0.8), default_intensity_fcn=h_fcn)
print(vfit$volatilities)
## End(Not run)