The ict smc indicator separates two structure events that look alike on a chart but mean different things. A break of structure continues the current direction. A change of character breaks it. Each gets its own colour of arrow. Behind every event the tool then hunts backwards for the candle that caused the move and shades it as an order block.
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: BoS_Up, BoS_Dn, CHoCH_Up, CHoCH_Dn |
| Alerts | popup |
| Inputs | 9 |
What the Ict Smc Indicator draws on the chart
BoS_Up in lime and BoS_Dn in red mark breaks that continue the existing direction.
CHoCH_Up in deep sky blue and CHoCH_Dn in magenta mark the reversal events.
Rectangles shade the order block found behind each break, tinted light green for bullish and light pink for bearish.
Only the newest blocks stay on screen, so old shading does not pile up.
- BoS_Up: arrow, lime, width 2, arrow code 233
- BoS_Dn: arrow, red, width 2, arrow code 234
- CHoCH_Up: arrow, deep sky blue, width 2, arrow code 233
- CHoCH_Dn: arrow, magenta, width 2, arrow code 234

How the Ict Smc Indicator calculates its values
Locating the pivot
The code sets piv as i + `InpSwingRight`, stepping back from the candidate bar so the pivot has bars on its newer side to be judged against. `InpSwingLeft` supplies the older side. Both default to `3`, which is a deliberately shallow pivot: smart-money structure reading cares about recent turns rather than major swings.
Testing the close against structure
Each bar reads its close into c and compares it with the relevant pivot level. A break in the direction of travel writes BoSUp at low[i] minus 10 points, or BoSDn at high[i] plus 10. A break against it writes ChochUp or ChochDn instead. The offset is fixed in the code here rather than exposed as an input.
Finding the order block behind the move
After a break the code searches backwards for the last opposing candle. searchTo takes MathMin(i + `InpOB_Lookback`, rates_total – 2) to bound the hunt. For a bullish break it looks for close[q] < open[q], the final down candle before price ran up. That candle becomes the order block rectangle. `InpMaxOBs` caps how many stay drawn at `6`, so the oldest drops off as new ones appear.
How to read the signals
Arrow colour is the whole message. Lime and red continue the story; deep sky blue and magenta interrupt it.
The rectangle sits behind the arrow in time, marking the candle that caused the break rather than the break itself.
A CHoCH after a run of BoS in one direction is the sequence most smart-money traders are watching for.
Blocks vanish as newer ones arrive, so an untouched zone that stays on chart is one price has not revisited.
Alert channels in this build: popup, one message per closed bar.
This build speaks through a terminal popup and nothing else. `InpAlertOnBoS` covers both event types, so turning it on gives you break of structure and change of character messages together. The code reads bar 1 rather than the forming bar, and the guard stores that bar’s time so each closed bar speaks once.
Every Ict Smc Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
InpSwingLeft |
Pivot left bars. Bars on the older side of a pivot, default `3`. | 3 |
InpSwingRight |
Pivot right bars. Bars on the newer side, default `3`. Raising both makes pivots rarer and structure coarser. | 3 |
InpOB_Lookback |
Order block search lookback. How far back the order block search runs, default `30` bars. Too small and a fast move outruns the search. | 30 |
InpMaxOBs |
Max OBs to retain on chart. How many blocks stay drawn, default `6`. Raise it to keep older zones visible on a slower chart. | 6 |
InpObjPrefix |
Names the rectangles, default `”ICTSMC_”`. | ICTSMC_ |
Display settings
| Setting | What it does | Default |
|---|---|---|
InpShowOB |
Draw order blocks. Set it `false` for arrows without shading. | on |
InpOBBullColor |
(see inputs panel) | light green |
InpOBBearColor |
(see inputs panel) | light pink |
Alert settings
| Setting | What it does | Default |
|---|---|---|
InpAlertOnBoS |
Alert on BoS / CHoCH. | on |

Settings that fit your chart
Structure work suits instruments that move in clean legs, and EURUSD on H1 is the reference chart. A three-bar pivot on H1 catches intraday turns without drowning in noise. On M1 the same setting marks nearly every wiggle as structure. On H4 and daily the arrows become sparse and each one carries more weight, which some traders prefer for bias rather than entries.
When the Ict Smc Indicator fails
Shallow pivots mean plenty of structure events. Three bars either side is easy to satisfy, and in a range the tool alternates BoS and CHoCH without any real trend behind it.
The order block search takes the last opposing candle within the lookback, which is a rule of thumb rather than a definition. In a choppy approach it can land on a candle that had nothing to do with the move.
With only six blocks retained, a level that matters later may already have been dropped from the chart.
Copy the compiled Ict Smc 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 Smc Indicator: Constant function market maker on Wikipedia, Doubletop at Investopedia.
Download the Ict Smc Indicator for MT4 and MT5
The zip holds the compiled Ict Smc 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 separates a BoS_Up arrow from a CHoCH_Up arrow?
Direction relative to the existing structure. BoS_Up marks a close through a level in the direction price was already travelling, so it continues the sequence. CHoCH_Up marks a close through a level in the opposite direction, which breaks it. The colours differ for that reason: lime for continuation, deep sky blue for the change.
How does InpOB_Lookback find an order block?
After a break, the code walks backwards up to that many bars looking for the last candle that opposed the move. For a bullish break it wants close[q] below open[q], the final down candle before price ran up. That candle becomes the rectangle. Set the value too low and a fast move outruns the search.
Why does InpMaxOBs default to 6?
To stop the chart filling with shaded rectangles. Six blocks cover the zones still plausibly in play while leaving the candles readable. Once a seventh appears, the oldest drops off. On a slower timeframe where blocks stay relevant for longer, raising the value is reasonable.
Are InpSwingLeft and InpSwingRight at 3 too shallow?
They are shallow on purpose. Smart-money structure reading works on recent turns, not major swings, so a three-bar pivot suits the method. It does mean plenty of events on fast charts. Raising both to five or six gives coarser structure and noticeably fewer arrows if the default proves too busy.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Ict Smc 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
- For background on this concept, see Constant function market maker on Wikipedia.
- For broader market context, see Doubletop at Investopedia.
