I was wondering if there is a way of generating a sample path of a Geometric Brownian Motion using two independent standard normal random variables instead of just one.

The exact scheme that uses one standard normal random variable

$$ \hat{S}_{t_{i+1}}= \hat{S}_{t_{i}} \text{exp}\left( (r- \frac{\sigma^2}{2})(t_{i+1}-t_i)+ \sigma \sqrt{t_{i+1}-t_i} Z \right), \ i=0, \dots, n-1$$.

I want to know if there is an exact scheme that uses multiple independent normal random variables. I am asking this specifically for a barrier-forward start type option which has a "barrier check" at say a time $t$.

The idea I had for this case is to have $Z_1$ simulate $S_{t}$ and then have an independent $Z_2$ simulate the final $S_T$ but I am not sure.


1 Answer 1


When you simulate a sample path of a standard Brownian motion, you are generating a sequence $(B_t)_{t \in \mathbb{\Pi}}$ where $\mathbb{\Pi} := \{t_0, ..., t_n\}$ is your time partition. You can view that sequence as $n$ draws of the same random variable, although no one could say that this isn't also 1 draw each of $n$ independent normal random variables.

This is true by definition. You can divide your sample path however you want and name/define things so that as many random variables as you wish get involved, but besides being a huge waste of time, I do not see the point.


Say we use a Euler discretization. You split a month into a grid using 1000 time steps. For each sample path, you need $(Z_t)_{t=1,...,1000}$ where each $Z_t \sim N(0, 1/1000)$.

On your computer, you could do:

B = np.random.normal(loc=0, scale=1, size=1000 )
Z = np.sqrt(1/1000)*B


B1 = np.random.normal(loc=0, scale=1, size=500 )
B2 = np.random.normal(loc=0, scale=1, size=500 )
B  = np.hstack( (B1,B2) )
 Z = np.sqrt(1/1000)*B

You can split those steps in as many vectors as you like. Each vector is a set of draws from a random normal distribution. You can treat this as many draws of 1 r.v., 500 draws each of 2 r.v., etc. It's just a question of definitions.

  • $\begingroup$ So in the case of using just one RV per sample path, the idea is just use that same single RV per discretisation step in the sample path? Then, I can also use, say 2. I am just not sure how I can use 2 instead of 1; for example, using a different Z at each time step is clear but how can I use just 2 per sample path? $\endgroup$
    – ʎpoqou
    Commented May 2, 2020 at 19:26
  • $\begingroup$ You're probably over-thinking this. Let me give you an example in an edit. $\endgroup$
    – Stéphane
    Commented May 2, 2020 at 19:27
  • $\begingroup$ It's a big waste of time to explicit this. The only time you'd use it is if you need to patch together two simulations to save time. $\endgroup$
    – Stéphane
    Commented May 2, 2020 at 19:38
  • $\begingroup$ Except you wrote np.sqrt(1000) but shouldnt that be 1/1000 with the way you defined the variance? $\endgroup$
    – ʎpoqou
    Commented May 3, 2020 at 9:15
  • $\begingroup$ Yes, that should be 1/1000 $\endgroup$
    – Stéphane
    Commented May 4, 2020 at 2:18

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.