How to do a geometric Brownian motion in Python

1 min

Geometric Brownian Motion (GBM) is a stochastic process that describes the evolution of the price of a financial asset over time. The model assumes that the stock price follows a log-normal distribution and that the change in the stock price is proportional to the current stock price and a normally distributed random variable.

In Python, you can model GBM by using the following formula to update the stock price at each time step:

price[t] = price[t-1] * np.exp((mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * e)

Where:

  • price[t] is the stock price at time t
  • price[t-1] is the stock price at time t-1
  • mu is the mean return of the stock
  • sigma is the standard deviation of the returns of the stock
  • dt is the time step (T/N, where T is the total time period and N is the number of time steps)
  • e is a random normal variable with mean 0 and standard deviation 1

Here's a simple Python script for GBM simulation:

import numpy as np

# Number of time steps
N = 252
# Total time period
T = 1
# Mean return
mu = 0.05
# Standard deviation of returns
sigma = 0.2
# Initial stock price
S = 100

# Time step
dt = T/N
# Initialize prices array
prices = np.zeros([N])
# First price is the initial price
prices[0] = S
# Loop through the remaining time steps
for i in range(1, N):
    # Generate random normal variable
    e = np.random.normal(0, 1)
    # Update the stock price using the geometric Brownian motion model
    prices[i] = prices[i-1] * np.exp((mu - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * e)

This script generates a simulation of the stock price over N time steps. The stock price at each time step is updated using the formula for GBM, with the np.random.normal function generating a random normal variable for the change in the stock price at each time step.