Wolf Blackout Trader — Range Filter Signals With 5-Tier Confluence

Wolf Blackout Trader — Range Filter Signals With 5-Tier Confluence

20 May 2026, 07:42
Kestutis Balciunas
0
28

Wolf Blackout Trader — Range Filter Signals With 5-Tier Confluence

Introduction

Most retail trading indicators fire signals on a single condition. A moving-average crossover. An RSI overbought print. A Supertrend regime flip. Each of those triggers is fine on its own day — and catastrophic on every other day. A single-indicator system has no way to distinguish a high-quality setup from a low-quality one, so it commits the trader to taking every signal with the same conviction, win or lose.

The professional alternative is confluence: require multiple independent inputs to agree before drawing a signal, and rank each signal by how many of them did. Confluence does two things at once. It thins the signal stream so the trader only sees setups worth taking, and it produces a per-signal quality score so the trader can size and manage trades differently depending on whether two filters agreed or all five did.

Wolf Blackout Trader is built on that principle. At its core sits a Dual Range Filter engine — a fast filter (length 32, smoothing 1.67) for early trend detection and a slow filter (length 89, smoothing 6.0) for the dominant regime — blended into a single smoothed-ATR price line that drives the primary buy/sell triggers. Around that engine wrap five independent confluence layers: range-filter trend direction, RSI side, EMA-144 trend, higher-timeframe EMA agreement, and volume burst. Each signal is scored 1 to 5 and rendered with a matching star count on the chart.

The system also includes an independent Reversal Detector that watches RSI extremes (length 28, OB 78 / OS 27) with an EMA-of-RSI confirmation gate, a 5-tier TP ladder (0.5% / 1.0% / 1.5% / 2.5% / 4.0%) with partial-hit tracking, an 8-bar signal cooldown, "blackout" bar coloring driven by the trend regime, a multi-timeframe trend row spanning M5 through Daily, a 22-row pixel-anchored dashboard, and a native MetaTrader alert package covering all 8 trade-lifecycle events (BUY, SELL, TP1–TP5, SL) across four delivery channels (popup, sound, mobile push, email).

Everything is non-repainting in close-confirmed mode, ships as identical MQL4 and MQL5 builds, and is engineered for production use on the MQL5.com Market.

Download the indicator: 

TIP: Wolf Blackout Trader works on every symbol and every timeframe. H1 and above produce fewer, higher-quality signals; M5–M15 are well-suited for scalping. Tune the minimum-confluence input to control signal frequency.

The Wolf Blackout Trader Philosophy

Three design choices set the indicator apart from generic Range Filter forks.

Dual Range Filter, not single. Most Range Filter indicators run a single filter with one length and one smoothing factor. A short filter catches early entries but flips on noise. A long filter avoids noise but enters late. Wolf Blackout Trader runs both and blends their smoothed-ranges so the resulting filter line tracks the slow trend while reacting to the fast trend. This is similar in spirit to a Hull MA or a TEMA, but uses Range Filter's ATR-based smoothing kernel instead of weighted-MA crossovers.

5-layer confluence scoring, not boolean filters. Most "filtered" indicators chain conditions with logical AND — meaning a signal needs all filters to pass or none. That all-or-nothing rule discards information. Confluence scoring keeps the information: every signal that fires gets a 1-to-5 quality grade, and the trader sets a minimum threshold (1 to 5) below which signals are suppressed. A 5-star signal in an established trend with volume agreement and HTF confirmation is qualitatively different from a 2-star signal in a sideways range, and the dashboard + label stars make the difference visible at a glance.

5-tier TP ladder, not single-target exits. Most signal indicators draw one TP (or three at most). A 5-tier ladder at 0.5% / 1.0% / 1.5% / 2.5% / 4.0% reflects how discretionary traders actually exit: a tight first take at TP1 to recover risk, a midpoint take at TP2 / TP3 for the bulk of profit, and runners at TP4 / TP5 for the rare extended moves. Each tier independently tracks "hit" state, and the indicator's internal win/loss accounting counts a trade as a winner if TP1 was hit before SL — modeling the universal "move stop to breakeven after first take" rule.

These three choices — dual engine, scored confluence, multi-tier ladder — together produce a signal stream that is structurally different from single-indicator systems. The remainder of this article walks through each component in detail.


The Dual Range Filter Engine — Math & Code


