1 | LookbackBS(o = OptPx(Opt(Style = "Lookback")), Smax = 50, Smin = 50, Type = c("Floating", "Fixed"))
|
o |
|
Smax |
|
Smin |
|
Type |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | ##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (o = OptPx(Opt(Style = "Lookback")), Smax = 50, Smin = 50,
Type = c("Floating", "Fixed"))
{
stopifnot(is.OptPx(o), o$Style$Name == "Lookback", is.numeric(Smax),
is.numeric(Smin), is.character(Type))
Type = match.arg(Type)
isFixed = switch(Type, Fixed = TRUE, Floating = FALSE)
o$Smax = Smax
o$Smin = Smin
o$Type = Type
fput.px <- function(S.max) {
b1 = with(o, (log(S.max/S0) + (-r + q + vol^2/2) * ttm)/(vol *
sqrt(ttm)))
b2 = with(o, b1 - vol * sqrt(ttm))
b3 = with(o, (log(S.max/S0) + (r - q - vol^2/2) * ttm)/(vol *
sqrt(ttm)))
Y2 = with(o, (2 * (r - q - vol^2/2) * log(S.max/S0))/vol^2)
p_fl = with(o, S.max * exp(-r * ttm) * (pnorm(b1) - (vol^2 *
exp(Y2) * pnorm(-b3))/(2 * (r - q))) + (S0 * exp(-o$q *
ttm) * vol^2 * pnorm(-b2))/(2 * (r - q)) - S0 * exp(-q *
ttm) * pnorm(b2))
return(p_fl)
}
fcall.px <- function(S.min) {
a1 = with(o, (log(S0/S.min) + (r - q + vol^2/2) * ttm)/(vol *
sqrt(ttm)))
a2 = with(o, a1 - vol * sqrt(ttm))
a3 = with(o, (log(S0/S.min) + (-r + q + vol^2/2) * ttm)/(vol *
sqrt(ttm)))
Y1 = with(o, (-2 * (r - q - vol^2/2) * log(S0/S.min))/vol^2)
c_fl = with(o, S0 * exp(-q * ttm) * pnorm(a1) - (S0 *
exp(-q * ttm) * vol^2 * pnorm(-a1))/(2 * (r - q)) -
S.min * exp(-r * ttm) * (pnorm(a2) - (vol^2 * exp(Y1) *
pnorm(-a3))/(2 * (r - q))))
return(c_fl)
}
if (o$Right$Name == "Put") {
o$PxBS <- with(o, if (!isFixed)
fput.px(Smin)
else fcall.px(min(Smin, K)) + K * exp(-r * ttm) - S0 *
exp(-q * ttm))
}
else if (o$Right$Name == "Call") {
o$PxBS <- with(o, if (!isFixed)
fcall.px(Smax)
else fput.px(max(Smax, K)) + S0 * exp(-q * ttm) - K *
exp(-r * ttm))
}
return(o)
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.