A Monte Carlo simulation for price prediction in Python can be performed using the following steps:
- 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.
- Generate random samples: Use a random number generator, such as
numpy.random, to generate samples for the inputs to the model.
- 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.
- 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 = 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.