Learn R Programming

mlmc (version 1.0.0)

mcqmc06_l: Financial options using a Milstein discretisation

Description

Financial options based on scalar geometric Brownian motion, similar to Mike Giles' MCQMC06 paper, using a Milstein discretisation

Usage

mcqmc06_l(l, N, option)

Arguments

l
the level to be simulated.
N
the number of samples to be computed.
option
the option type, between 1 and 5. The options are:
1 = European call;

2 = Asian call;

3 = lookback call;

4 = digital call;

5 = barrier call.

Details

This function is based on GPL-2 C++ code by Mike Giles.

References

M.B. Giles. 'Improved multilevel Monte Carlo convergence using the Milstein scheme', p.343-358 in Monte Carlo and Quasi-Monte Carlo Methods 2006, Springer, 2007.

Examples

Run this code
## Not run: 
# # These are similar to the MLMC tests for the MCQMC06 paper
# # using a Milstein discretisation with 2^l timesteps on level l
# #
# # The figures are slightly different due to:
# # -- change in MSE split
# # -- change in cost calculation
# # -- different random number generation
# # -- switch to S_0=100
# 
# M    <- 2 # refinement cost factor
# N0   <- 200 # initial samples on coarse levels
# Lmin <- 2 # minimum refinement level
# Lmax <- 10 # maximum refinement level
# 
# test.res <- list()
# for(option in 1:5) {
#   if(option==1) {
#     cat("\n ---- Computing European call ---- \n")
#     N      <- 20000 # samples for convergence tests
#     L      <- 8 # levels for convergence tests
#     Eps    <- c(0.005, 0.01, 0.02, 0.05, 0.1)
#   } else if(option==2) {
#     cat("\n ---- Computing Asian call ---- \n")
#     N      <- 20000 # samples for convergence tests
#     L      <- 8 # levels for convergence tests
#     Eps    <- c(0.005, 0.01, 0.02, 0.05, 0.1)
#   } else if(option==3) {
#     cat("\n ---- Computing lookback call ---- \n")
#     N      <- 20000 # samples for convergence tests
#     L      <- 10 # levels for convergence tests
#     Eps    <- c(0.005, 0.01, 0.02, 0.05, 0.1)
#   } else if(option==4) {
#     cat("\n ---- Computing digital call ---- \n")
#     N      <- 200000 # samples for convergence tests
#     L      <- 8 # levels for convergence tests
#     Eps    <- c(0.01, 0.02, 0.05, 0.1, 0.2)
#   } else if(option==5) {
#     cat("\n ---- Computing barrier call ---- \n")
#     N      <- 200000 # samples for convergence tests
#     L      <- 8 # levels for convergence tests
#     Eps    <- c(0.005, 0.01, 0.02, 0.05, 0.1)
#   }
# 
#   test.res[[option]] <- mlmc.test(mcqmc06_l, M, N, L, N0, Eps, Lmin, Lmax, option=option)
# 
#   # plot results
#   plot(test.res[[option]])
# }
# ## End(Not run)

# The level sampler can be called directly to retrieve the relevant level sums:
mcqmc06_l(l=7, N=10, option=1)

Run the code above in your browser using DataLab