Skip to content

    Under active development. New calculators and features ship every week. Everything currently runs free while the site matures — pricing pages are a preview, checkout is not open yet.

    Finance / Commodity Mean-Reversion Schwartz Engine

    Commodity Mean-Reversion Calculator (Schwartz)

    Model mean-reverting commodity prices with the Schwartz (1997) one-factor model. Build the futures curve, half-life, and terminal price distribution instantly.

    ToolCalculatorExecutionIn browserCategoryFinancial
    ZorvLabs · Commodity Mean Reversion

    Commodity Mean Reversion Calculator

    Exact Schwartz (1997) one-factor mean-reverting log-spot model with closed-form futures pricing, analytic terminal distribution, fan bands, and 2D / 3D / Both views.
    Calculation method
    closed-form
    No Monte Carlo. Every curve and surface is analytic.
    Futures @ horizon
    67.5542
    Exact under EMM
    Asymptotic futures
    67.5598
    T → ∞ limit
    Log-spot half-life
    0.5134
    ln 2 / κ years
    Terminal σ(S_T)
    11.5955
    Exact lognormal std
    View mode
    3D surface
    Display scale
    Spot S0
    Long-run mean log price a
    Mean reversion speed κ
    Volatility σ
    Market price of risk shift A
    Horizon T (years)
    Surface min factor
    Surface max factor
    Surface X resolution
    Surface Y resolution
    Fan quantile z-score
    a*
    4.19850
    Paper notation: a* = a − A
    E[ln S_T]
    4.19841
    Risk-neutral terminal mean
    95% terminal spot
    88.1199
    Exact lognormal quantile
    5% terminal spot
    50.3060
    Exact lognormal quantile
    Model 1 core: dX_t = κ(a − X_t)dt + σdZ_t, with risk-adjusted mean a* used in the futures formula.
    Closed-form futures: F(S,T) = exp(E[X_T] + ½Var[X_T]).
    2D term structure
    Exact futures curves for three starting spot levels
    Futures price term structure F(S0,T)T (years)F0.001.002.003.004.005.0049.6054.5659.5264.4869.4474.40S0 × 0.8S0S0 × 1.2
    2D exact fan chart
    Lognormal terminal distribution for the selected horizon
    Terminal spot distribution bandT (years)spot0.001.002.003.004.005.0049.8657.5165.1772.8280.4788.12Mean futures/spot5% / 95% band
    2D density slice
    Exact terminal density at the selected horizon
    f(S_T | S0, T = 5.00y)24.842.259.576.994.2111.65%95%
    3D exact surface
    Futures price surface over initial spot and maturity
    3D exact futures-price surface F(S0,T)S0 / S_TTFsurface grid56 × 64 cells · max F = 111.600000
    Model equations
    Schwartz (1997), Model 1
    Spot process: dS = κ(γ − ln S)Sdt + σSdZ and, by Itô, dX = κ(a − X)dt + σdZ.
    Risk-adjusted mean: a* = a − A in the paper's notation.
    Conditional law: E[X_T] = e^(−κT)X_0 + (1 − e^(−κT))a* and Var[X_T] = (σ² / 2κ)(1 − e^(−2κT)).
    Closed-form futures: F(S,T) = exp(E[X_T] + ½Var[X_T]) under the constant-rate assumption, matching the paper’s forward/futures pricing formula.
    finance methodology

    A clear path from inputs to results.

    Model a commodity price that is pulled back toward a long-run level over time, using the Schwartz (1997) one-factor mean-reverting model. It produces the futures-price term structure, the probability distribution of the future spot price, and uncertainty bands, which helps energy and commodity analysts and students see how mean reversion shapes forward curves.

    Step-by-step methodWorked exampleAssumptions explained

    How to use

    1. Set the current spot price S0 and the long-run mean of the log price a — the level (in log terms) the price gravitates toward.
    2. Set the mean-reversion speed kappa; larger values pull the price back to the long-run level faster and shorten the half-life.
    3. Set the volatility sigma, the instantaneous volatility of the log price.
    4. Set the market-price-of-risk shift A; the model uses the risk-adjusted mean a* = a - A in the futures formula to move from real-world to pricing dynamics.
    5. Choose the horizon T (years) and, optionally, the fan-chart quantile and surface resolution to control the plotted distribution.
    6. Read the metric cards: the futures price at the horizon, the asymptotic (long-maturity) futures level, the log-price half-life, and the terminal spot-price standard deviation.

    The formula

    dXt=κ(a−Xt) dt+σ dZt,  Xt=ln⁡St,F(S,T)=exp⁡ ⁣(e−κTln⁡S+(1−e−κT)a∗+σ24κ(1−e−2κT))dX_t = \kappa(a - X_t)\,dt + \sigma\,dZ_t,\; X_t=\ln S_t, \quad F(S,T) = \exp\!\Big(e^{-\kappa T}\ln S + (1-e^{-\kappa T})a^{*} + \tfrac{\sigma^2}{4\kappa}(1-e^{-2\kappa T})\Big)

    Reference: Schwartz, E. S. (1997), "The Stochastic Behavior of Commodity Prices: Implications for Valuation and Hedging," Journal of Finance 52(3), 923-973 (Model 1).

    Worked example

    Oil-like commodity, 5-year futures and terminal distribution

    Inputs
    • Spot S0 = 62; long-run mean log price a = ln(70) = 4.248495; mean-reversion speed kappa = 1.35; volatility sigma = 0.28; market-price-of-risk shift A = 0.05; horizon T = 5 years.
    Calculation path
    1. 1

      The risk-adjusted long-run mean is a* = a - A = 4.248495 - 0.05 = 4.198495. The conditional mean of the log price at T = 5 is E[ln S_T] = ln(62)*e^{-1.35*5} + 4.198495*(1 - e^{-1.35*5}) = 4.198412, and its variance is Var[ln S_T] = (0.28^2 / (2*1.35))*(1 - e^{-2*1.35*5}) = 0.029037. The futures price is F = exp(E + Var/2) = exp(4.198412 + 0.014519) = 67.5542. The long-maturity asymptote is exp(a* + sigma^2/(4*kappa)) = 67.5598, and the half-life of a deviation is ln(2)/1.35 = 0.5134 years (about 6.2 months). The lognormal 5% and 95% spot quantiles are 50.31 and 88.12.

    Result

    5-year futures price 67.55 (versus a 62 spot), an asymptotic futures level of 67.56, a 0.513-year mean-reversion half-life, and a 90% terminal spot range of roughly 50.3 to 88.1.

    Interpreting the result

    Because the spot (62) sits below the risk-adjusted long-run level (exp(a*) = 66.59), the futures curve slopes upward toward that level, and by 5 years it has essentially arrived — the 5-year futures (67.55) is already at the long-maturity asymptote (67.56). The half-life tells you how quickly deviations decay: with kappa = 1.35 a shock is half-corrected in about six months. The small gap between the median and the mean futures price is the lognormal convexity adjustment (+Var/2); mean reversion caps how fast the terminal variance grows, which is why the fan bands widen quickly then stabilize.

    Assumptions & limitations

    • A single factor drives the price with constant parameters; it ignores stochastic volatility, seasonality, and stochastic convenience yield that matter for many real commodities.
    • The log price is a Gaussian Ornstein-Uhlenbeck process, so the spot price is exactly lognormal at every horizon.
    • The market price of risk enters only as a constant shift A to the long-run mean; it is not calibrated to a live futures curve inside the tool.
    • Futures and forward prices are treated as equal, which assumes deterministic (or independent) interest rates.
    • Curves and bands are the model's analytic mean, variance, and quantiles, not simulated sample paths, and parameters are user inputs rather than fitted to historical data.

    Frequently asked questions

    What does mean reversion mean for a commodity price?

    It means the price is pulled back toward a long-run equilibrium level rather than wandering freely like a stock. Economically, high prices encourage extra supply and demand destruction that push the price down, while low prices do the opposite. The Schwartz model captures this with a restoring force kappa*(a - X) on the log price.

    Why is the futures price different from the spot price?

    Under mean reversion the futures price reflects where the price is expected to drift, not just today's spot. Here the spot (62) is below the risk-adjusted long-run level, so the futures curve rises toward it, reaching about 67.55 at 5 years. If the spot were above the long-run level the curve would slope downward instead.

    How does this one-factor model differ from two-factor commodity models?

    This is Schwartz Model 1, with a single mean-reverting factor. Model 2 and the Schwartz-Smith model add a second factor (a stochastic convenience yield or a long-term equilibrium level), which lets the long end of the futures curve move and improves fits for commodities with persistent trends. The one-factor version is simpler and ideal for understanding the core mean-reversion mechanics.

    What is the half-life and how is it computed?

    The half-life is the time for a deviation from the long-run mean to shrink by half, equal to ln(2)/kappa. With kappa = 1.35 it is about 0.513 years, or roughly six months. A larger kappa means faster reversion and a shorter half-life, which flattens the far end of the futures curve more quickly.

    What is the market-price-of-risk shift A?

    A adjusts the real-world long-run mean a down to the risk-neutral (pricing) mean a* = a - A used for futures valuation. It compensates for the risk premium embedded in commodity forward prices. Setting A = 0 makes the risk-neutral and real-world means coincide, which generally over- or under-states market futures prices.

    Why is the terminal spot distribution lognormal?

    The model makes the log price X = ln S a Gaussian Ornstein-Uhlenbeck process, so X_T is normally distributed and therefore S_T = exp(X_T) is lognormal. That is why the tool can report exact 5% and 95% spot quantiles (50.31 and 88.12 here) and an exact terminal standard deviation without simulation.

    Methodology last reviewed 2026-10-06. Results are informational and not financial or engineering advice — see our disclaimer.