An intuitive way of understanding a Wiener process is seeing it as a limit of random walk. From wikipedia:
Let be i.i.d. random variables with mean 0 and variance 1. For each n, define a continuous time stochastic process:
This is a random step function. Increments are independent because the are independent. For large n, is close to by the central limit theorem. Donsker's theorem proved that as , approaches a Wiener process, which explains the ubiquity of Brownian.
And also from wikipedia, a Wiener process has to follow below properties:
- a.s.
- has independent increments: for every the future increments , are independent of the past values
- has Gaussian increments: is normally distributed with mean and variance ,
- has continuous paths: With probability , is continuous in .
So, with all this properties and as is stated at Hull's Options, Futures, and Other Derivatives we can say that a variable follows a Wiener process if:
- The change during a small period of time is: where has a normal distribution of . So will have a mean of and a variance of .
- The values of for any two different short intervals of time, , are independent.
It can be seen here that for a variable that can take values and with probability of each, the random variable (random walk) will have a distribution. So, for a period of time if we take with and for small N, then:
A generilized Wiener process in terms of is one of the form:
Taking a look to the two terms separately we see that integrating we get that which basically gives a drift to the process, for each unit of time the process increases .
Being the aforementioned variabe, the term can be seen as adding variance to the process having now:
Discretizing the process and with a small we can now plot a sample of one possible path of the process, lets say and . Where the red line shows the drift, the green one the wiener process and the blue one the generalized wiener process (drift added);
import numpy as np
import matplotlib.pyplot as plt
T = 10
n = 1000
dT = T / n
a = 0.05
b = 20
def randomwalk(n, dT, b):
normal_values = np.random.normal(0, b * dT ** (1 / 2), n)
walk = np.cumsum(normal_values)
return walk
particularWalk = randomwalk(n, dT, b)
drift = np.cumsum(np.full(n, a))
plt.plot(np.arange(n), particularWalk, color='green')
plt.plot(np.arange(n), particularWalk + drift, color='royalblue')
x = np.arange(n)
plt.plot(x, drift, linewidth=1, color='red')
plt.grid()
plt.show()
A stock though does not follow a Wiener process, there are two aspects the process has to take into account:
- The drift has to be proportional to the stock price as you will expect same return independently of the current price, so
- The variance (or uncertainty) affecting the stock has also to be proportional to the stock price, so
We know now that a stock price has to follow the mentioned process, so a solution to this SDE will be a good model for the stock.
Using Ito's lemma we can solve the SDE applying a well defined function to the process, and to do so we will use the natural logarithm of .
Which leads to solution:
And this is always positive. Furthermore, this tells us that:
Which also "approximately" models the stock return as normal (see this )