Rate of change is momentum reduced to one number: the percentage move over the last N bars. The momentum-continuation reading bets that strength begets strength — when price has already moved hard over a lookback window, it tends to keep going a while longer. We used a 24-bar lookback and a ±5% threshold on hourly candles: go long when 24-bar ROC pushes above +5%, go short when it drops below −5%, riding the established move rather than fading it.
We ran it mechanically: enter in the direction of the ROC break, 1.5×ATR(14) stop, 2R target, on hourly 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 is the familiar momentum shape: a low win rate around the high 20s on both symbols, because most momentum bursts have already half-spent themselves by the time a fixed threshold confirms them, and not enough of the continuations ran far enough to make the 2R target pay. Both symbols lost, BTC by less on far fewer trades, ETH by more on a higher count. 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 | 1h | 58 | 29.3% | 0.73 | 16.1% | -10.8% |
| ETH | 1h | 203 | 28.1% | 0.69 | 39.3% | -36.3% |
How the SVS 31 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 24-bar rate of change (ROC) on hourly candles — the percentage change over the prior 24 bars.
- Go long when ROC pushes above +5% (momentum continuation upward).
- Go short when ROC drops below −5% (momentum continuation downward).
- Stop 1.5×ATR(14) from entry; target 2R.
- No session filter — crypto trades 24/7, so every qualifying ROC break is taken, 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 | 1 | 0% | −$113 |
| 2025-07 | 2 | 0% | −$215 |
| 2025-10 | 5 | 20% | −$223 |
| 2025-11 | 10 | 30% | −$158 |
| 2025-12 | 6 | 33% | −$46 |
| 2026-01 | 3 | 0% | −$295 |
| 2026-02 | 19 | 37% | $66 |
| 2026-03 | 8 | 25% | −$230 |
| 2026-04 | 4 | 50% | $137 |
| Month | Trades | Win rate | Net P&L |
|---|---|---|---|
| 2025-06 | 24 | 29% | −$440 |
| 2025-07 | 14 | 14% | −$819 |
| 2025-08 | 29 | 17% | −$1,286 |
| 2025-09 | 8 | 25% | −$191 |
| 2025-10 | 20 | 40% | $195 |
| 2025-11 | 21 | 38% | $140 |
| 2025-12 | 14 | 21% | −$440 |
| 2026-01 | 15 | 20% | −$489 |
| 2026-02 | 31 | 29% | −$371 |
| 2026-03 | 19 | 37% | $48 |
| 2026-04 | 8 | 38% | $23 |
Assumptions (how loose terms were pinned down)
- ROC over 24 bars beyond +/-5%; 1.5x ATR stop; 2R
Why momentum confirmation arrives late, and what the low win rate means
A threshold on a 24-bar rate of change is a lagging confirmation by design. By the time price has moved 5% over the lookback window, a meaningful chunk of the burst is already behind you — you are entering on evidence that the move happened, not on the move beginning. That late entry is exactly why momentum-continuation rules run low win rates: a high-20s hit rate on both BTC and ETH here, which a 2R target needs roughly a third of just to break even. The rule cleared that bar on raw direction but not after costs, because the winners that did run were not frequent or large enough to cover the many entries that confirmed right as the move exhausted and reversed into the stop.
This is not a verdict against momentum — momentum is one of the most robust effects in markets — but a comment on this specific, unfiltered mechanization. The 2R target may be cutting winners that momentum would have carried much further; a trailing stop that lets a real trend run, rather than a fixed multiple, is the classic momentum fix and is worth testing directly against this baseline. The threshold and lookback are also free parameters: a longer ROC window confirms slower-but-truer moves, a shorter one fires earlier on weaker ones. And momentum, like every directional rule here, is regime-bound — it pays in trends and bleeds in the chop, and the monthly table shows which side of that each month landed on.
How to backtest ROC momentum on Secuora
Rate of change is a built-in primitive of the AI backtester, so the momentum-continuation rule automates end to end — and the obvious improvement, a trailing exit, is one prompt away.
- Open /backtest/ai and describe it in plain English: "go long when 24-bar ROC rises above +5%, short when it falls below −5%, 1.5×ATR stop, 2R target, hourly 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 low-win-rate, net-negative result above — momentum’s signature shape.
- Swap the fixed 2R target for a trailing stop so winners can run with the trend, and compare expectancy — this is the single most informative change you can make to a momentum rule.
- Change one parameter per run: lengthen or shorten the ROC lookback, move the ±5% threshold, or add a higher-timeframe trend filter so you only take momentum in the dominant direction.
- Sign up free and use the replay terminal — add the ROC or a momentum oscillator as one of your two free indicators and replay a trending stretch bar by bar with simulated orders to feel how late a fixed threshold confirms.
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 the rate-of-change (ROC) momentum strategy?
Rate of change measures the percentage price move over the last N bars. The momentum-continuation version trades in the direction of strength: go long when ROC pushes above a positive threshold and short when it drops below a negative one — here, ±5% over a 24-bar lookback on hourly candles — betting an established move continues.
What win rate does ROC momentum have?
A low win rate around the high 20s on hourly BTC and ETH in our test — which is normal for momentum continuation, where confirmation arrives late and many entries catch the end of a move. A 2R target only needs roughly a third winners to break even, but after costs the rule still finished negative on both symbols. Exact figures are in the table above.
Does momentum trading work on crypto?
Momentum is a robust market effect, but this specific unfiltered mechanization lost on both BTC and ETH after costs, mainly because a fixed-threshold ROC confirms late and a fixed 2R target cuts the trends that momentum is supposed to ride. A trailing exit and a trend filter are the standard fixes, and this baseline is the honest number they need to beat.
How do I backtest a momentum strategy myself?
Two ways on Secuora: describe the rule in plain English at /backtest/ai — rate of change is a built-in primitive that compiles to the same deterministic engine used here — or sign up free, add the ROC indicator in the replay terminal, and trade the momentum breaks bar by bar with simulated stop-loss and take-profit orders. Try a trailing stop in both.
