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:

\begin{equation} S_{t+1} = S_t + \text{increment}, \quad \text{increment} \sim N(\mu\, dt,\, \sigma^2 dt) \end{equation}

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

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.

Emacs 29.3 (Org mode 9.6.15)