The ict setup 04 indicator waits for three conditions to line up on the same bar. A swing level has to be swept, a fair value gap has to open, and price has to close back on the right side of the level it just took. Any one of those alone is common. All three together is the setup, and that is the only thing this tool marks.
This build ships as a compiled .ex4 for MT4 and .ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Main price chart |
| Plots | 4: BUY, SELL, Swing Low, Swing High |
| Alerts | popup |
| Inputs | 5 |
Everything the ICT Setup 04 Indicator draws
BUY and SELL arrows in lime and red mark bars where all three conditions hold.
Swing Low uses a dodger blue dot beneath each confirmed pivot low.
Swing High uses an orange dot above each confirmed pivot high.
The pivot dots draw at half the signal offset, so they stay visually subordinate to the arrows.
- BUY: arrow, lime, width 2, arrow code 233
- SELL: arrow, red, width 2, arrow code 234
- Swing Low: arrow, dodger blue, width 1, arrow code 159
- Swing High: arrow, orange, width 1, arrow code 159

From price to plot
Marking the swing levels first
pivotIdx takes i + `InpSwingLen`, stepping back so the candidate pivot has newer bars to be tested against. Confirmed pivots write BufSwingLow at low[pivotIdx] minus half the offset, or BufSwingHigh above the high. Those levels become swingLowVal and swingHighVal, the references everything else measures against.
Detecting the sweep
The code walks back through the lookback window checking whether any bar traded beyond the level. sweptLow turns true when low[sb] drops under swingLowVal. That alone proves nothing, because price runs past old levels constantly. It is a precondition, not a signal.
Demanding a gap and a recovery on the same bar
bullFvg needs low[i] – high[i+2] to reach minGap, which is `InpMinFvgPoints` converted to price. That is a genuine three-candle gap rather than one long bar. closeBack then needs close[i] above swingLowVal, so price has returned over the level it swept. Only with the sweep, the gap and the recovery all true does BufBuy get written at low[i] minus off. An anchor-time guard resets sig to 1 whenever time[sig] runs at or past time[0], keeping the alert reading a settled bar.
Making the output useful
Dots are structure and arrows are signals. A chart can carry many dots and no arrows at all.
An arrow means the level got taken, a gap opened and price came back, all inside the lookback window.
Rarity is the point. If arrows appear often, the gap threshold is probably too small for the instrument.
The gap that triggered the signal sits two bars behind the arrow, so look left of the marker to find it.
Alert channels in this build: popup, one message per closed bar.
One channel is wired: a terminal popup under `InpAlertOn`, on by default. The anchor-time guard keeps the alert pointed at a settled bar rather than the one still forming, so the message follows a completed signal and repeats at most once per bar.
Every ICT Setup 04 Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
InpSwingLen |
Pivot lookback bars. Pivot lookback in bars, default `3`. This controls how many swing levels exist to sweep in the first place. | 3 |
InpLookback |
Bars back to scan for sweep + FVG. How far back the sweep and gap scan reaches, default `30` bars. Widen it on slower charts. | 30 |
InpMinFvgPoints |
Minimum FVG gap in points. Smallest gap that counts, default `5` points. This is the setting to change per instrument, since 5 points means very different things on EURUSD and gold. | 5 |
Display settings
| Setting | What it does | Default |
|---|---|---|
InpArrowOffsetP |
Arrow vertical offset (points). Vertical gap for the signal arrows, default `10` points; the pivot dots use half of it. | 10 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
InpAlertOn |
Alert on new signal. | on |

Where the defaults make sense
The setup needs enough movement to open a real gap, which favours H1 and above on the majors. EURUSD H1 is the reference chart, where a 5 point minimum filters noise without blocking valid gaps. On gold or an index the point value differs enough that `InpMinFvgPoints` needs raising, or every small imbalance qualifies. On M5 gaps are frequent and mostly meaningless.
What it gets wrong
Three conditions in one window makes signals rare, and rare means small samples. Judging the tool on a handful of arrows will mislead you.
The gap threshold is a raw point count, so a setting tuned on EURUSD is far too permissive on an instrument with a different tick size.
A sweep confirms only that price traded beyond a level. Whether resting orders were actually taken is an assumption the code cannot check.
Copy the compiled ICT Setup 04 Indicator file into your MQL4/Indicators folder, and the MT5 build into MQL5/Indicators, then restart the terminal and drag it onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Related on forexmt4systems.com: ICT Style Strategy.
Background reading on the method behind the ICT Setup 04 Indicator: Consolidated Tape System on Wikipedia, Eveningstar at Investopedia.
Download the ICT Setup 04 Indicator for MT4 and MT5
The zip holds the compiled ICT Setup 04 Indicator build for MT4 and MT5, plus a short README. Compiled files only, no source. Enter your email below and the download link arrives in your inbox.
Download this indicator free
Enter your email and the file is yours. You also get the full MT4 and MT5 library.
FAQ
What three conditions does an ICT Setup 04 BUY arrow need?
A swept swing low, where some bar in the lookback traded under swingLowVal. A bullish fair value gap, where low[i] minus high[i+2] reaches `InpMinFvgPoints`. And a close back above swingLowVal on the signal bar. All three must hold together. Drop any one and no arrow prints.
Should I change InpMinFvgPoints for gold?
Yes. The default `5` is a raw point count tuned for a 5-digit forex pair. On gold, indices or crypto CFDs the point value differs by orders of magnitude, so 5 points becomes almost no gap at all. Raise it until the arrows correspond to imbalances you can actually see on the chart.
Why do Swing Low dots appear without any arrow?
Because pivots and signals are separate things. The dots mark every confirmed pivot the `InpSwingLen` test finds, which happens often. The arrow needs that level to be swept, a qualifying gap to open, and price to close back over the level. Most pivots never get all three.
What does InpLookback bound?
The backwards scan for both the sweep and the gap, default `30` bars. It limits how far in the past a sweep can have happened and still count toward a signal on the current bar. Widen it on slower timeframes where the sweep and the recovery are further apart; narrow it to demand a tighter sequence.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the ICT Setup 04 Indicator as one input. Always backtest before trading live.
Category: this is part of our Smart Money collection. Also, truly, browse more Smart Money for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- The core method is documented in Consolidated Tape System on Wikipedia.
- Additional market context is at Eveningstar at Investopedia.
