💹 Option Pricing
Price European call and put options using Black-Scholes formula and Monte Carlo simulation. Explore the Greeks, implied volatility surface, and how option value changes with stock price and time.
About Options Pricing
Black-Scholes Model
The Black-Scholes formula (1973) gives a closed-form price for European options under assumptions of lognormal stock prices, constant volatility, and no dividends. The call price C = S·N(d₁) − K·e^(−rT)·N(d₂) depends on five inputs: current stock price S, strike K, risk-free rate r, volatility σ, and time to expiry T. Fischer Black and Myron Scholes (with Robert Merton) won the 1997 Nobel Prize in Economics for this formula.
The Greeks
The "Greeks" measure an option's sensitivity to input changes. Delta (Δ = ∂C/∂S) shows how much the option price changes per £1 move in the stock — it ranges from 0 to 1 for calls. Gamma (Γ = ∂²C/∂S²) measures the rate of delta change. Vega (∂C/∂σ) shows sensitivity to volatility — options become more valuable with higher volatility. Theta (∂C/∂T) is the daily time decay — options lose value as expiry approaches.
Monte Carlo Simulation
Monte Carlo simulation generates many random stock price paths using Geometric Brownian Motion: S(T) = S(0)·exp((r−σ²/2)T + σ·√T·Z), where Z is a standard normal variable. Averaging the discounted payoffs max(S(T)−K,0)·e^(−rT) over thousands of paths gives an unbiased estimate of the option price, and the error decreases as 1/√N. This approach extends naturally to path-dependent options (Asian, barrier) where no closed-form exists.
About this simulation
This simulation prices European call and put options with the Black-Scholes formula, cross-checks that price against an independent Monte Carlo simulation of geometric Brownian motion (GBM) stock paths, and derives the full set of option Greeks (delta, gamma, vega, theta, rho) so you can see exactly how sensitive an option's value is to each input.
🔬 What it shows
Two live views: a payoff/value diagram plotting the current Black-Scholes value (solid) against the payoff at expiry (dashed) as stock price S varies, and a Monte Carlo panel showing 50 simulated GBM price paths over 100 time steps to expiry. The averaged, discounted payoff from those paths is compared against the closed-form Black-Scholes price as a sanity check, alongside a put-call parity check.
🎮 How to use
Toggle between Call and Put, then drag the Stock price S, Strike K, Volatility σ, Risk-free rate r, and Time to expiry T sliders to see the option price, Greeks, and both charts update instantly. Try the presets — At-the-money, Deep ITM, Deep OTM, Short expiry, and LEAP (2yr) — to jump straight to instructive scenarios, such as comparing a near-expiry option's fast time decay to a 2-year LEAP's much flatter theta.
💡 Did you know?
Fischer Black, Myron Scholes, and Robert Merton's option pricing formula from 1973 still prices the vast majority of exchange-traded options today. Its accuracy relies on the assumption of constant volatility — real markets violate this, which is exactly why implied volatility "smiles" and "skews" exist and why Monte Carlo methods remain essential for pricing more exotic, path-dependent derivatives.
Frequently asked questions
What inputs does the Black-Scholes formula need?
Black-Scholes prices a European option from five inputs: current stock price S, strike price K, time to expiry T (in years), risk-free interest rate r, and volatility σ (the annualised standard deviation of returns). The formula computes two intermediate terms, d1 and d2, from these inputs and plugs them into the cumulative normal distribution to get the call price C = S·N(d1) − K·e^(−rT)·N(d2), with the put price following from put-call parity.
Why does the simulation also run a Monte Carlo simulation if Black-Scholes gives an exact answer?
The Monte Carlo panel exists to demonstrate that the two very different approaches agree, which builds confidence in both. It simulates 50 random stock price paths using geometric Brownian motion, S(T) = S(0)·exp((r−σ²/2)T + σ·√T·Z), then averages the discounted payoff max(S(T)−K,0)·e^(−rT) across all paths. Because Monte Carlo works for options with no closed-form solution (like Asian or barrier options), showing it converge to the Black-Scholes price here confirms the simulation engine is implemented correctly.
What do the Greeks (delta, gamma, vega, theta, rho) tell me?
Delta shows how much the option price moves per £1 change in the stock price and ranges from 0 to 1 for a call. Gamma is the rate of change of delta, highest for at-the-money options near expiry. Vega measures sensitivity to a 1-point change in volatility — options are always worth more when volatility rises. Theta is the daily time decay, typically negative, showing how much value the option loses purely from the passage of time. Rho measures sensitivity to the risk-free interest rate.
Why is my put-call parity check not exactly zero?
Put-call parity states that Call − Put should equal S − K·e^(−rT) for options with the same strike and expiry. The simulation displays "OK" whenever the discrepancy is below 0.01, which covers ordinary floating-point rounding in the normal-distribution approximation used for N(d1) and N(d2). A larger discrepancy would indicate a genuine arbitrage opportunity or a pricing bug, neither of which should occur with the closed-form Black-Scholes formula used here.
What happens to option value near expiry versus a 2-year LEAP?
Try the Short expiry preset (T ≈ 0.08 years, about a month) against the LEAP preset (T = 2 years): the short-dated option has almost no time value left, so its price sits close to its intrinsic value and theta decay is steep and visible day to day. The 2-year LEAP retains much more time value, decays far more slowly, and is far more sensitive to changes in volatility (higher vega) since there is more time for the stock to move.
Black-Scholes options pricing, Monte Carlo simulation and Greeks for financial derivatives.
3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install