← All ideas
#001MomentumSwing

MACD-V: MACD normalized by volatility

The difference between the 12 and 26 EMAs divided by ATR. Values are comparable across markets and years, so general rules can be built on them: momentum zones, pullbacks in a bull regime, a simple momentum system on the DAX.

Financial Wisdom · Alex Spiroglou · Watch video

Markets

Indices, Futures, Forex, Commodities, Crypto, Stocks

Timeframe

D1

Data

OHLC

Rules

Partly formalised

Difficulty

Easy

Status

Untested

Some rules were added by us and are marked in the text.

TradingView ports directly
EasyLanguage has pitfalls
MetaTrader 5 has pitfalls

Idea in brief

The classic MACD is measured in price points. When the S&P 500 traded at 100, MACD moved within single units. With the index at 5000, the same moves produce tens. So a MACD value cannot be compared with last year or with another market, and it has no common overbought levels.

MACD-V divides the same difference between two EMAs by ATR. The indicator becomes dimensionless: it shows how many "volatilities" separate the fast and the slow average. A value of 100 on gold means the same as 100 on bitcoin. That allows common thresholds: ±50 marks the edge of a range, ±150 marks overheating.

Why it might work

Normalization by itself does not create an edge. It is a more precise measuring instrument. The benefit is that rules on top of it can be chosen once and tested across dozens of markets and decades without fitting thresholds to each instrument. The classic MACD cannot be tested this way: thresholds in points on one market mean nothing on another.

The author's second point: in a bull regime, deep negative values are rare. If price is above the 200 EMA and MACD-V has dropped below −50, this is a pullback inside a trend, not the start of a bear market. The author calls such points buying opportunities.

Rules

Indicator (author)

FastEMA = EMA(Close, 12)
SlowEMA = EMA(Close, 26)
ATR26   = ATR(26)                          // Wilder, as in the video
MACDV   = (FastEMA - SlowEMA) / ATR26 * 100

Signal  = EMA(MACDV, 9)                    // Finetiq: length 9 by analogy with MACD, not named for MACD-V in the video
MACDVH  = MACDV - Signal                   // histogram, extreme values ±40 according to the author

Momentum zones (author)

MACD-V State
above +150 overheated up: momentum above 1.5 ATR
+50 to +150 strong upward momentum
−50 to +50 weak momentum, range. Signal line crossovers here are false more often
−150 to −50 strong downward momentum
below −150 overheated down

Variant A. Buying a pullback in a bull regime

The regime and the pullback zone come from the author. The author gave no entry or exit points, so we defined them.

BullRegime = Close > EMA(Close, 200)

// entry: momentum returned from the pullback zone
IF BullRegime AND MACDV crosses above -50            // Finetiq: the moment it leaves the −50…−150 zone
    BUY AT NEXT BAR OPEN

// protective stop
InitialStop = EntryPrice - 2 * ATR26                  // Finetiq: starting value

// exit, whichever comes first
IF MACDV crosses above +50  THEN EXIT AT NEXT BAR OPEN   // Finetiq: momentum recovered
IF Close < EMA(Close, 200)  THEN EXIT AT NEXT BAR OPEN   // Finetiq: the regime broke
IF BarsSinceEntry >= 20     THEN EXIT AT NEXT BAR OPEN   // Finetiq: time exit

Variant B. The author's test system on the DAX

// daily bars of DAX futures, long only
IF MACDV crosses above 70                            // author: "MACD-V above 70"; Finetiq: we take the crossover moment
    BUY AT NEXT BAR OPEN

SELL LIMIT EntryPrice * 1.0285                       // author: target +2.85%
IF BarsSinceEntry >= 15 AND OpenProfit > 0           // author: after 15 days if the trade is in profit
    EXIT AT NEXT BAR OPEN
IF BarsSinceEntry >= 77                              // author: maximum holding period
    EXIT AT NEXT BAR OPEN
// the author's description has no stop-loss

Parameters

Parameter Value Source
Fast EMA 12 author
Slow EMA 26 author
ATR 26, Wilder smoothing author
Signal line 9 Finetiq
Range boundary ±50 author
Overheating ±150 author
Histogram extremes ±40 author
Regime filter daily 200 EMA author
Variant A: stop 2 × ATR26 Finetiq
Variant A: time exit 20 bars Finetiq
Variant B: entry MACD-V above 70 author
Variant B: target +2.85% author
Variant B: time exit 15 days in profit, 77 days maximum author

