Skip to content
All library documents

Estimating a European Call Delta with the Pathwise Monte Carlo Method

Article Quant Q&A · Author: Wolfy

Summary

The document presents a question about implementing the pathwise derivative method for estimating a call option’s delta under a geometric Brownian motion model. The proposed simulation code evolves prices through multiple time steps and then sums indicator-weighted terms, but it does not average over simulation paths and applies the payoff condition at intermediate steps. Those choices do not match the accepted answer’s estimator for a terminal European call.

The answer instead simulates the terminal asset price once per Monte Carlo trial, evaluates whether it finishes above the strike, and multiplies the discounted indicator by the terminal price relative to the initial price. It accumulates that contribution across trials and returns the sample average. The answer explicitly cautions that its code is untested. It supplies an implementation sketch rather than a discussion of convergence, variance, or comparisons with other estimators.

Key ideas

  • For a European call under the stated simulation model, the pathwise estimator uses the terminal asset price and a terminal payoff indicator.
  • Each simulated trial contributes a discounted, indicator-weighted ratio of terminal to initial price.
  • The Monte Carlo delta estimate is the average contribution across simulated trials.
  • The suggested implementation is untested and provides no error analysis.

Tags

Full text
# Pathwise Derivative To Estimate Delta


# Pathwise Derivative To Estimate Delta












I am trying to estimate delta using the pathwise derivative method (Broadie and Glasserman (1996)) and I stuck on this part:

Here is the other notation defined:

Here is my C++ code I have written so far:

```
void Pathwise_Derivative(double S0, double K, double r, double sigma, double T, int M, int N){
    double dt = T/N;
    double S[N+1];
    for(int i = 0; i < M; i++){
        S[0] = S0;
        for(int j = 0; j < N; j++){
            double Z = gaussian_box_muller();
            S[j+1] = S[j]*exp( (r - (sigma*sigma)/(2))*dt + sigma*sqrt(dt)*Z);
        }
    }

    // Estimating Delta
    int I[N+1];
    I[0] = 0;
    for(int i = 1; i <= N; i++){
        if(S[i] > K){
            I[i] = 1;
        }else{
            I[i] = 0;
        }
    }
    double delta = 0.0;
    for(int i = 1; i <= N; i++){
        delta += exp(-r*T)*(S[i]/S0)*I[i];
    }

}
```

I just do not understand the formula for estimating delta and translating it into C++ code, any suggestions are greatly appreciated.

## Answer by Alex C (score 1, accepted)

https://quant.stackexchange.com/a/33699

Caution: this code has not been tested.

```
totDelta = 0.0
for(int i = 0; i < M; i++){
        double Z = gaussian_box_muller();
        ST = S0*exp( (r - (sigma*sigma)/(2.0))*T + sigma*sqrt(T)*Z);
        if(ST > K){
            I = 1;
        }else{
            I = 0;
        }
    Delta = exp(-r*T)*(ST/S0)*I;
    totDelta += Delta       
    }

    return(totDelta/M); /* Average Delta over M MonteCarlo trials */
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.