I have tried stock price as control variate for my monte carlo simulation, and I am trying to reduce the variance of my estimated price for European Put option. And the code look like this:

path <- function(rho,T, S0, r, kappa, theta,xi,v0, Maturity ) { 
  dt = Maturity / T
  COV <- matrix(c(1,rho,rho,1), nrow = 2,ncol = 2)
  W <- rmvnorm(T, , COV)
  W_v <- W[,1]
  W_s <- W[,2]
  Vt <- rep(0,T)
  Vt[1] <- v0
  St <- rep(0,T)
  St[1] <- S0
  for (i in 2:T){
    Vt[i] <- Vt[i-1] + kappa* (theta - Vt[i-1])*dt + xi* sqrt(Vt[i-1]) * W_v[i-1] * sqrt(dt)
    St[i] <- St[i-1]*exp((r-0.5*Vt[i-1]) *dt + sqrt(dt*Vt[i-1]) * W_s[i-1])
Stm <- replicate(100000, path(0.5,N,45,-0.02,10,0.09,0.2,0.09,2))
payoff <- pmax (40 - Stm[N,], 0 ) *exp(-0.02 * 2)
Hest_MC1 <- mean(payoff)
S_aver <- mean(Stm[N,])

ST <- 45* exp(-0.02 *2 )

hest_mc <- Hest_MC1 + -reg$coefficients[[2]]*(S_aver - ST)
reg <- lm(payoff~Stm[N,])


sd_old <- sqrt(var(payoff)/length(payoff))
sd_reduced <- sqrt(var(payoff)/length(payoff) + reg$coefficients[[2]]^2 *var(Stm[N,])/length(Stm[N,])
                         + 2*( -reg$coefficients[[2]] )*cov(Stm[N,],payoff)/length(payoff))
# result
        sd_old sd_reduced
[1,] 0.06926151 0.04898853

As you can see, the result only improved marginally after 100,000 Simulation. Do anyone has any Idea how to continue improve on this? I did try the European Put (plain) as control variate, however, the payoff is very weakly correlated with the payoff of the option I tried to reduce variance on.

Any comment would be appreciated.


1 Answer 1


Try a discretized form of the $Put Delta*Stock increment$, since the injection of this term should produce ideally (in the limit case) a 0 variance variable, namely the risk free drift.

  • $\begingroup$ Hi, Thanks for the comment, I think I have seem this method before, are you referring to the method described in this Notes, i,e adding a delta-heding term. math.kent.edu/~oana/math60093/10lecture7.pdf. $\endgroup$
    – Lin Lex
    Dec 24, 2020 at 1:54
  • $\begingroup$ And I used Heston model to model my stock prices, therefore delta is somewhat difficult to compute analytically, I mean it does not have a nice espression like in Black-Scholes case. Do I just use (P_t+1 - P_t)/(S_t+1 - S_t) as an apporximation for my Put Delta? $\endgroup$
    – Lin Lex
    Dec 24, 2020 at 2:12
  • $\begingroup$ @LinLex yes that is what I am referring to. And to answer your second question, yes, this is called finding the derivative by first differencing. Bump the stock price by 1% and calculate the sensitivity. $\endgroup$
    – Arshdeep
    Dec 24, 2020 at 18:33
  • $\begingroup$ @LinLex to be precise, you need $P(S+dS,t)-P(S,t)/dS$ for delta at time instance $t$. $\endgroup$
    – Arshdeep
    Dec 24, 2020 at 18:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.