What to test

  1. Does normalization add anything beyond the classic version. Run variant A on MACD-V and on PPO ((EMA12 − EMA26) / EMA26 × 100) with thresholds recalculated to the same share of values. If there is no difference, the result comes from the rules, not from dividing by ATR.
  2. The ±150 claim. Count the share of daily values inside ±150 on your markets. The author cites 95% on the S&P 500, the Bund and natural gas. If the share on your instruments is very different, the common thresholds do not fit them.
  3. One parameter set across many markets. This is the indicator's main promise. Take 20–30 futures or CFDs and run variant A without tuning. Look at the median result across markets, not the best one.
  4. Threshold neighborhood. Move −50 to −30 and −70, and the 200 EMA to 150 and 250. If a small shift changes the result sharply, the threshold is overfitted.
  5. Crossover filter. Compare signal line crossover trades inside the ±50 zone and outside it. The author claims there are more false signals inside.
  6. Variant B without a stop. Look at the worst drawdown within a trade (MAE) and at trades that were held for the full 77 days. With this exit, the target hit rate says little about risk.

Platform notes

TradingView (Pine Script)

  • ta.atr(26) is already Wilder-smoothed (via ta.rma), so values match the author's formula.
  • MACD-V in one line: (ta.ema(close, 12) - ta.ema(close, 26)) / ta.atr(26) * 100.
  • By default a strategy fills orders at the open of the next bar (process_orders_on_close = false). This matches the rules above.
  • Time exit: bar_index - strategy.opentrades.entry_bar_index(0) >= 15. Target: strategy.exit("TP", limit = strategy.position_avg_price * 1.0285).

MultiCharts and TradeStation (EasyLanguage)

  • The built-in AvgTrueRange(26) is a simple average of TrueRange, not Wilder smoothing. MACD-V values will differ, especially after volatility spikes. Calculate ATR yourself: ATRw = ATRw[1] + (TrueRange - ATRw[1]) / 26.
  • EMA: XAverage(Close, 12).
  • Entry per the rules: Buy next bar at market. Set the target as a price rather than an amount of money: Sell next bar at EntryPrice * 1.0285 limit. SetProfitTarget is set in currency and easily produces a different level.
  • Time exit: If BarsSinceEntry >= 15 and OpenPositionProfit > 0 then Sell next bar at market.

MetaTrader 5 (MQL5)

  • The built-in iATR is also a simple average of TR, as in EasyLanguage. To match the author, calculate the Wilder version yourself.
  • The main line of iMACD (buffer 0) is exactly EMA12 − EMA26, so it can be divided by your own ATR.
  • Take the signal from the closed bar (index 1) and check for a new daily bar, otherwise the EA will enter on every tick.
  • A CFD broker's daily bar closes on server time (usually GMT+2/+3), not exchange time. Brokers with a different server may show short Sunday bars that distort EMA and ATR. Compare the broker's daily chart with TradingView before testing.

Where the idea can break

  • All statistics on levels and regimes come from the video and have not been verified by us. The markets in the author's examples: S&P 500, Bund, natural gas, DAX.
  • Variant A is entirely our formalization. The entry thresholds, stop and time exit are starting values for testing, not a recommendation.
  • Variant B has no stop-loss. A high target hit rate with an "after 15 days if in profit" exit can hide rare deep losses.
  • Some result figures for the DAX system are unclear in the transcript. We quoted only those stated unambiguously.
  • A daily 200 EMA needs history: during the first 200–250 bars the indicator has not settled yet, so exclude them from the test.

Sources

Author's claims

These figures and statements are the author's. We have not verified them.

  • The indicator was developed by Alex Spiroglou. The work received the Charles H. Dow Award from the CMT Association and the NAAIM Founders Award in 2022.
  • On the S&P 500, the German Bund and natural gas, 95% of MACD-V values lie between −150 and +150.
  • S&P 500 above the daily 200 EMA: all values above +150 occur in the bull market, there are no values below −150, and 99.4% of values are above −100.
  • S&P 500 below the 200 EMA: all values below −150 occur in the bear market, and 99.8% of values are below +100.
  • Test on DAX futures 1991–2021: 201 profitable trades over 30 years, 77.23% of trades reached the target. The author calls the system an example to build ideas on, not a finished strategy.

Related ideas

Updated: 2026-09-10