Welcome, guest | Sign In | My Account | Store | Cart

Brownian Motion of a Stock

Python, 35 lines
 ``` 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() ```
 Created by alexander baker on Tue, 19 May 2009 (MIT)