Price rarely travels far from its moving average without snapping back, and the cleanest way to mechanize that observation is distance: measure how far the close sits from a reference average and fade the move once it stretches past a threshold. We used the 50-period simple moving average and a 3% stretch — short when price closes 3% or more above the 50 SMA, long when it closes 3% or more below — which on 15-minute crypto is a genuinely over-extended reading rather than ordinary noise.
We ran it as a machine would: fade at the threshold, 1.5×ATR(14) stop, 1.5R target, on 15-minute candles from 12 months of real Binance 1-minute data on BTC and ETH — both directions, 1% risk, 0.05% commission per side, the same deterministic engine behind Secuora’s AI backtester. The result splits sharply by symbol, which is the interesting part. On BTC the 3% threshold was rare enough that the rule traded under a hundred times all year, kept its drawdown in the low double digits, and finished only mildly negative with a profit factor near 0.9 — close to viable. On ETH the same threshold tripped far more often, the trade count multiplied, and the strategy lost heavily with a much deeper drawdown. Same rule, two temperaments. Full numbers below.
Verified Result
Weak: the mechanical version barely cleared, or failed to clear, the fee hurdle.
| Market | TF | Trades | Win | PF | Max DD | Net |
|---|---|---|---|---|---|---|
| BTC | 15m | 96 | 41.7% | 0.90 | 12.2% | -5.9% |
| ETH | 15m | 349 | 35.0% | 0.67 | 55.9% | -53.3% |
How the SVS 32 breaks down ▾
12 months of real 1-minute data, fees on (0.05%/side), $10k start, 1% risk. How the score works →
The exact rules we tested
- Compute the 50-period simple moving average (50 SMA) on 15-minute candles.
- Short when the close sits 3% or more above the 50 SMA (fade the over-extension upward).
- Long when the close sits 3% or more below the 50 SMA (fade the over-extension downward).
- Stop 1.5×ATR(14) from entry; target 1.5R.
- No session filter — crypto trades 24/7, so every qualifying stretch is faded, both directions.
- Risk 1% of equity per trade; 0.05% commission per side; 10× max notional leverage.
Results
Binance spot 1-minute klines (data-api.binance.vision), aggregated per strategy timeframe · starting balance $10,000 · risk 1%/trade · Commission 0.05% per side; no spread/slippage modeled (BTC/ETH spot spreads are sub-basis-point); position size capped at 10× notional leverage. Generated 2026-06-12 by the Secuora ai-strategy deterministic runner (same engine as the in-app AI backtester).
| Month | Trades | Win rate | Net P&L |
|---|---|---|---|
| 2025-06 | 5 | 80% | $438 |
| 2025-07 | 2 | 0% | −$238 |
| 2025-08 | 2 | 50% | $27 |
| 2025-10 | 8 | 50% | $129 |
| 2025-11 | 11 | 27% | −$460 |
| 2025-12 | 14 | 43% | −$67 |
| 2026-01 | 6 | 33% | −$168 |
| 2026-02 | 29 | 41% | −$143 |
| 2026-03 | 13 | 46% | $54 |
| 2026-04 | 6 | 33% | −$160 |
| Month | Trades | Win rate | Net P&L |
|---|---|---|---|
| 2025-06 | 30 | 30% | −$961 |
| 2025-07 | 23 | 26% | −$894 |
| 2025-08 | 29 | 34% | −$545 |
| 2025-09 | 9 | 33% | −$188 |
| 2025-10 | 42 | 31% | −$905 |
| 2025-11 | 46 | 39% | −$310 |
| 2025-12 | 34 | 32% | −$577 |
| 2026-01 | 19 | 42% | −$44 |
| 2026-02 | 61 | 34% | −$691 |
| 2026-03 | 37 | 43% | −$44 |
| 2026-04 | 16 | 31% | −$243 |
| 2026-05 | 3 | 67% | $75 |
Assumptions (how loose terms were pinned down)
- Fade when close stretches >=3% from the 50 SMA; 1.5x ATR stop; 1.5R
The same threshold means two different strategies on BTC and ETH
A fixed 3% threshold is not actually the same filter across instruments, because instruments do not share volatility. BTC reaches 3% from its 50 SMA on a 15-minute chart only rarely, so the rule was selective by accident — fewer than a hundred trades all year, a drawdown in the low double digits, a profit factor near 0.9 and only a mild net loss. That is a strategy that is close to working and would reward a small refinement. ETH is more volatile, so the identical 3% threshold tripped far more frequently; the trade count multiplied, far more of those fades got run over by continuation, and the result was a heavy loss with a drawdown more than four times BTC’s. The lesson is general: any absolute-percentage threshold quietly becomes a different strategy on every instrument, and a volatility-relative threshold (distance measured in ATRs or standard deviations) is usually the fix.
There is also the eternal mean-reversion tension underneath. Fading over-extension works beautifully in balance and gets destroyed in trends — exactly when price stretches far from its average and keeps going. The threshold is a knife-catch generator by construction, and the months that hurt are the trending ones where every fade was early. BTC’s gentler result was partly luck of regime and partly the accidental selectivity of a high bar on a lower-volatility instrument; ETH’s shows what the same idea does when it fires constantly into momentum. The honest next step is not to abandon the fade but to make the threshold volatility-aware and add a regime gate so you only fade when the market is actually ranging.
How to backtest moving-average reversion on Secuora
A moving average and a distance-from-average condition are built-in primitives of the AI backtester, so this fade automates end to end — and the BTC/ETH split is worth reproducing yourself.
- Open /backtest/ai and describe it in plain English: "short when price closes 3% above the 50 SMA, long when it closes 3% below, 1.5×ATR stop, 1.5R target, 15-minute candles." It compiles to the same engine that produced this page.
- Run it on BTC and ETH with costs on and confirm you reproduce the split — BTC near-viable and selective, ETH heavily negative and frequent — which is the entire lesson of the page.
- Replace the fixed 3% with a volatility-relative stretch (a number of ATRs from the average) so the filter means the same thing on both symbols, and watch ETH’s trade count fall toward BTC’s.
- Sign up free and use the replay terminal — plot the 50 SMA and replay a trending month bar by bar with simulated orders to feel how a fade keeps catching a knife when price stretches and keeps going.
- Journal the fades you would actually take, with the emotion and rules-followed fields filled in — fading strength is psychologically hard, and the journal is where you catch yourself overriding the plan.
Methodology, in one paragraph
Data: Binance spot 1-minute klines (data-api.binance.vision), aggregated per strategy timeframe, June 1, 2025 – June 1, 2026 (12 months). Execution: Secuora’s deterministic strategy runner (the same engine behind the in-app AI backtester) — single position at a time, entries at the close of the signal candle, commission 0.05% per side; no spread/slippage modeled (btc/eth spot spreads are sub-basis-point); position size capped at 10× notional leverage, starting balance $10,000, 1% risk per trade. Swings are confirmed fractals with no look-ahead. These are mechanical results: no discretion, every signal taken. Past performance does not predict future results; this is research, not financial advice.
Frequently asked questions
What is moving-average distance reversion?
A mean-reversion strategy that measures how far price has stretched from a reference moving average and fades the move once the distance crosses a threshold — here, shorting when the close is 3% or more above the 50 SMA and buying when it is 3% or more below, betting price snaps back toward the average.
What win rate does fading the 50 SMA have?
In our 15-minute test the win rate ran in the mid-30s to low-40s, differing by symbol. With a 1.5R target that is around the breakeven line before costs, and after fees both symbols finished negative — BTC only mildly (profit factor near 0.9), ETH heavily. The exact figures are in the results table above.
Does mean reversion from a moving average work on crypto?
Mixed, and revealingly so. The same 3%-from-50-SMA rule was nearly viable on BTC (selective, shallow drawdown, profit factor near 0.9) and a heavy loser on ETH, because a fixed percentage threshold trips far more often on the more volatile symbol. A volatility-relative threshold and a ranging-regime filter are the obvious fixes, and this baseline is what they have to beat.
How do I backtest a moving-average reversion strategy myself?
Two ways on Secuora: describe the fade in plain English at /backtest/ai — moving averages and distance-from-average conditions are built-in primitives that compile to the same deterministic engine used here — or sign up free, plot the 50 SMA in the replay terminal, and fade the stretches bar by bar with simulated stop-loss and take-profit orders.
