library(fOptions)
## MC simulation
## Step 1: function to generate the option's innovations.
## Use normal pseudo random numbers
pseudoInnovations = function(mcSteps, pathLength,init){
#Create normal pseudo random numbers
innovations = rnorm.pseudo(mcSteps, pathLength,init)
#Return value
innovations }
## Step 2: function to generate the option's price paths.
wienerPath = function(eps) {
# Generate the Paths:
path = (b-sigma*sigma/2)*delta.t + sigma*sqrt(delta.t)*eps
# Return Value:
path }
## Step 3: function for the payoff for an Asian Call or Put:
arithmeticAsianPayoff = function(path) {
# Compute the Call/Put Payoff Value:
SM = mean(S*exp(cumsum(path)))
if (TypeFlag == "c") payoff = exp(-r*Time)*max(SM-X, 0)
if (TypeFlag == "p") payoff = exp(-r*Time)*max(0, X-SM)
# Return Value:
payoff }
## Final Step: Set global parameters for the option:
TypeFlag <<- "c"; S <Time <
# Do the Asian Simulation with pseudo random numbers:
mc = MonteCarloOption(delta.t=1/360, pathLength=30, mcSteps=5000,
mcLoops = 50, init = TRUE, innovations.gen = pseudoInnovations,
path.gen = wienerPath, payoff.calc = arithmeticAsianPayoff,
antithetic = TRUE, standardization = FALSE, trace = TRUE)
# Plot the MC Iteration Path:
par(mfrow = c(1, 1))
mcPrice = cumsum(mc)/(1:length(mc))
plot(mcPrice, type = "l", main = "Arithmetic Asian Option",
xlab = "Monte Carlo Loops", ylab = "Option Price")