Stochastic Processes
Table of Contents
This is the hub note for stochastic processes as a modelling tool. Each linked note is a single focused concept; start here and follow the links.
1. Summary
A stochastic process is a random variable that evolves over time
according to a rule combining a deterministic drift with a random shock.
Two pieces of stochastic calculus underpin every process in this cluster:
the Wiener process (the
continuous-time random walk supplying that shock) and
Ito's lemma (the chain rule
that lets you change variables — e.g. from a rate to a bond price —
without leaving continuous time). Everything else in this cluster is one
of six concrete processes built on those two foundations, split into two
families: price processes, which model a quantity that can wander
without bound, and mean-reverting processes, which model a quantity
that is pulled back toward a long-run level. A third family, point
processes, models something else: not the level of a quantity but the
times at which events, such as ticks, arrive. The first place these
processes are put to use in ORE Studio is
ores.analytics.quant's
synthetic market data generators (FX spot, equity, and short-rate paths)
— but that is one consumer of a general-purpose toolkit, not what this
cluster is fundamentally about.
2. Detail
2.1. Foundations
- Random Walk — the discrete-time process of summing independent steps; the Wiener process is its continuous-time limit.
- Markov Property — the "no memory" property every process in this cluster has: the next state depends only on the current one.
- Wiener Process — continuous-time Brownian motion, \(dW\), the source of randomness every process below is driven by.
- Ito's Lemma — the stochastic chain rule, needed to derive e.g. a bond-price SDE from a short-rate SDE.
2.2. Price processes (unbounded)
- Arithmetic Brownian Motion —
additive increments (
price +increment=); implemented byarithmetic_gaussian_mixture_model_process. - Geometric Brownian Motion —
multiplicative, log-normal increments (
price *exp(log_return)=); implemented bygaussian_mixture_model_process. Both generalise their single-Gaussian textbook form to a K-component Gaussian mixture, reproducing fat tails and volatility clustering a single Normal shock cannot — see Volatility clustering and GARCH models for the companion discrete-time picture of that same fat-tail problem. Currently consumed for FX spot and equity price generation.
2.3. Mean-reverting processes
Mean reversion is the opposite behaviour to the unbounded wandering of the price processes above: instead of a random shock accumulating without limit, a mean-reverting process has a built-in pull back toward a long-run level whenever it drifts away — the further it strays, the harder it gets pulled back. Nothing stops it wandering away again on the very next tick, so the path still looks jittery moment to moment; what mean reversion changes is the long-run behaviour, not the short-run randomness — a mean-reverting path keeps circling back toward its target level instead of drifting off to arbitrarily large or small values the way an unbounded price process can. This is the natural shape for quantities that are anchored by some external equilibrium force (a central bank's policy target for an interest rate, for instance), whereas a price process is the natural shape for quantities with no such anchor at all.
- Ornstein-Uhlenbeck Process —
the general mean-reverting building block, \(dX = \kappa(\theta-X)\,dt +
\sigma\, dW\); implemented by
ornstein_uhlenbeck_process. - Vasicek Process — the OU
process applied to a short rate with a constant long-run level;
implemented by
vasicek_process, a thin wrapper composinghull_white_process. - Hull-White Process —
Vasicek generalised to a piecewise-constant, time-varying mean-reversion
level \(\theta(t)\), letting the process fit an observed initial term
structure exactly; implemented by
hull_white_process. - Cox-Ingersoll-Ross (CIR)
Process — Vasicek with a \(\sigma\sqrt{r}\) volatility term that keeps
the rate non-negative, at the cost of a non-Gaussian (non-central
chi-squared) transition density; implemented by
cox_ingersoll_ross_process.
Currently all four are consumed as short-rate models; the underlying maths applies to any quantity that reverts to a long-run level, not just a rate.
2.4. How the mean-reverting family relates
Vasicek, Hull-White, and CIR are not three independent models — they are three points on one design axis, all sharing the OU drift shape \(\kappa(\text{target} - X)\):
| Process | Volatility term | Mean-reversion target | Can go negative? |
|---|---|---|---|
| OU | \(\sigma\) (const.) | constant \(\theta\) | yes |
| Vasicek | \(\sigma\) (const.) | constant \(\theta\) | yes |
| Hull-White | \(\sigma\) (const.) | time-varying \(\theta(t)\) | yes |
| CIR | \(\sigma\sqrt{r}\) | constant \(\theta\) | no |
Vasicek is literally the \(\theta(t) = \text{const}\) special case of Hull-White —
vasicek_process composes hull_white_process rather than
reimplementing it. CIR cannot be reached from Hull-White by any
parameter substitution: its non-negativity comes from a genuinely
different volatility term, which is also why its exact transition
requires the Poisson-mixture-of-central-chi-squared construction
described in its own atomic doc, rather than the closed-form Gaussian
update the other three share.
2.5. Point processes (arrival times)
The processes above answer "what is the level now?". A point process answers "when does the next event happen?". It is the third family, and its foundation note defines the conditional intensity that all of them share.
- Point Process and Conditional Intensity — the rate of events given the history, the compensator, and the time-rescaling test.
- Poisson Process — a constant intensity; memoryless exponential gaps.
- Hawkes Process — each event raises the intensity for a while; bursts breed bursts. It reduces to the Poisson process when its branching ratio is zero.
These do not implement i_stochastic_process, because next() there returns a
level. Their consumer, and the interface they sit behind, are in
Tick arrival.
2.6. Current consumer: synthetic data generation
ores::analytics::quant::service::process_factory constructs the
concrete process an ir_curve_generation_config or
market_data_generation_config names, behind the common
i_stochastic_process interface every process implements — the
generation loop that drives next() on whichever process was
configured does not need to know which one it got. This is the first,
not the only, place these processes are expected to be used in ORE
Studio.
The synthetic volatility surfaces use the mean-reverting family for something other than a rate. The forward variances of an SSVI surface are Cox-Ingersoll-Ross processes, because a variance must stay positive, and its skew and curvature are Ornstein-Uhlenbeck processes mapped into their bounds, as the option vol surface section of Synthetic market data generation: approach describes. The FX spot price processes carry a daily GJR-GARCH variance, a discrete-time model outside this cluster, described in Volatility clustering and GARCH models.
3. See also
- ORE Studio — the system these processes are currently used in.
- Probability measures: P (real-world) and Q (risk-neutral) — these processes are calibrated/sampled under the real-world \(P\) measure for data generation, as distinct from the $Q$-measure dynamics ORE's pricing engines use.
- Volatility clustering and GARCH models — the discrete-time counterpart to the Gaussian-mixture fat-tail problem the price processes address.
- Tick arrival — how the point processes pace a feed's ticks.
3.1. Further reading
- Wikipedia: Stochastic process.