A market structure indicator built on the premise that most SMC tools tell you where structure broke — but not whether you should trust the break. This one does both.
Every SMC indicator on the market will draw a BoS line. Most will draw a CHoCH. A few will mark equal highs and lows. None of that is the problem — the problem is that structure breaks lie, often. Roughly half of all "clean" BoS events on lower timeframes are stop-runs that reverse within five bars. The chart prints the same horizontal line in both cases.
What separates a real shift from a fakeout is almost never visible in price alone. It lives in three places: which type of structure broke (internal noise or genuine swing), how the wick behaved at the level (clean break or a tail rejection that triggered stops), and whether order flow agreed with the move during the break itself. MarketStructure SMC Pro v3 is the first indicator I'm aware of that puts all three on the chart, in real time, on every break event.
Two independent pivot trackers run in parallel — a fast Internal stream catches intraday shifts, while a slower Swing stream maintains higher-timeframe context. Internal breaks inside a swing trend are continuation; counter-swing internals are warnings.
A two-stage liquidity sweep engine: identify a wick exceedance that closes back inside the level, then wait up to N bars for a reversal close through the sweep bar's midpoint. Only confirmed sweeps print — no false signals during the move.
Every break carries a flow badge derived from Bulk Volume Classification — an order-flow proxy from the Easley/López de Prado/O'Hara microstructure literature. [++] means flow agrees. [!?] means it doesn't, and you're probably looking at a fakeout.
Standard volume indicators on MT5 charts are useless for direction. Tick volume tells you how much traded, never which side initiated. To classify a bar as buy-pressure or sell-pressure, retail tools usually fall back to the up-tick / down-tick heuristic — a method known to be noise-dominated on aggregated bars.
The academic solution, dating to 2012, is Bulk Volume Classification (BVC). Instead of guessing trade-by-trade, you estimate the fraction of a bar's volume that came from buyers, using the standardised return of that bar against a calibrated volatility window. A large positive return relative to recent volatility means most of the bar's volume was buyer-initiated. A large negative return means it was sellers. The math is one line:
// For each bar in the cumulative window: z = (log_return - mean_return) / sigma // standardised buy_frac = NormalCDF(z) // in (0, 1) signed_OFI = tick_volume × (2 × buy_frac − 1) // signed flow
Summed across the last N bars and normalised by total volume, this produces a directional flow index in [−1, +1], displayed on the dashboard as a buy/sell percentage. When a structure break fires, the indicator immediately compares break direction against accumulated flow:
| Badge | Meaning | How to read it |
|---|---|---|
| [++] | Strong aligned flow | Flow agrees with break direction beyond the strong threshold. Highest-confidence signals — institutions are pushing the move, not absorbing it. |
| [~] | Weak / ambivalent | Flow is mixed. Treat the break as tentative. Often appears in low-conviction sessions and on news-driven choppy bars. |
| [!?] | Contrarian flow | Break direction and flow disagree. Statistically the most likely fakeout case. The price broke up, but the bars were selling. Wait for confirmation, or fade. |
BVC is what HFT desks use to estimate flow toxicity in the absence of full order-book data. The exact same math, calibrated to the timeframe you trade, runs on every break this indicator prints. You are not reading raw volume — you are reading an estimate of who initiated.
Liquidity sweeps are the highest-probability reversal setups in price action, and the most commonly mis-marked. The naive approach paints "SWEEP" the moment a wick pokes through a level — long before you know whether it was actually rejected. Result: a chart full of sweep tags that never produced a reversal.
This engine uses two-stage confirmation. A sweep is registered as pending when three conditions all fire on the same bar:
The bar's high (or low) penetrates an active swing or internal level by at least SweepMinPenetration × ATR. Penetration must exceed market noise — measured against current ATR, not a fixed pip distance.
The bar's close must return through the level. A bar that closes above a broken high is a break, not a sweep. A bar that breaks the high with the wick but closes below it is exactly what a sweep looks like on the tape.
The wick above the body must exceed SweepRejectionPct of the bar's full range. A small upper wick on a doji is not a rejection; a long tail with the body buried at the opposite end is.
The pending sweep then waits up to SweepLookback bars for confirmation. Confirmation requires a close past the sweep bar's midpoint, on the opposite side, with bar direction matching. Until that happens, no signal is drawn. If lookback expires, the pending sweep silently dies.
The net effect: SWEEP tags only appear after the reversal has begun. There is no waiting for confirmation, no second-guessing whether the wick was "real." When you see the tag, the trade is already moving — and the flow badge tells you whether to trust it.
The dashboard's Pending sweeps counter shows how many wick exceedances are currently waiting on confirmation. A spike here often precedes a reversal cluster — it's a leading indicator of indecision being resolved.
Standard market structure tools force one length parameter — pick small for sensitivity and live with noise, pick large for cleanliness and miss the entries. The dual-track approach runs both, simultaneously, and labels them differently so the chart stays readable.
Catches micro shifts inside the larger trend. Labeled with lowercase prefixes — iBoS, iCHoCH, iSweep — and drawn in muted gold with dotted lines. Use these for continuation entries inside a confirmed swing trend, or for early warning that swing structure is weakening.
The trend you would draw by hand. BoS and CHoCH labels in solid lines, with stronger colors and thicker strokes. The swing trend on the dashboard reflects this stream. Counter-trend swing CHoCH is the highest-conviction reversal signal the indicator produces.
The engine tracks the prevailing trend on each stream independently. A new high break in the same direction as the existing trend is logged as BoS (Break of Structure — continuation). A break against the prevailing trend is logged as CHoCH (Change of Character — potential reversal). This distinction is essential: a CHoCH on the swing stream with aligned flow is a high-probability trend reversal entry. A BoS with contrarian flow is a continuation that's running on fumes.
Existing uptrend confirmed. Old swing high taken cleanly. Trade in trend direction.
Downtrend confirmed. Old swing low broken. Continuation short setups in play.
First higher-high after a downtrend. Character change. New leg likely beginning.
First lower-low after an uptrend. Trend likely turning. Short setups validated.
Stops below an old low were run; price reversed. Classic long entry after stop-hunt.
Stops above an old high were run; price reversed. High-probability short entry.
Two consecutive swings within ATR threshold of each other. Resting liquidity zone — frequent sweep targets.
Appended to every BoS, CHoCH, and SWEEP label. [++] strong aligned · [~] weak · [!?] contrarian.
Defaults are tuned for H1 trading on liquid pairs. Lower timeframes need shorter Internal/Swing lengths; D1 and above benefit from longer lengths and tighter flow thresholds.
The indicator is not a system. It's a high-resolution lens on structure. The workflow below is how I use it on my own charts.
Swing state, internal state, flow percentage, pending sweep count. Thirty seconds before you place any order. If Swing is BULLISH and flow is >60% buy, you are not shorting today.
Look for EQH or EQL clusters — these are where stops are resting. The market gravitates toward them. If price is approaching an EQH from below, expect a sweep attempt.
A wick approaching a level is a setup. A confirmed SWEEP tag is a signal. Big difference. The signal arrives only after reversal has begun, but with flow context attached. Don't front-run it.
Take [++] signals. Skip or reduce size on [~]. Fade or stand aside on [!?] — those are statistically the trades that hurt the most.
Once in a trade, the internal stream is your exit tool. An iCHoCH against your position is early warning. An iSweep against you is more decisive — consider partial close or full exit.
| Typical SMC indicator | MarketStructure SMC Pro v3 | |
|---|---|---|
| Structure detection | Single pivot length. User must choose between sensitivity and noise. | Two independent streams — internal and swing — running in parallel with separate labelling. |
| BoS vs CHoCH logic | Often confused. Frequently mislabelled. | Trend-aware — same break is BoS in trend, CHoCH against trend, tracked separately on each stream. |
| Liquidity sweeps | Painted when wick exceeds level. Many false sweeps. No reversal requirement. | Two-stage confirmation — wick exceedance + close-back + reversal within N bars. Only confirmed sweeps print. |
| Order flow input | None, or raw tick volume. | BVC-based signed flow — academic microstructure model, properly calibrated to current volatility. |
| Conviction filter | All breaks look identical on the chart. | Flow badge on every signal — instantly distinguishes high-conviction breaks from likely fakeouts. |
| Dashboard | Either absent or visually unrefined. | Bounded panel with accent strip, divider, live trend states, flow split, pending sweep count. |
| Code quality | Often re-compiled from free repackaged sources. | Original. Object pruning, ATR-relative thresholds, dedupe logic, alert deduplication, decade-old MQL5 codebase. |
In MetaTrader 5, navigate to File → Open Data Folder. The folder opens in your system file explorer.
Open MQL5 → Indicators. Copy MarketStructure_SMC_Pro_v3.ex5 into this folder. Do not place it in Experts or Scripts — it will not work.
Right-click the Indicators node in the Navigator panel and select Refresh. The indicator will appear in the list.
Drag the indicator onto an active chart. The default parameters work well for H1; adjust Internal/Swing lengths for other timeframes.
The indicator is bound to the trading account number it was issued for. Your purchase includes 20 license slots — each one valid for one MT5 account number (real or demo). Add or replace accounts via the support channel listed below.
H1 swing trading: defaults work as-is. Watch for swing CHoCH with [++] flow.
M15 intraday: InternalLen = 4, SwingLen = 50, FlowCumWindow = 8. Tighter sweep penetration (0.03).
D1 position trading: InternalLen = 8, SwingLen = 15, FlowWindow = 30, FlowStrongThr = 0.65.