How to do a Monte Carlo simulation for price prediction in Python

1 min

A Monte Carlo simulation for price prediction in Python can be performed using the following steps:

  1. Define the underlying model: Define the relationships between the different variables that impact the price of the asset, such as stock returns, interest rates, dividends, and volatility.
  2. Generate random samples: Use a random number generator, such as numpy.random, to generate samples for the inputs to the model.
  3. Run multiple simulations: Use the model and the generated random samples to run multiple simulations of the price of the asset over a specified time period.
  4. Analyze the results: Analyze the distribution of the simulated prices to estimate the expected price, confidence intervals, and other relevant statistics.

Here's an example of how to perform a Monte Carlo simulation for stock price prediction in Python:

import numpy as np
import pandas as pd

# Define the simulation function
def monte_carlo_simulation(S, mu, sigma, T, N):
    # 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)
    # Return the simulated prices
    return prices

# 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
# Number of simulations
simulations = 10000

# Create a pandas dataframe to store the simulated prices
results = pd.DataFrame(index=range(N), columns=["sim" + str(i) for i in range(simulations)])
# Loop through the simulations
for i in range(simulations):
    # Run the simulation and store the result in the dataframe
    results["sim" + str(i)] = monte_carlo_simulation(S, mu, sigma, T, N)

# Calculate the mean, upper, and lower bounds of the simulated prices
mean = results.mean(axis=1)
upper = results.quantile(0.95, axis=1)
lower = results.quantile(0.05, axis=1)

In this script, the monte_carlo_simulation function generates a simulation of the stock price using a geometric Brownian motion model. The monte_carlo_simulation function is then run simulations times to get a set of simulated prices. The mean, upper, and lower bounds of the simulated prices are then calculated using pandas.