Learn R Programming

RND (version 1.2)

extract.mln.density: Extract Mixture of Lognormal Densities

Description

mln.extraction extracts the parameters of the mixture of two lognormals densities.

Usage

extract.mln.density(initial.values = c(NA, NA, NA, NA, NA), r, y, te, s0, market.calls, call.strikes, call.weights = 1, market.puts, put.strikes, put.weights = 1, lambda = 1, hessian.flag = F, cl = list(maxit = 10000))

Arguments

initial.values
initial values for the optimization
r
risk free rate
y
dividend yield
te
time to expiration
s0
current asset value
market.calls
market calls (most expensive to cheapest)
call.strikes
strikes for the calls (smallest to largest)
call.weights
weights to be used for calls
market.puts
market calls (cheapest to most expensive)
put.strikes
strikes for the puts (smallest to largest)
put.weights
weights to be used for puts
lambda
Penalty parameter to enforce the martingale condition
hessian.flag
if F, no hessian is produced
cl
list of parameter values to be passed to the optimization function

Value

Details

mln is the density f(x) = alpha.1 * g(x) + (1 - alpha.1) * h(x), where g and h are densities of two lognormals with parameters (mean.log.1, sdlog.1) and (mean.log.2, sdlog.2) respectively.

References

F. Gianluca and A. Roncoroni (2008) Implementing Models in Quantitative Finance: Methods and Cases

B. Bahra (1996): Probability distribution of future asset prices implied by option prices. Bank of England Quarterly Bulletin, August 1996, 299-311

P. Soderlind and L.E.O. Svensson (1997) New techniques to extract market expectations from financial instruments. Journal of Monetary Economics, 40, 383-4

E. Jondeau and S. Poon and M. Rockinger (2007): Financial Modeling Under Non-Gaussian Distributions Springer-Verlag, London

Examples

Run this code

#
# Create some calls and puts based on mln and 
# see if we can extract the correct values.
#


r         = 0.05
y         = 0.02
te        = 60/365
meanlog.1 = 6.8
meanlog.2 = 6.95
sdlog.1   = 0.065
sdlog.2   = 0.055
alpha.1   = 0.4


call.strikes = seq(from = 800, to = 1200, by = 10)
market.calls = price.mln.option(r = r, y = y, te = te, k = call.strikes, 
               alpha.1 = alpha.1, meanlog.1 = meanlog.1, meanlog.2 = meanlog.2, 
                                sdlog.1 = sdlog.1, sdlog.2 = sdlog.2)$call

s0 = price.mln.option(r = r, y = y, te = te, k = call.strikes, alpha.1 = alpha.1, 
                      meanlog.1 = meanlog.1, meanlog.2 = meanlog.2, 
                      sdlog.1 = sdlog.1, sdlog.2 = sdlog.2)$s0
s0
put.strikes  = seq(from = 805, to = 1200, by = 10)
market.puts  = price.mln.option(r = r, y = y, te = te, k = put.strikes, 
                                alpha.1 = alpha.1, meanlog.1 = meanlog.1, 
                                meanlog.2 = meanlog.2, sdlog.1 = sdlog.1, 
                                sdlog.2 = sdlog.2)$put

###
### The extracted values should be close to the actual values.
###

extract.mln.density(r = r, y = y, te = te, s0 = s0, market.calls = market.calls, 
               call.strikes = call.strikes, market.puts = market.puts, 
               put.strikes = put.strikes, lambda = 1, hessian.flag = FALSE)


Run the code above in your browser using DataLab