I recently discovered the LSMonteCarlo
library in R which basically determines the price of American options via Longstaff Schwartz method.
I tried the AmerPutLSM
which per description first simulates paths of a geometric Brownian Motion and then uses the Longstaff Schwartz method.
The first few applications did non convince so I tried to price an European Put Option with this function:
library(LSMonteCarlo)
s0 <- 100
strike <- 100
sigma <- 0.03
set.seed(123)
AmerPutLSM(Spot = s0, sigma = sigma, n = 10000,
m = 12, Strike = strike, r = 0, mT = 1, dr = 0)
American Put Option
Price: 1.187689
So basically, I consider 10000 paths of a geometric Brownian motion with $\sigma = 0.03$ and an ATM put option (strike = $S_0$ = 100). The maturity of the option is set to 1 (mT = 1
) and the number of time steps in the simulation is also set to 12 (m = 12
). This means that the option can be exercised at the end of each month (Bermudan type).
For simplicity I assumed no interest rate (r = 0
) and zero dividends (dr = 0
).
This function tells me that the price of this option is about 1.188
But, if we compare this with the Black-Scholes Put Price of a European Put Option we get that
$$ V_{\text{European}} = \text{Strike} \cdot \Phi\Bigl(\frac \sigma 2 \Bigr) - S_0 \cdot \Phi\Bigl(-\frac \sigma 2 \Bigr) = 1.196782. $$
strike * pnorm(sigma/2) - s0 * pnorm(-sigma/2)
[1] 1.196782
This makes no sense since the value of the European Option should always be less then its American (or Bermudan) counterpart.
Does anyone have an explanation for this?
Thank you.