Ornstein-Uhlenbeck Mean Reversion
Models price as an Ornstein-Uhlenbeck process and trades when price deviates from estimated long-term mean. Uses half-life to filter for tradeable mean-reversion speed.
At a glance
What the backtest shows
- Beat buy-and-hold on 2 of 10 markets by annual return over 5 years.
- Had a smaller maximum drawdown than buy-and-hold on 10 of 10 markets.
- Best market by Sharpe ratio: USO (Sharpe 0.46, CAGR 4.4%).
- Weakest market: UNG (Sharpe -0.68, CAGR -14.3%).
Equity curve
Score and risk profile
Each bar is a percentile against every strategy on the same market and window (100 = best).
How it held up in sell-offs (SPY)
| Period | Strategy | Buy & hold |
|---|---|---|
| Q4 2018 sell-off | -11.5% | -19.2% |
| COVID crash (Feb–Mar 2020) | -8.7% | -33.7% |
| 2022 bear market | -3.8% | -24.5% |
| Market above its 200-day average (annualized) · 81% | +2.4% | +12.5% |
| Market below its 200-day average (annualized) · 19% | -6.0% | +19.8% |
Sell-off dates follow the US stock market. Above/below the 200-day average uses the previous day's position, so there is no look-ahead.
Out-of-sample check (SPY)
| Check | Value |
|---|---|
| Chosen parameters on their 3-year training windows (average Sharpe) | 0.38 |
| Same parameters in the following 6 months, when traded (Sharpe) | 0.31 |
| Default parameters over the same months (Sharpe) | 0.22 |
| Parameter re-selections / changes | 28 / 9 |
| Parameter settings with a positive Sharpe (full history) | 6 of 9 |
| Sharpe across settings: worst / median / best | -0.24 / 0.08 / 0.20 |
Out-of-sample periods start on 2013-01-04. Training-window figures are flattered by picking the best of 9 settings; the out-of-sample figure is what the strategy actually earned. A large drop, or a result that depends on one setting, points to overfitting. How walk-forward testing works.
Results by market (5 years)
| Market | CAGR | Buy & hold CAGR | Sharpe | Max drawdown | Buy & hold max DD | Volatility | Arena Score |
|---|---|---|---|---|---|---|---|
| USOUnited States Oil Fund | 4.4% | 20.2% | 0.46 | -14.5% | -36.2% | 10.6% | 51 |
| DBAInvesco DB Agriculture | 0.9% | 8.8% | 0.25 | -6.3% | -15.9% | 4.0% | 38 |
| SPYSPDR S&P 500 | 1.1% | 11.6% | 0.24 | -6.5% | -24.5% | 5.0% | 40 |
| DBCInvesco DB Commodity Index | 1.1% | 10.8% | 0.20 | -10.6% | -27.3% | 6.5% | 33 |
| GLDSPDR Gold Shares | -1.3% | 16.4% | -0.21 | -12.2% | -28.3% | 5.5% | — |
| BTC-USDBitcoin | -7.3% | 2.6% | -0.28 | -33.4% | -75.9% | 14.8% | 15 |
| ETH-USDEthereum | -9.8% | -15.1% | -0.36 | -41.0% | -79.0% | 16.0% | 25 |
| EURUSD=XEUR/USD | -0.7% | -0.7% | -0.38 | -6.0% | -17.2% | 1.8% | 28 |
| SLViShares Silver Trust | -5.0% | 15.2% | -0.48 | -24.2% | -57.8% | 9.7% | 12 |
| UNGUnited States Natural Gas | -14.3% | -30.7% | -0.68 | -60.6% | -93.3% | 20.1% | 19 |
Strategy metrics use daily returns without trading costs. Buy-and-hold figures are for the same market and window. Rows are sorted by Sharpe ratio.
SPY across time windows
Rules
Entry
Buy when z < -Entry_Std and halflife in valid range
Exit
Exit when |z| < Exit_Std
Indicators
OU parameters (mu, theta, sigma) Half-life Z-score
Inputs
Lookback = 60 Entry_Std = 1.5 Exit_Std = 0.5 Min/Max Halflife = 1-30
Position sizing
Fixed 100% allocation
Risk controls
Only trade when half-life between 1-30 days
Strategy evidence
- BTC-USD · Inspect evidence 2026-11-10
- DBA · Inspect evidence 2026-11-10
- DBC · Inspect evidence 2026-11-10
- ETH-USD · Inspect evidence 2026-11-10
- EURUSD=X · Inspect evidence 2026-11-10
- GLD · Inspect evidence 2026-11-10
- SLV · Inspect evidence 2026-11-10
- SPY · Inspect evidence 2026-11-10
- UNG · Inspect evidence 2026-11-10
- USO · Inspect evidence 2026-11-10
Only available, validated bundles appear below. Missing evidence is not a passing validation result.
Evidence coverage
10 / 10 declared strategy–market pairs validated
Notes
- Based on OU stochastic differential equation: dX = theta*(mu-X)*dt + sigma*dW
- Half-life provides guidance on expected holding period
- Parameter estimation via OLS regression
Related strategies
Embed this score
Add the live badge to a blog post, README or forum signature. It updates with the daily data.
<a href="https://quantarenas.com/strategy/mr-04-ornstein-uhlenbeck-mean-reversion/"><img src="https://quantarenas.com/badge/mr-04-ornstein-uhlenbeck-mean-reversion.svg" alt="Ornstein-Uhlenbeck Mean Reversion Arena Score on Quant Arena" height="20"></a>
[](https://quantarenas.com/strategy/mr-04-ornstein-uhlenbeck-mean-reversion/)
Backtests are historical simulations on daily data and do not include commissions or slippage. They do not guarantee future results and are not investment advice. See the methodology for how every strategy is tested.