Arithmetic Brownian Motion
Table of Contents
Summary
Arithmetic Brownian Motion (ABM) — Louis Bachelier's original 1900
model of stock price movement, predating
Geometric Brownian Motion by
73 years — models a price that moves additively: the absolute change
per tick, not the percentage change, is normally distributed.
ores::analytics::quant::service::arithmetic_gaussian_mixture_model_process implements it
as the direct counterpart to gaussian_mixture_model_process, generalised the same way to a
K-component Gaussian mixture rather than a single Normal shock.
Layperson's mental model
Same idea as a bank balance you top up or draw down by a random amount each day — never a random percentage, always a random flat amount, regardless of how big the balance already is. A withdrawal of 50 is exactly as likely whether the balance is 100 or 100,000. This is the whole difference from Geometric Brownian Motion's "random percentage" framing — and it's also why, unlike GBM, this process has no floor: enough unlucky flat withdrawals in a row and the balance genuinely goes negative.
// Simplified for clarity: the real code guards sd == 0 (a degenerate // mixture component) separately, since std::normal_distribution asserts // on a zero stddev. const double increment = std::normal_distribution<double>(mean, sd)(rng_); price_ += increment; // a random flat amount, added
Detail
The SDE and its discretisation
ABM follows:
\begin{equation} dS = \mu\, dt + \sigma\, dW \end{equation}
Unlike GBM, neither the drift
nor the diffusion scales with the current level \(S\) — a wiggle of a given
size is exactly as likely whether \(S\) is currently 10 or 10,000. This SDE
is already exact (no Ito correction is needed, since \(S\) itself, not
\(\log S\), is the variable of interest), so the per-tick update
arithmetic_gaussian_mixture_model_process implements is a direct discretisation:
generalised the same way as gaussian_mixture_model_process to a K-component Gaussian
mixture for the increment, rather than a single Normal draw.
The trade-off: can go negative
Because the increment is unbounded in both directions with no state-dependence, an ABM path can, given enough time or a large enough downward shock, go negative — a property that makes it a poor model for a traded asset price (which cannot be negative in the ordinary case) but an entirely reasonable one for a quantity that genuinely can go negative, or where the modelling context does not require strict positivity — which is exactly why this codebase offers both processes rather than only GBM: the choice between them is a modelling decision about the quantity being generated, not a strictly-better-or-worse ranking of the two processes.
See also
- Stochastic Processes — the hub.
- Wiener Process — the \(dW\) term ABM is driven by.
- Geometric Brownian Motion — the multiplicative counterpart that stays strictly positive.
Further reading
- Bachelier, L. (1900). "Théorie de la spéculation." Annales Scientifiques de l'École Normale Supérieure, 3(17), 21-86. The original application of Brownian motion to option pricing, using the additive model this document describes — five years before Einstein's physics paper on Brownian motion, and predating a rigorous mathematical construction of the process itself by over two decades.
- Sullivan, E. J., & Weithers, T. M. (1991). "Louis Bachelier: The Father of Modern Option Pricing Theory." The Journal of Economic Education, 22(2), 165-171. Historical context on why Bachelier's largely unrecognised 1900 thesis anticipated much of modern quantitative finance by decades.
- Wikipedia: Brownian motion model of financial markets.