Financial Calculations & Valuation Intermediate

Monte Carlo Stock Price & Value-at-Risk (VaR) Simulation in Python

Run 10,000 Geometric Brownian Motion (GBM) price path simulations in Python NumPy to estimate future price probabilities and 95% Value at Risk (VaR).

#numpy#pandas

Problem Statement

Single-point price targets ignore tail risk. This vectorized NumPy script simulates 10,000 future price trajectories over 252 trading days in milliseconds.

Formula / Core Logic

S_t = S_0 * exp((mu - 0.5 * sigma^2) * dt + sigma * sqrt(dt) * Z) where Z ~ Normal(0, 1)

Installation

pip install numpy pandas
monte-carlo-simulation-stock-price-python.py
import numpy as np

def monte_carlo_gbm(s0, mu, sigma, days=252, simulations=10000):
    dt = 1 / 252
    z = np.random.standard_normal((days, simulations))
    daily_returns = np.exp((mu - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * z)
    price_paths = np.zeros_like(daily_returns)
    price_paths[0] = s0
    for t in range(1, days):
        price_paths[t] = price_paths[t - 1] * daily_returns[t]
    final_prices = price_paths[-1]
    var_95 = s0 - np.percentile(final_prices, 5)
    return {'Expected_Price': round(np.mean(final_prices), 2), 'Median_Price': round(np.median(final_prices), 2), 'VaR_95_Loss': round(var_95, 2)}

Get the Complete 100+ Python Quant & Automation Bundle

Instant lifetime access to all production-ready scripts, valuation models, and trading bots ($19).

Buy Full Bundle on Gumroad ($19) →

Frequently Asked Questions

Q: What does 95% VaR mean?

It represents the maximum expected loss over the horizon with 95% statistical confidence (the worst 5th percentile outcome).