The Definitive M1 XAU/USD Scalping Setup: Fibonacci EMAs
Posted: Tue Aug 11, 2026 9:59 pm
Hi scalpers,
today i prepared for you another interesting scalping setup.
If you are scalping Gold (XAU/USD) on the 1-minute chart, you already know that traditional moving average crossovers lag too much to capture the explosive, micro-structural momentum shifts of this asset. Gold's high volatility and deep liquidity require a moving average system that reacts dynamically to price action while heavily filtering out the chop of ranging periods.After extensive forward-testing during the London and New York overlaps, the most robust institutional-grade setup relies on a tight cluster of Fibonacci-sequence Exponential Moving Averages (EMAs): 8, 13, 21, and 34. Here is a complete breakdown of the mechanics, the execution rules, and the MQL4 code to build your own custom alert indicator.
The Fibonacci EMA Framework
Unlike standard 9/21 or 50/200 setups, a Fibonacci cluster provides dynamic support and resistance bands rather than a single rigid line. Because the EMA calculation places heavier weight on the most recent candles, the sequence fans out during impulse waves and compresses during consolidation.
8 EMA (The Trigger): Reacts immediately to micro-momentum.
13 EMA & 21 EMA (The Value Zone): This is where you look for pullbacks. Price reverting to this pocket in a trend represents fair value.
34 EMA (The Baseline): Determines your overarching directional bias for the next 15–30 minutes.
Execution RulesLong Setup (Buy):Trend Alignment: The EMAs must fan out in perfect ascending order: $EMA_8 > EMA_{13} > EMA_{21} > EMA_{34}$.The Trigger: Wait for price to pull back into the "Value Zone" (between the 13 and 21 EMAs) without closing below the 34 EMA.Entry: Enter upon the close of a bullish structural candle (e.g., a pin bar or engulfing candle) that closes back above the 8 EMA. Invalidation (Stop Loss): Place the hard stop 3-5 pips strictly below the 34 EMA or the recent structural swing low.Take Profit: Target a 1.5R to 2R, or scale out when the 8 EMA flattens and crosses back below the 13 EMA. Short Setup (Sell):Inverse of the above. EMAs must be stacked downward: $EMA_8 < EMA_{13} < EMA_{21} < EMA_{34}$. Enter on a bearish candle close below the 8 EMA following a pullback to the Value Zone.
MQL4 Code:
Custom Alert IndicatorTo avoid staring at the M1 chart all day, you can use this lightweight MQL4 Custom Indicator. It paints arrows on your chart and triggers a terminal alert when the 8 EMA crosses the 13 EMA, strictly filtered by the 34 EMA baseline.
today i prepared for you another interesting scalping setup.
If you are scalping Gold (XAU/USD) on the 1-minute chart, you already know that traditional moving average crossovers lag too much to capture the explosive, micro-structural momentum shifts of this asset. Gold's high volatility and deep liquidity require a moving average system that reacts dynamically to price action while heavily filtering out the chop of ranging periods.After extensive forward-testing during the London and New York overlaps, the most robust institutional-grade setup relies on a tight cluster of Fibonacci-sequence Exponential Moving Averages (EMAs): 8, 13, 21, and 34. Here is a complete breakdown of the mechanics, the execution rules, and the MQL4 code to build your own custom alert indicator.
The Fibonacci EMA Framework
Unlike standard 9/21 or 50/200 setups, a Fibonacci cluster provides dynamic support and resistance bands rather than a single rigid line. Because the EMA calculation places heavier weight on the most recent candles, the sequence fans out during impulse waves and compresses during consolidation.
8 EMA (The Trigger): Reacts immediately to micro-momentum.
13 EMA & 21 EMA (The Value Zone): This is where you look for pullbacks. Price reverting to this pocket in a trend represents fair value.
34 EMA (The Baseline): Determines your overarching directional bias for the next 15–30 minutes.
Execution RulesLong Setup (Buy):Trend Alignment: The EMAs must fan out in perfect ascending order: $EMA_8 > EMA_{13} > EMA_{21} > EMA_{34}$.The Trigger: Wait for price to pull back into the "Value Zone" (between the 13 and 21 EMAs) without closing below the 34 EMA.Entry: Enter upon the close of a bullish structural candle (e.g., a pin bar or engulfing candle) that closes back above the 8 EMA. Invalidation (Stop Loss): Place the hard stop 3-5 pips strictly below the 34 EMA or the recent structural swing low.Take Profit: Target a 1.5R to 2R, or scale out when the 8 EMA flattens and crosses back below the 13 EMA. Short Setup (Sell):Inverse of the above. EMAs must be stacked downward: $EMA_8 < EMA_{13} < EMA_{21} < EMA_{34}$. Enter on a bearish candle close below the 8 EMA following a pullback to the Value Zone.
MQL4 Code:
Custom Alert IndicatorTo avoid staring at the M1 chart all day, you can use this lightweight MQL4 Custom Indicator. It paints arrows on your chart and triggers a terminal alert when the 8 EMA crosses the 13 EMA, strictly filtered by the 34 EMA baseline.
Code: Select all
//+------------------------------------------------------------------+
//| Fib_EMA_Scalper_Alerts.mq4 |
//| Expertise Level: High |
//+------------------------------------------------------------------+
#property copyright "Forum Community"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrLimeGreen
#property indicator_color2 clrRed
//--- Inputs
input int TriggerEMA = 8;
input int ValueEMA = 13;
input int BaseEMA = 34;
//--- Buffers for Arrows
double BuyBuffer[];
double SellBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 233); // Up Arrow
SetIndexBuffer(0, BuyBuffer);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 234); // Down Arrow
SetIndexBuffer(1, SellBuffer);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int limit = rates_total - prev_calculated;
if(prev_calculated > 0) limit++;
for(int i = limit - 1; i >= 1; i--)
{
double EmaTrig0 = iMA(NULL, 0, TriggerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
double EmaTrig1 = iMA(NULL, 0, TriggerEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
double EmaVal0 = iMA(NULL, 0, ValueEMA, 0, MODE_EMA, PRICE_CLOSE, i);
double EmaVal1 = iMA(NULL, 0, ValueEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
double EmaBase = iMA(NULL, 0, BaseEMA, 0, MODE_EMA, PRICE_CLOSE, i);
BuyBuffer[i] = EMPTY_VALUE;
SellBuffer[i] = EMPTY_VALUE;
// Buy Signal: 8 crosses above 13 AND both are above 34 baseline
if(EmaTrig1 <= EmaVal1 && EmaTrig0 > EmaVal0 && close[i] > EmaBase)
{
BuyBuffer[i] = low[i] - 10 * Point;
if(i == 1) Alert("XAUUSD M1: Bullish EMA Cross");
}
// Sell Signal: 8 crosses below 13 AND both are below 34 baseline
if(EmaTrig1 >= EmaVal1 && EmaTrig0 < EmaVal0 && close[i] < EmaBase)
{
SellBuffer[i] = high[i] + 10 * Point;
if(i == 1) Alert("XAUUSD M1: Bearish EMA Cross");
}
}
return(rates_total);
}
//+------------------------------------------------------------------+