来自于《Option Pricing and Estimation of Financial Models with R》第七章
LSM <- function(n, d, S0, K, sigma, r, T) {
s0 <- S0/K
dt <- T/d
z <- rnorm(n)
s.t <- s0 * exp((r - 1/2 * sigma^2) * T + sigma * z * (T^0.5))
s.t[(n + 1):(2 * n)] <- s0 * exp((r - 1/2 * sigma^2) * T -
sigma * z * (T^0.5))
CC <- pmax(1 - s.t, 0)
payoffeu <- exp(-r * T) * (CC[1:n] + CC[(n + 1):(2 * n)])/2 * K
euprice <- mean(payoffeu)
for (k in (d - 1):1) {
z <- rnorm(n)
mean <- (log(s0) + k * log(s.t[1:n]))/(k + 1)
vol <- (k * dt/(k + 1))^0.5 * z
s.t.1 <- exp(mean + sigma * vol)
mean <- (log(s0) + k * log(s.t[(n + 1):(2 * n)]))/(k +1)
s.t.1[(n + 1):(2 * n)] <- exp(mean - sigma * vol)
CE <- pmax(1 - s.t.1, 0)
idx <- (1:(2 * n))[CE > 0]
discountedCC <- CC[idx] * exp(-r * dt)
basis1 <- exp(-s.t.1[idx]/2)
basis2 <- basis1 * (1 - s.t.1[idx])
basis3 <- basis1 * (1 - 2 * s.t.1[idx] + (s.t.1[idx]^2)/2)
p <- lm(discountedCC ~ basis1 + basis2 + basis3)$coefficients
estimatedCC <- p[1] + p[2] * basis1 + p[3] * basis2 +
p[4] * basis3
EF <- rep(0, 2 * n)
EF[idx] <- (CE[idx] > estimatedCC)
CC <- (EF == 0) * CC * exp(-r * dt) + (EF == 1) * CE
s.t <- s.t.1
}
payoff <- exp(-r * dt) * (CC[1:n] + CC[(n + 1):(2 * n)])/2
usprice <- mean(payoff * K)
error <- 1.96 * sd(payoff * K)/sqrt(n)
earlyex <- usprice - euprice
data.frame(usprice, error, euprice)
}
S0 <- 36
K <- 30
T <- 1
r <- 0.05
sigma <- 0.4
LSM(10000, 3, S0, K, sigma, r, T)
记得要加好评哦,亲