Brownian Motion of a Stock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | '''
N_sim: number of simulations
T: horizon
dt: step length in years
sigma: volatility per year
mu: drift terms (moving average or long-term mean for stock returns)
S0: initial stock price
'''
from numpy.random import standard_normal
from numpy import array, zeros, sqrt, shape
from pylab import *
S0 = 10.222
T =1
dt =0.0002
sigma = 0.4
mu = 1
N_Sim = 10
Steps=round(T/dt); #Steps in years
S = zeros([N_Sim, Steps], dtype=float)
x = range(0, int(Steps), 1)
for j in range(0, N_Sim, 1):
S[j,0]= S0
for i in x[:-1]:
S[j,i+1]=S[j,i]+S[j,i]*(mu-0.5*pow(sigma,2))*dt+sigma*S[j,i]*sqrt(dt)*standard_normal();
plot(x, S[j])
title('Simulations %d Steps %d Sigma %.6f Mu %.6f S0 %.6f' % (int(N_Sim), int(Steps), sigma, mu, S0))
xlabel('steps')
ylabel('stock price')
show()
|
Tags: finance