Learn R Programming

RND (version 1.2)

mln.objective: Objective function for the Mixture of Lognormal

Description

mln.objective is the objective function to be minimized in extract.mln.density.

Usage

mln.objective(theta, r, y, te, s0, market.calls, call.strikes, call.weights, market.puts, put.strikes, put.weights, lambda = 1)

Arguments

theta
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

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-429

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

Examples

Run this code
#
# The mln objective function should be close to zero.
# The weights are automatically set to 1.
#

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

# This is the current price implied by parameter values:
s0 = 981.8815 

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

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

mln.objective(theta=c(alpha.1,meanlog.1, meanlog.2 , sdlog.1, sdlog.2), 
               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)

Run the code above in your browser using DataLab