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
- 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. - 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.
- 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.
- 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.
- Crossover filter. Compare signal line crossover trades inside the ±50 zone and outside it. The author claims there are more false signals inside.
- 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 (viata.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.SetProfitTargetis 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
iATRis 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 exactlyEMA12 − 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.