← Strategy library

Volatility-Normalised Momentummomentum in units of its own noise

Evidence: ModerateProfessionalMomentum · Statistical

Raw momentum is a trap: a fixed percentage move is enormous in a quiet market and entirely ordinary in a volatile one. A fixed threshold has no idea which regime it is in.

The fix: z = ROC(20) ÷ the 60-bar standard deviation of that ROC. The signal is now measured in units of its own noise. Entry when z crosses the threshold of ±1.5.

Position size scales with 1 ÷ volatility as well, so every signal carries the same risk.

Category
Momentum · Statistical
Timeframe
M15 primary · M30 secondary
Suitable pairs
USDJPY · EURUSD · GBPUSD · AUDUSD · XAUUSD — or a basket of them
Session
Signal at the bar close · session-independent
Indicators / tools
ROC(20) · rolling 60-bar standard deviation of ROC · ATR(14). Implemented in Pine or Python.

Valid setup

S20 · VOLATILITY-NORMALISED MOMENTUM — VALID SETUP USDJPY · M15 · the same move means two different things in two different volatility regimes LONG 147.66 148.12 148.58 149.04 149.50 149.96 150.42 ENTRY = next bar open SL = entry − 2 × ATR(14) +2R reference 1R +2R 1 2 3 4 5 ① Quiet, low-volatility base — ROC hovers near zero ② Price starts to accelerate; raw ROC rises ③ Normalised z crosses +1.5. The move is now large RELATIVE TO this market's own recent volatility. ④ Entry next bar open ⑤ Exit when z falls back below +0.5 — the momentum has normalised, even if price is still drifting up. Position size also scales by 1/volatility, so every signal carries the same risk. 148.45 148.21 148.10 z crosses +1.5 Raw ROC(20) % — informative only once you know the regime 0 ROC ROC ÷ its own 60-bar std-dev — THIS is the signal +1.5 trigger +0.5 exit 0 z

Exact rules

Entry

  • ROC(20) = (close[0] ÷ close[−20] − 1) × 100.
  • SD = the rolling 60-bar standard deviation of that ROC series.
  • z = ROC ÷ SD.
  • Long when z crosses above +1.5. Short when z crosses below −1.5.
  • Enter at the next bar's open. Position size = account risk ÷ (2 × ATR(14)), then multiplied by the target-volatility scalar.

Stop loss

  • Entry ∓ 2 × ATR(14).
  • With the volatility-scaled position size this gives constant monetary risk on every trade — which is the entire point of the design.
  • Risk 0.5%–1%.

Take profit / exit

  • Primary exit: z falls back below +0.5, for a long.
  • This is an exit driven by a statistic. Price may still be rising when you leave — that is the design, not a bug. You are trading momentum, not direction.
  • Structural reference: 2R. A trailing ATR stop is an optional variant.

Build Volatility-Normalised Momentum

Reading this page is free and always will be. Taking it is what costs — the complete MQL5 for the rules above, yours to keep, permanently. Five of them cost $10 and they never expire.

More from Momentum

Trading carries risk and most retail accounts lose money. Nothing on this page is financial advice or a recommendation to trade. The chart is an illustration of the rules on constructed candles — it is not a record of a trade and not a backtest.