The Range Filter concept, originally popularized by Donovan Wall, is a price-smoothing line that only moves when price travels beyond a smoothed-ATR distance from the previous filter value. It is mathematically a one-sided trailing filter — the line moves up when price punches above the upper band, holds still when price oscillates inside the band, and moves down when price punches below the lower band.

The MQL4 implementation is built around two helper steps: a smoothed-range calculator (cascaded EMA of absolute price change) and a trailing-filter walker that locks the filter value unless price punches outside a smoothed-ATR band. Both run in a single series-indexed loop. Because MQL4 buffers are accessed with  buffer[0]  for the current bar (opposite of MQL5's chronological indexing), the loop walks from high shift to low shift, and the calculator state is held in  g_*  global series arrays sized to  rates_total .

The smoothed-range step computes, per bar, an inner EMA over length  t  of  |close - close[1]| , then an outer EMA over  2*t - 1  of that inner value, multiplied by the sensitivity factor:

double CalcEmaStep(double price, double prevEma, int period, bool seed) { if(seed) return price; double alpha = 2.0 / (period + 1.0); return price * alpha + prevEma * (1.0 - alpha); } // Inside the OnCalculate loop, for one bar at index `shift`: double absDiff = MathAbs(Src(shift) - Src(shift+1)); bool seed = (g_emaInF[shift+1] == EMPTY_VALUE); double emaInF = CalcEmaStep(absDiff, seed ? 0.0 : g_emaInF[shift+1], InpFastLen, seed); double emaOuF = CalcEmaStep(emaInF, seed ? 0.0 : g_emaOuF[shift+1], InpFastLen*2 - 1, seed); double smrngFast = emaOuF * InpFastSens;

The output is a dynamic "band width" that adapts to recent volatility. The same two-step EMA is then repeated with the slow pair (length 89, sensitivity 6.0), and the two band widths are averaged into a single value passed to the trailing filter:

// Slow pair (length 89, sensitivity 6.0) computed identically...
double smrngSlow = emaOuS * InpSlowSens;

double smrng    = (smrngFast + smrngSlow) / 2.0;

// Trailing filter — only moves when price punches outside the band
double prevFilt = (g_filt[shift+1] == EMPTY_VALUE) ? Src(shift) : g_filt[shift+1];
double rf;
if(Src(shift) > prevFilt)
   rf = (Src(shift) - smrng < prevFilt) ? prevFilt : Src(shift) - smrng;
else
   rf = (Src(shift) + smrng > prevFilt) ? prevFilt : Src(shift) + smrng;

g_filt[shift] = rf;

If the previous filter value is  prevFilt  and the current source  s  is above  prevFilt + smrng , the filter moves up to  s - smrng  (price minus band width). If the source is below  prevFilt - smrng , the filter moves down to  s + smrng . Otherwise the filter holds its previous value. The result is a stair-step line that tracks trends and ignores noise.

The filter line is plotted directly on the chart through two  DRAW_LINE  buffers —  BufFiltBull  (mint, length 2) when up-streak exceeds down-streak (bullish regime) and  BufFiltBear  (red, length 2) when down-streak exceeds up-streak (bearish regime). Up-streak and down-streak counters increment by one each bar the filter moves up/down and reset on the opposite move. They are the primary buy/sell trigger source — when up-streak transitions from zero to one and down-streak resets, a fresh bullish trigger fires. The symmetric pattern fires bearish triggers.

The filter never repaints. Once a bar closes, its filter value is immutable. This is enforced in the MetaTrader builds by computing the loop from confirmed historical bars only — every cached  g_filt[shift]  is final once  shift  is no longer the current (live) bar, and the indicator processes only bars at  shift >= 1  for signal firing when  InpNonRepaint = true .


The 5-Layer Confluence Scoring


A raw trigger from the Dual Range Filter engine is not yet a signal. Every trigger is scored against five independent layers, and only triggers that pass the minimum-confluence threshold (default 2) become BUY or SELL labels on the chart.

The five layers, with default scoring:

  1. Range Filter Trend (primary) — Bullish signals automatically get +1 because the trigger itself comes from the filter's up-streak. This counts as the foundation point; the other four layers stack on top.

  2. RSI Side Confirmation — Bullish signals get +1 when RSI(14) > 50. Bearish signals get +1 when RSI(14) < 50. The RSI side check is the cheapest possible "momentum agreement" filter — it confirms that recent momentum aligns with the trigger direction.

  3. EMA Trend Filter — Bullish signals get +1 when close > EMA(144). Bearish signals get +1 when close < EMA(144). The EMA-144 captures the medium-term trend; signals trading with it tend to have larger follow-through.

  4. HTF EMA Agreement — Bullish signals get +1 when the higher-timeframe (default H1) close is above its own EMA-144. Bearish signals get +1 when HTF close is below HTF EMA. To prevent repainting, the value is sampled from the most recent closed bar on the higher timeframe (shift + 1) rather than the live forming bar:

    bool HtfBull(int shift) { datetime barT = Time[shift]; int hShift= iBarShift(NULL, InpHtf, barT, false); if(hShift < 0) return false; double ema = iMA(NULL, InpHtf, InpEmaLen, 0, MODE_EMA, PRICE_CLOSE, hShift + 1); double cl = iClose(NULL, InpHtf, hShift + 1); return (ema > 0.0 && cl > 0.0 && cl > ema); }

  5. Volume Burst — Both directions get +1 when current bar volume is at least 1.0× the SMA-20 of volume. This catches setups where the market is actively transacting (not drifting in low-volume chop).

The scoring function reads naturally — start at 1 (the Range Filter trigger itself), then add one point for every confirmation layer that agrees with the trigger direction. The MQL4 implementation samples each indicator at the trigger bar and returns the total:

int ScoreBuy(int shift)
{
   int s = 1; // range filter trigger

   double rsi    = iRSI(NULL, 0, InpRsiLen, InpSrc, shift);
   double emaVal = iMA (NULL, 0, InpEmaLen, 0, MODE_EMA, PRICE_CLOSE, shift);
   bool   rsiBull= (rsi > 50.0);
   bool   emaBull= (Close[shift] > emaVal);
   bool   htfBull_= HtfBull(shift);
   double vol    = (double)Volume[shift];
   double volSma = VolumeSma(shift, 20);
   bool   volBurst= (volSma > 0.0 && vol >= volSma);

   if(InpUseRsi){ if(rsiBull)  s++; } else s++;
   if(InpUseEma){ if(emaBull)  s++; } else s++;
   if(InpUseHtf){ if(htfBull_) s++; } else s++;
   if(InpUseVol){ if(volBurst) s++; } else s++;
   return s;
}

ScoreSell  is the symmetric mirror —  rsi < 50.0 ,  Close[shift] < emaVal ,  !HtfBull(shift) . The "disabled layer awards a free point" rule ( else s++ ) ensures that turning a confluence layer off via input does not penalize signal frequency — it simply skips the agreement check.

The  minConfluence  input gates whether the signal fires. A score below the threshold is silently discarded. A score at or above is rendered as a label with that many stars suffixed:

Star Count Meaning
1 layer only — Range Filter trigger, all other filters off or failed
★★ 2 layers — default threshold; balanced for swing trading
★★★ 3 layers — strong setup, well-aligned momentum and trend
★★★★ 4 layers — very strong, only one filter missed
★★★★★ 5 layers — extremely rare; everything aligned

The 22-row dashboard renders the live buy-score and sell-score on every tick, so the trader can watch confluence build as bars print. Often a score climbs from 2 to 3 to 4 in the final seconds of a bar, then triggers the signal at close.


The Reversal Detector — RSI Extremes


Range Filter triggers catch trend continuations and pullback resolutions. They do not catch outright reversals at extreme overbought/oversold levels. For traders who want to fade exhaustion, Wolf Blackout Trader includes a dedicated Reversal Detector that runs in parallel to the main confluence engine.

The detector uses a longer-period RSI (length 28 by default, not 14) and tighter extremes (OB 78, OS 27). The longer period dampens noise so the RSI only reaches the extreme zones when momentum is truly stretched. The tighter OB level (78 instead of 70) and looser OS level (27 instead of 30) are calibrated for the asymmetric distribution of RSI on most FX pairs — RSI spends more time above 50 than below in trending markets, so the bullish-reversal zone needs to be slightly deeper than the bearish-reversal zone.

A second layer of confirmation comes from an EMA-of-RSI gate. The detector requires that the RSI value is not just at the extreme level, but that an EMA of the RSI line confirms the extreme — meaning recent RSI values have also been in the zone, not just a single spike print. In MQL4 the detector samples both values per bar and gates the marker on agreement:

if(InpShowReversal) { double rsiR = iRSI(NULL, 0, InpRevRsiLen, PRICE_CLOSE, shift); double rsiRema = EmaOfRsi(InpRevRsiLen, 10, shift); if(rsiR > InpRevOb && rsiR > rsiRema) DrawReversal(Time[shift], High[shift] + (High[shift]-Low[shift])*0.3, false); // red diamond above bar else if(rsiR < InpRevOs && rsiR < rsiRema) DrawReversal(Time[shift], Low[shift] - (High[shift]-Low[shift])*0.3, true); // mint diamond below bar }

DrawReversal  creates a small  OBJ_ARROW  with  OBJPROP_ARROWCODE = 159  (Wingdings filled dot) colored mint for bullish exhaustion (oversold) or red for bearish exhaustion (overbought).

Reversal markers are independent of the main signal pipeline. They do not contribute to the confluence score, they do not draw SL/TP lines, and they do not increment the win/loss counters. They are pure visual cues — "this is where RSI says exhaustion has hit". A trader can use them in two ways: as a standalone reversal-fade entry (e.g., short on red diamond, take profit at recent swing low), or as a "be careful" warning when a same-direction Range Filter signal also fires (a 5-star BUY signal printed at RSI = 80 has a high probability of stopping into mean reversion).

The reversal detector is a pure visual layer in the MT4 / MT5 builds — it draws the diamond markers and updates the dashboard's Reversal Detector cell, but it does not fire alerts. Trade-lifecycle alerts (BUY, SELL, TP1–TP5, SL) cover everything that needs operator attention.


Stop Loss and the 5-TP Ladder


When a signal fires, six horizontal lines are drawn on the chart from the signal bar extending forward by  extendBars  bars (default 40):

  • SL line (red, dashed) — stop loss at entry × (1 ± slPct / 100)
  • TP1 line (mint, thin) — 0.5% from entry
  • TP2 line (mint, thin) — 1.0% from entry
  • TP3 line (mint, medium) — 1.5% from entry
  • TP4 line (mint, medium) — 2.5% from entry
  • TP5 line (mint, thick) — 4.0% from entry

The widths get progressively heavier so the chart reads cleanly even when multiple historical trades overlap. Each line has a right-side price label showing the exact price and the percentage in parentheses, like  TP3 1.07845 (1.5%) .

In MQL4 the lines are drawn as  OBJ_TREND  segments anchored to the signal-bar time and extended forward by  InpExtendBars  bars. The active trade's reference prices are held in  g_active*  globals and updated each time a new signal fires:

void FireBuySignal(int shift, int score)
{
   datetime barT  = Time[shift];
   double   entry = Close[shift];
   double   sl    = entry * (1.0 - InpSlPct  / 100.0);
   double   tp1   = entry * (1.0 + InpTp1Pct / 100.0);
   double   tp2   = entry * (1.0 + InpTp2Pct / 100.0);
   double   tp3   = entry * (1.0 + InpTp3Pct / 100.0);
   double   tp4   = entry * (1.0 + InpTp4Pct / 100.0);
   double   tp5   = entry * (1.0 + InpTp5Pct / 100.0);

   g_activeDir       = 1;
   g_lastEntryPrice  = entry;
   g_activeSL        = sl;
   g_activeTP1 = tp1; g_activeTP2 = tp2; g_activeTP3 = tp3;
   g_activeTP4 = tp4; g_activeTP5 = tp5;
   g_tp1Reached = g_tp2Reached = g_tp3Reached = false;
   g_tp4Reached = g_tp5Reached = false;

   DrawSignalArrow(barT, Low[shift] - off,     true, score);
   DrawHeroLabel  (barT, Low[shift] - off*1.6, true, score);
   if(InpShowSLTP)
      DrawAllLevels(barT, entry, sl, tp1, tp2, tp3, tp4, tp5);
   // ... alert routing
}

DrawAllLevels  creates one  OBJ_TREND  per price level (Entry, SL, TP1–TP5) with progressively heavier widths and styles ( STYLE_DASH  for TP1/TP2/TP3,  STYLE_DOT  for TP4/TP5), plus a right-side  OBJ_TEXT  label per line showing the exact price.

The hit-tracking loop runs on every bar of the active trade. For a long trade, the loop checks  if(!g_tp1Reached && hi >= g_activeTP1)  — marks TP1 as hit, increments  g_tp1Hits , drops a  TP1 HIT  chart label, and fires the optional alert. Same pattern for TP2 through TP5, with  if(lo <= g_activeSL)  checking the SL leg.

The win/loss accounting follows the discretionary-trader rule: if TP1 was hit before SL, the trade counts as a win. This reflects the universal "move stop to breakeven after first take" practice. So three outcomes are possible:

  • Pure win — TP1+ hit, SL never hit. Trade is closed when SL OR TP5 fires, increments  signalWins .
  • Breakeven-protected win — TP1 hit, then SL hits. Counts as  signalWins  because the trader would have moved stop to BE.
  • Loss — SL hit before TP1. Counts as  signalLoss .

The dashboard's Performance section shows total buys, total sells, wins, losses, and the cumulative TP hit counts (TP1: 47, TP2: 31, TP3: 22, TP4: 11, TP5: 4 — illustrative). The hit ratios are useful for fine-tuning the SL/TP percentage inputs: if TP5 is rarely hit on your chosen market, lower it to 3.0% or 3.5%; if TP1 is hit too often before SL has a chance, tighten it to 0.4%.

When the trade fully closes (SL hit or TP5 hit), the SL and TP lines are removed from the chart to keep the view uncluttered. The signal arrow and label stay permanently visible for historical reference.


Regime-Colored Filter Line + Blackout Visual System


The "Blackout" in Wolf Blackout Trader refers to the indicator's signature visual system: a thick regime-colored Range Filter line riding through price action, paired with mint BUY arrows below bars and red SELL arrows above bars, all set against MetaTrader's native chart background. The line itself encodes regime state with no need for a separate color legend:

  • Mint (#00E5A8) line segment — up-streak active (filter rising, bullish regime)
  • Red (#FF3B5C) line segment — down-streak active (filter falling, bearish regime)

The effect is that the trend regime is identifiable from a single glance at the filter line's color, while the underlying MetaTrader candles remain unmodified — keeping every trader's preferred chart theme (dark, light, custom skin) intact. The MQL4 build implements this with two  DRAW_LINE  buffers, each holding  EMPTY_VALUE  on bars where the opposite regime is active:

// In OnInit — two plots, same width, opposing colors SetIndexBuffer(0, BufFiltBull); SetIndexBuffer(1, BufFiltBear); SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2, InpBullCol); // mint SetIndexStyle (1, DRAW_LINE, STYLE_SOLID, 2, InpBearCol); // red SetIndexEmptyValue(0, EMPTY_VALUE); SetIndexEmptyValue(1, EMPTY_VALUE); ArrayInitialize(BufFiltBull, EMPTY_VALUE); ArrayInitialize(BufFiltBear, EMPTY_VALUE); // Per-bar in the OnCalculate loop: bool isBullRegime = (upStreak > dnStreak); if(isBullRegime) { BufFiltBull[shift] = rf; BufFiltBear[shift] = EMPTY_VALUE; } else { BufFiltBull[shift] = EMPTY_VALUE; BufFiltBear[shift] = rf; }

MT4's render engine joins consecutive non-empty bars of the same buffer into a connected segment, so the line cleanly transitions from mint to red as regime flips. The  EMPTY_VALUE  sentinel must be assigned via  ArrayInitialize  at attach (not just declared via  SetIndexEmptyValue ) — otherwise warmup cells default to  0.0  and the engine draws a line down to price zero.

The MT5 build mirrors this with two  DRAW_LINE  plots of identical color and width, so the two builds render the filter line identically. Signal arrows ( OBJ_ARROW  with Wingdings codes 233/234), hero labels ( OBJ_TEXT ), Reversal diamonds ( OBJ_ARROW  code 159), and SL/TP trend lines ( OBJ_TREND ) all overlay on top of the regime-colored line, giving the chart its "blackout" identity — a single colored spine with surgical decision markers.

When  InpShowFilter  is set to false the line is hidden and only the colored regime arrows + signal markers remain. Some traders prefer this cleaner look on lower timeframes where the constant filter-line repaint can become visually overwhelming.


Multi-Timeframe Trend Row


The Multi-Timeframe row in the dashboard shows the EMA-144 trend direction across six fixed timeframes: M5, M15, M30, H1, H4, Daily. Each timeframe shows an arrow:

  • ▲ in mint — current close on that TF is above its EMA-144 (bullish)
  • ▼ in red — current close is below its EMA-144 (bearish)

The MTF row is a "trend agreement scoreboard" — when all six arrows point up, every timeframe from M5 to Daily is bullish, and any BUY signal fired on the working timeframe is operating with the wind at its back. When the arrows disagree (e.g., M5 ▲ M15 ▲ but H4 ▼ Daily ▼) the working-timeframe signal is fighting higher-timeframe trend and should be discounted or skipped.

Each timeframe is sampled using  iMA  and  iClose  with the cross-symbol/cross-timeframe overload, anchored to the most recent closed bar via  iBarShift(...) + 1  so the value never repaints intra-bar:

bool MtfBull(ENUM_TIMEFRAMES tf, int shift)
{
   datetime barT  = Time[shift];
   int      hShift= iBarShift(NULL, tf, barT, false);
   if(hShift < 0) return false;
   double ema = iMA   (NULL, tf, InpMtfEmaLen, 0, MODE_EMA, PRICE_CLOSE, hShift + 1);
   double cl  = iClose(NULL, tf, hShift + 1);
   return (ema > 0.0 && cl > 0.0 && cl > ema);
}

// Sample all six timeframes for the dashboard row:
bool m5Bull  = MtfBull(PERIOD_M5,  0);
bool m15Bull = MtfBull(PERIOD_M15, 0);
bool m30Bull = MtfBull(PERIOD_M30, 0);
bool h1Bull  = MtfBull(PERIOD_H1,  0);
bool h4Bull  = MtfBull(PERIOD_H4,  0);
bool d1Bull  = MtfBull(PERIOD_D1,  0);

The  hShift + 1  access ensures the value comes from the most recent closed bar on each timeframe, eliminating intra-bar repaint. The dashboard cell is then rendered as  ^  in mint or  v  in red — note the ASCII substitution because of the no-Unicode-in-chart-objects constraint (Unicode glyphs render as  ????  in MT4/MT5  OBJ_TEXT  and  OBJ_LABEL ).

The MTF row is one of the most actionable parts of the dashboard. A working-timeframe BUY signal with all six MTF arrows pointing up is a top-quality setup; the same signal with three up and three down arrows is mediocre at best.


The 22-Row Dashboard


The dashboard is a pixel-anchored widget rendered using  OBJ_RECTANGLE_LABEL  for cell backgrounds and  OBJ_LABEL  for cell text. It anchors to one of six chart corners and stays in position regardless of scroll, zoom, or symbol switch.

The 22 rows are organized into six sections:

Header (rows 0–1)

  • Row 0 — Brand title  WOLF BLACKOUT TRADER  in indigo (#1A237E) background, mint text
  • Row 1 — Symbol and timeframe, plus current date/time

Market Context (rows 2–6)

  • Trend Regime — BULL / BEAR / FLAT (colored)
  • Range Filter value with delta from previous bar
  • RSI(14) value with state label (OB / OS / Bull / Bear)
  • EMA(144) value and price-vs-EMA flag (^ or v)
  • Volume ratio (current / SMA20) with HIGH / Norm tag

Signal Engine (rows 7–9)

  • Last signal direction (LONG / SHORT / WAITING) with bars-ago counter
  • Last signal star rating (★ to ★★★★★)
  • Cooldown remaining bars (0 if free to signal, N otherwise)

Confluence (rows 10–12)

  • Live BUY score with star rendering and minimum-required threshold in parentheses
  • Live SELL score with star rendering and threshold
  • Score-by-layer breakdown — Range / RSI / EMA / HTF / Vol — Pass/Fail per layer

Active Signal (rows 13–18)

  • Direction with stars and bars-ago
  • Entry price with live percent P&L
  • Stop Loss price with percent distance from entry
  • TP1 / TP2 / TP3 prices on a single row, each with  *  suffix if hit
  • TP4 / TP5 prices on a single row, each with  *  suffix if hit
  • Reversal detector status (BUY zone / SELL zone / -)

MTF Trend (row 19)

  • Six cells showing M5 / M15 / M30 / H1 / H4 / D1 arrows

Performance (rows 20–21)

  • Total buys / sells fired since attachment
  • Wins / Losses / Win Rate %, plus cumulative TP1/2/3/4/5 hit counts

The dashboard supports six corner positions (Top Right / Top Left / Middle Right / Middle Left / Bottom Right / Bottom Left) and four font sizes (Tiny / Small / Normal / Large). Layout is responsive — cell widths scale with font size so the dashboard reads cleanly at every scale.

In the MetaTrader builds the dashboard is redrawn from  OnTimer  at 500-millisecond intervals (the MQL5 indicator-objects rule) plus on every  CHARTEVENT_CHART_CHANGE  so it re-anchors after terminal-window resizes. A guard flag ( g_calcReady ) prevents the dashboard from reading the  g_*  series arrays before  OnCalculate  has filled them on first attachment — without this guard, the first  OnTimer  tick can hit an empty array and crash the dashboard rendering for the first few seconds.


Full Alert Package — 8 Events Across 4 Native MetaTrader Channels


Wolf Blackout Trader fires 8 distinct trade-lifecycle alert events. Each is delivered through any combination of four native MetaTrader channels: terminal popup ( Alert() ), sound file ( PlaySound() ), mobile push to the MetaTrader app ( SendNotification() ), and email ( SendMail() ). All four channels are built into the MetaTrader 4 and MetaTrader 5 terminals — no external bridges, scripts, or third-party services required.

The 8 alert events:

  1. BUY Signal — main bullish signal fired. When the confluence score equals 5, the message text is prefixed with  STRONG  (it is the same alert event, just with a different word in the body).
  2. SELL Signal — main bearish signal fired. Same  STRONG  prefix at score 5.
  3. TP1 HIT — first take-profit reached on the active trade
  4. TP2 HIT — second take-profit reached
  5. TP3 HIT — third take-profit reached
  6. TP4 HIT — fourth take-profit reached
  7. TP5 HIT — fifth take-profit reached (trade closes)
  8. SL HIT — stop loss hit on the active trade (trade closes)

Each BUY / SELL alert message carries the symbol, timeframe, entry price, stop loss, all five take-profit prices, and the confluence score. Example default message text:

WBT BUY EURUSD H1 Entry 1.07842 SL 1.06764 TP1 1.08382 TP2 1.08920 TP3 1.09459 TP4 1.10539 TP5 1.12156 Score 4

Each TP / SL HIT alert is a compact one-line confirmation:  WBT TP3 HIT EURUSD H1 . Short messages are intentional — they read cleanly in the popup, on the lock-screen push notification, and in the email subject line without truncation.

The alert input group controls the master switch plus per-channel toggles:

Input Default Effect
InpEnableAlerts true Master on/off — disables every channel when off
InpAlertPopup true MetaTrader popup dialog (terminal must be running and visible)
InpAlertSound true Play  InpAlertSound1  (default  alert2.wav ) on every event
InpAlertPush false Send mobile push (requires MetaQuotes ID under Tools > Options > Notifications)
InpAlertEmail false Send email (requires SMTP under Tools > Options > Email)
InpAlertSound1 "alert2.wav" Sound file path (any .wav in Terminal/Sounds)

The alert system silences during the initial historical replay when the indicator attaches to the chart. Only signals fired on new bars after attachment trigger alerts — without this guard, attaching the indicator to a chart with months of history would flood the terminal with hundreds of stale popups. The silencing is controlled by a  g_silenceAlerts  flag set to  true  at the top of  OnCalculate  when  prev_calculated == 0  and cleared back to  false  at the end of the calculation. Per-bar deduplication prevents the same event from firing twice on the same bar.

The MetaTrader implementation is straightforward — a single helper routes one message to every enabled channel:

void SendAlerts(string subject, string body)
{
   if(InpAlertPopup) Alert(subject);
   if(InpAlertSound) PlaySound(InpAlertSound1);
   if(InpAlertPush)  SendNotification(subject);
   if(InpAlertEmail) SendMail(subject, body);
}

Mobile push is the recommended channel for traders who step away from the terminal — typical end-to-end latency from bar close to lock-screen notification is under 5 seconds via MetaQuotes' push infrastructure. Email is slower (5–30 seconds of SMTP latency) but useful for archival and downstream parsing into a trade journal.


Configurable Parameters

The indicator exposes roughly 45 inputs grouped into eight sections. Defaults are tuned for H1 swing trading on FX majors; every value is adjustable in real time without re-attaching the indicator.

Group Key Inputs (defaults)
Signal Engine enableSignals (true), src (close), fastLen (32), fastSens (1.67), slowLen (89), slowSens (6.0), signalCooldown (8), nonRepaintMode (true)
Confluence minConfluence (2), useRsiConfirm (true), rsiLen (14), useEmaConfirm (true), emaLen (144), useHtfConfirm (true), htfRes (60), useVolConfirm (true)
Reversal Detector showReversal (true), revRsiLen (28), revOb (78.0), revOs (27.0)
Risk (SL / 5 TPs) showSLTP (true), slPct (1.0), tp1Pct (0.5), tp2Pct (1.0), tp3Pct (1.5), tp4Pct (2.5), tp5Pct (4.0), extendBars (40)
MTF Trend showMtf (true), mtfEmaLen (144)
Visuals bullCol (#00E5A8), bearCol (#FF3B5C), neutralCol (#7C8895), colorBars (true), showFilter (true), buyLblStyle ( BUY ▲ ), sellLblStyle ( SELL ▼ )
Dashboard showDash (true), dashPos (Top Right), dashSize (Tiny), dashAcc (#1A237E)
Alerts InpEnableAlerts (true), InpAlertPopup (true), InpAlertSound (true), InpAlertPush (false), InpAlertEmail (false), InpAlertSound1 ("alert2.wav")

Every input has range validation in OnInit. Out-of-range values cause the indicator to return  INIT_PARAMETERS_INCORRECT , preventing accidental misuse on the MQL5.com Market.


Markets, Timeframes & Best Practices

Markets. Wolf Blackout Trader is symbol-agnostic. It works on FX majors and crosses, precious metals (XAU/USD, XAG/USD), commodity CFDs, equity indices (NAS100, US500, GER40), and crypto (BTC/USD, ETH/USD). The Range Filter math is universal; the only adjustment between asset classes is the SL/TP percentage tuning — crypto needs wider TPs (e.g., 1% / 2% / 3% / 5% / 8%) than FX majors.

Timeframes. Two regimes work well:

  • H1 and above — fewer signals, higher quality, larger TP targets. Best for traders who can hold a position for hours to days. Use  minConfluence = 2  for normal stream or  3  for selective.
  • M5–M15 — more signals, faster turns, smaller TP targets. Best for active intraday scalping. Tighten  slPct  to 0.5–0.7 and  tp1Pct  to 0.2–0.3 to match the smaller pip-distance budgets.

Avoid M1 unless your broker's spread is unusually tight — Range Filter signals on M1 fire too frequently to be useful, and the 8-bar cooldown is too short to prevent over-trading.

Best practices.

  1. Combine MTF agreement with the on-chart signal. When the MTF row shows 4+ green arrows, working-timeframe BUYs are higher quality. When MTF is mixed, raise  minConfluence  to 3 or 4 to compensate.
  2. Pay attention to reversal markers near signals. A 5-star BUY signal that prints at the same bar as a red Reversal-SELL diamond is a textbook "buying into exhaustion" warning — skip or fade.
  3. Watch the dashboard confluence section in real time. A 1-of-5 score that builds to 4-of-5 in the last seconds of a bar is more interesting than a 4-of-5 score that has been stable for 10 bars.
  4. Use the Pure ATR + 5-TP ladder for trailing exits. Don't take TP1 mechanically — when momentum is strong, let the trade run to TP3 or TP4 and use TP1 only as the breakeven trigger.
  5. Backtest on demo for 2+ weeks before live. The MQL5.com Strategy Tester is not directly applicable to indicators, but attaching the indicator to a demo chart and tracking signals in a journal for two weeks builds intuition for which star counts and which markets work best for your style.

Download the indicator: 

CONTACT & SUPPORT

Risk Disclaimer

Trading foreign exchange and CFDs on margin carries a high level of risk and may not be suitable for all investors. You may sustain a loss exceeding your initial investment. Trend Quorum is a technical analysis tool and does not guarantee profitable trades. Past performance is not indicative of future results. The authors accept no liability for any loss arising from use of the indicator. By using Trend Quorum you acknowledge sole responsibility for your trading decisions.