Vasicek Process

Table of Contents

Summary

The Vasicek (1977) model was the first mean-reverting short-rate model in the finance literature — applying the Ornstein-Uhlenbeck process to a short rate \(r\) with a constant long-run level \(\theta\). ores::analytics::quant::service::vasicek_process implements it, not by reimplementing the OU mathematics again, but by composing hull_white_process with a constant \(\theta(t)\): Vasicek is the special case of Hull-White where the mean-reversion target does not vary over time.

Layperson's mental model

Vasicek is the elastic-band mental model applied to an interest rate specifically: the rate is pulled back toward a single, fixed long-run level whenever it wanders away, with random jitter layered on top. Nothing about the mental model changes from the general OU picture — only the label on the quantity being modelled changes, from "some quantity \(X\)" to "the short rate \(r\)".

vasicek_process::vasicek_process(
    double kappa, double theta, double sigma, double initial_rate, std::uint32_t seed)
    // Hull-White takes a *path* of targets, one per tick; wrapping a single
    // theta in a length-1 vector is what turns "the general, time-varying
    // model" into "the constant-target special case" -- Vasicek.
    : inner_(kappa, std::vector<double>{theta}, sigma, initial_rate, seed) {}

double vasicek_process::next() {
    return inner_.next();     // delegates straight to hull_white_process
}

The constructor is where the actual point lives, not next(): Vasicek's single theta is wrapped as a one-element theta_path, so every tick Hull-White looks up "the target for this tick" and always finds the same value. Vasicek isn't a distinct simulation at all — it's Hull-White, configured with a target schedule that never changes.

Detail

The SDE

\begin{equation} dr = \kappa(\theta - r)\, dt + \sigma\, dW \end{equation}

identical in shape to OU's SDE, with \(r\) (the short rate) in place of the general state variable \(X\). The exact per-tick discretisation is therefore the same closed-form OU update — vasicek_process gets it for free from hull_white_process rather than re-deriving it.

The closed-form bond price

Vasicek's defining contribution beyond the SDE itself is a closed-form zero-coupon bond price, derived by applying Ito's lemma to the short-rate SDE above to obtain the bond price's own dynamics, then solving the resulting PDE:

\begin{equation} P(t,T) = A(t,T)\, e^{-B(t,T)\, r_t} \end{equation}

This closed form is what made Vasicek practical to use for pricing before Monte Carlo simulation was cheap: the whole term structure implied by a given \((\kappa, \theta, \sigma, r_0)\) can be computed analytically, with no simulation at all.

dt is an explicit, separate parameter from kappa

\(\kappa\), \(\theta\), \(\sigma\), \(r_0\) are always expressed in the SDE's own time unit (conventionally years) — advancing the state or pricing a bond over a step of length \(dt\) (one tick) requires \(dt\) itself as a genuinely separate input, appearing as \(\kappa\,dt\) in the decay (\(e^{-\kappa\,dt}\)) and as \(dt\) itself in the bond-time accumulated per tick — never folded into \(\kappa\) or \(\sigma\) ahead of time by a caller. QuantLib's Engine.remote/QuantLib/ql/processes/ornsteinuhlenbeckprocess.cpp follows exactly this shape (speed, dt always separate arguments, never a pre-scaled composite); hull_white_process (which this class composes) follows the same convention. See Hull-White's own doc for the derivation, since vasicek_process inherits it unchanged rather than re-deriving it.

The trade-off: rates can go negative

Because Vasicek's volatility term \(\sigma\) (constant, not state-dependent) is inherited unchanged from OU, the short rate it generates is Gaussian and can go negative with positive probability, no matter how the parameters are chosen — a property long treated as an unrealistic modelling defect (nominal rates were assumed non-negative for decades) but one the negative-rate era across several major currencies since the 2010s has made considerably less objectionable in practice. This is precisely the property CIR was designed to rule out, at the cost of losing Vasicek's simple Gaussian transition.

See also

Further reading

  • Vasicek, O. (1977). "An Equilibrium Characterization of the Term Structure." Journal of Financial Economics, 5(2), 177-188. The original paper: the SDE, the closed-form bond price, and the first systematic equilibrium argument for a mean-reverting short-rate model.
  • Brigo, D., & Mercurio, F. (2006). Interest Rate Models — Theory and Practice (2nd ed.). Springer. Chapter 3 gives the standard modern derivation of the closed-form bond price and discusses the negative-rate property in the context of later model choices, including CIR and Hull-White.
  • Wikipedia: Vasicek model.

Emacs 29.3 (Org mode 9.6.15)