Generate stock option prices – How to simulate a Brownian motion

October 29, 2012

[This article was first published on ProbaPerception, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

The Brownian motion is certainly the most famous stochastic process (a random variable evolving in the time). It has been the first way to model a stock option price (Louis Bachelier’s thesis in 1900).

The reason why is easy to understand, a Brownian motion is graphically very similar to the historical price of a stock option.

A Brownian motion generated with R (n = 1000)
The historical price of the index FTSE MID 250, source Yahoo Finance.

Even though it is not any more considered as the real distribution of stock options, it is still used in finance and methods to simulate a Brownian motion are really useful. As you will see the code is strikingly easy. We have used the Donsker’s principle.

If Y(i) is a serie of k variables normally distributed, then we can  create X(i) = (Y(1) + … + Y(i))sqrt(i/k). Then X(i) is a proxy of the Brownian motion.

The code (R) : 

size = 1000
y = rnorm(size)
x = y

for (i in 1:size){
  x[i] = 1/sqrt(size)*(sum(y[1:i])*sqrt(i))

plot(x, type = ‘l’, xlab = ‘Time’, ylab = ‘Profit’)

To leave a comment for the author, please follow the link and comment on their blog: ProbaPerception. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)