Processes
All processes in market_model implement the Simulatable trait, which
provides a uniform interface for the simulation runner.
Available processes
Geometric Brownian Motion
$$dS_t = \mu S_t dt + \sigma S_t dW_t$$
The simplest model. Log-normal returns, constant volatility. Closed-form expected value and variance.
Ornstein-Uhlenbeck
$$dX_t = \theta(\mu - X_t) dt + \sigma dW_t$$
Mean-reverting process with constant diffusion. Used for interest rates, spreads, or volatility.
Cox-Ingersoll-Ross
$$dv_t = \kappa(\theta - v_t) dt + \sigma \sqrt{v_t} dW_t$$
Non-negative mean-reverting process. Used for variance and intensity modeling. Full truncation enforces the non-negativity constraint.
Heston
$$dS_t = \mu S_t dt + \sqrt{v_t} S_t dW_t^S$$ $$dv_t = \kappa(\theta - v_t) dt + \sigma \sqrt{v_t} dW_t^v$$
Two-factor model with correlated Brownian motions. Captures the volatility smile. The Cholesky decomposition of the correlation matrix is applied in each step.
Jump Diffusion
$$dS_t = \mu S_t dt + \sigma S_t dW_t + dJ_t$$ $$dJ_t = (e^Z - 1) dN_t, \quad Z \sim \mathcal{N}(\mu_J, \sigma_J^2)$$
GBM with compound Poisson jumps and log-normal jump sizes. Models sudden large moves that a pure diffusion misses.
Bates
Heston with Merton-style log-normal jumps on the price process. Reduces to Heston when lambda = 0.
Hawkes
$$\lambda(t) = \mu + \int_0^t \phi(t-s) dN_s$$
Self-exciting intensity process. Two kernel options:
- Exponential: $\phi(t) = \alpha e^{-\beta t}$ -- fast, one decay rate.
- Power law: $\phi(t) = \frac{\alpha}{(c+t)^p}$ -- heavy-tailed decay.
Simulated via Ogata's thinning algorithm. Has dim() = 0 (no Brownian
driver) because all randomness comes from the acceptance-rejection step.
Rough Ornstein-Uhlenbeck
Fractional OU with Hurst parameter $H$. The kernel $t^{H-1/2}$ is approximated by a sum of exponentials (Abi Jaber 2019). The number of factors controls the accuracy-speed tradeoff.
Adding a new process
- Create
market_model/src/process/your_model.rs. - Implement
Simulatablewith your state type,dim(),step(), andcurrent(). - Add
pub mod your_modeland a re-export toprocess/mod.rs. - Add a test comparing Monte Carlo moments against analytical expectations.
- Add a criterion benchmark against the GBM baseline.