Dual-track market structure detection with two-stage liquidity sweep validation and Bulk Volume Classification flow scoring.
Two ways to install. The Store route is the easier of the two.
cTrader Store in the top right of the workspace, or in the right-side panel of the Automate workspace.OrderFlow Structure SMC and open the listing.Buy or Get. The indicator installs automatically into your Algo workspace under Indicators.f(x) indicators icon in the chart toolbar, find OrderFlow Structure SMC Indicator under Custom, and double-click to attach..algo file you received to anywhere on disk.Automate at the bottom of the workspace switcher..algo file into the Indicators list, or use File → Add Existing Item.Custom Indicators menu on every chart..algo file is platform-independent within cTrader. The same file works on every broker and account.
Most SMC indicators do one thing: paint structure labels. This one runs three independent analyses and lets you see how they agree or disagree on every signal.
The three systems are structure, sweeps, and flow. They share the same chart but answer different questions.
Structure asks: has the market just confirmed a continuation, or a character change? It tracks pivot highs and lows on two independent streams (Internal and Swing) and labels every break as either a Break of Structure (BoS) or a Change of Character (CHoCH) based on the existing trend state.
Sweeps ask: did smart money just run liquidity above a level before reversing? The engine requires two stages of confirmation. A bar's wick must penetrate an unbroken swing level, the close must come back inside the level with sufficient rejection, and price must actually reverse through the sweep bar's body within a small window. No premature signals on every wick that touches a level.
Flow asks: is there real participation behind this move? The indicator computes a Bulk Volume Classification score on every signal. BVC is a microstructure technique that estimates the buyer-initiated fraction of each bar's volume from standardised log-returns. The score gets compared against the break direction and appears as a badge next to every label.
Two pivot streams, two trend states, one principled definition of BoS versus CHoCH.
Pivots are confirmed using the standard left/right comparison: a bar is a pivot high if its high exceeds the high of every bar within InternalLen or SwingLen bars on either side. The Internal stream uses a short length to catch micro shifts; the Swing stream uses a longer length to track the higher-timeframe context.
You can show one stream and hide the other. Most traders run both. The Internal stream is useful for entry timing; the Swing stream is the structural truth.
Each stream maintains its own trend state: BULL, BEAR, or NONE. When a swing high gets broken upward:
BEAR, this is a CHoCH (character change up).BULL or NONE, this is a BoS (continuation up).The trend then flips or holds accordingly. The same logic applies in reverse for downside breaks.
This distinction matters because most retail SMC indicators label every break as a BoS, which is wrong about half the time and silently misleads the user about whether the market is continuing or reversing.
By default, breaks are confirmed by the bar's close, not its wick. This is the conservative choice and produces fewer false signals. If you prefer faster reads at the cost of more noise, switch UseCloseBreak off and breaks fire on wick touch.
When two consecutive swing pivots are within EqualThreshold × ATR of each other, the indicator draws a dotted connector and labels them EQH or EQL. These are stop pools — areas where retail stops cluster — and are common sweep targets.
A sweep only counts if the wick exceeded the level and the close came back inside and the reversal actually started.
Most retail liquidity sweep indicators paint a SWEEP marker the instant a bar's wick exceeds a swing high or low. The result is hundreds of false signals every week, because price wicks through levels constantly without reversing. This engine works in two stages.
A pending sweep registers when, on the same bar, all three conditions hold against an unbroken swing level:
SweepMinPenetration × ATR.SweepRejectionPct of the bar's total range.If all three are true, the bar is added to a pending sweep queue. Nothing prints on the chart yet.
The pending sweep gets confirmed only when, within the next SweepLookback bars, price closes beyond the sweep bar's midpoint and beyond the sweep bar's open, in the direction opposite to the sweep. If confirmation never arrives, the pending sweep expires silently.
When confirmation does arrive, the indicator draws:
SWEEP label with the appropriate flow badge.Sweeps come in two grades, matching the structure streams:
An academic microstructure model applied to retail charts, giving you a participation read on every break.
Bulk Volume Classification is a technique from Easley, López de Prado, and O'Hara (2012). The original paper used it to estimate flow toxicity in high-frequency markets. The same mathematics work on any bar series.
For each bar in a short rolling window, the indicator:
FlowWindow bars to get a z-score.(2 × buyFraction − 1) to get a signed flow estimate for the bar.These signed flows accumulate across FlowCumWindow bars and normalize against total absolute volume to produce a directional index between −1 (pure sell flow) and +1 (pure buy flow). The dashboard shows this as a buy% / sell% split.
When a break event fires, the flow index is compared against the break direction:
FlowStrongThr for bull breaks, or sell-intensity above the same threshold for bear breaks. Statistically the cleanest setups.Live state of both streams, the flow ratio, the next levels being monitored, and any pending sweeps.
BULLISH, BEARISH, or dash if no break has fired yet.broken after it. This keeps a number visible at all times.The dashboard's title bar is a drag handle. Click and hold the top row (the one with the ⋮⋮ grip glyph and the product name), then drag anywhere on the chart. The position is saved to LocalStorage and remembered across sessions, chart switches, and indicator reattachments.
If you ever want to reset the position, remove and re-attach the indicator. It starts at (8, 38) — clear of cTrader's chart header.
Six structural events, two grades each. Same color logic across the chart and the dashboard.
Internal-grade signals use the same labels prefixed with a lowercase i: iBoS, iCHoCH, iSweep. They are drawn in the Internal stream's color (gold by default) regardless of direction.
When two signals fire near the same price within a few bars, the second label gets nudged vertically by ATR-fractional increments so both stay readable. You may notice some labels offset slightly from their natural anchor — this is intentional.
Pop-up, sound, and email. Configurable per signal type.
Every signal can trigger an alert. Use the Alerts parameter group to enable or disable each type:
AlertSwingBoS — swing-grade Break of Structure events.AlertSwingChoCh — swing-grade Change of Character events.AlertInternal — all Internal-grade breaks. Off by default because they fire frequently.AlertSweep — confirmed sweeps on both grades.PlaySound — plays cTrader's positive notification sound on alert.SendEmailAlert — sends an email to EmailRecipient. Requires cTrader's email settings to be configured.Alerts only fire on bars within the last two bar-spans of current time. This prevents alert spam during historical backfill when the indicator first attaches to a chart.
The alert message format is: [Swing] Bullish CHoCH on EURUSD Hour @ 1.16447 [strong flow]. Direction, symbol, timeframe, level, and flow tag are always included.
Every input the indicator exposes, what it does, and when to change it.
[++] for bull breaks. Sell-intensity above this prints [++] for bear breaks.Tested starting points. Adjust from here based on the instrument and your style.
These are starting points, not final settings. The right values depend on your instrument's typical wick behaviour and your own risk tolerance for false signals.
One way to use the three systems together. Adapt as you find your own rhythm.
Next SH and Next SL rows show what the indicator is monitoring. These are the prices to watch for the next structural event.[++] flow badge is the highest-conviction signal the indicator produces.[!?] badge, treat it with skepticism. Some still work, but the win rate is materially lower than aligned-flow signals.Common questions and the answers I have given most often.
If you have an old saved position from before the layout fix, remove and re-attach the indicator. It will reset to the default (8, 38) coordinates, clear of cTrader's chart header bar.
This is correct behavior in a strong trend. When the market is dropping aggressively, each new swing low gets broken before a fresh one can form unbroken. The "broken" suffix tells you the price of the most recently consumed swing low. In ranging markets, both Next SH and Next SL will populate with active levels.
Either UseFlowConfirm is off, or there are too few bars for the calibration window. The indicator needs at least FlowWindow + 2 bars of history to compute flow. If you attached to a freshly loaded chart with little data, scroll back to load more history.
Pivot confirmation requires bars on both sides of the pivot to be present. During a vertical move, the indicator cannot confirm a pivot until enough bars have formed past it. This is a property of how pivot detection works, not a bug. Markers will appear retroactively as the structure stabilizes.
Increase InternalLen to 7 or 9, or turn ShowInternal off entirely. The Swing stream alone is often enough for higher-timeframe trading.
If you are reattaching after changing parameters, the indicator clears and rebuilds the entire object set. Any custom drawings or notes you placed on the chart remain. The structure state is rebuilt from MaxBarsCalc bars of history.
What this indicator is not, so you can use it for what it is.
This is not a Level 2 order book reader. Retail platforms do not expose that data, and no indicator on the cTrader Store actually does. The BVC flow score is an estimate from bar-level OHLC and tick volume, calibrated against recent volatility. It is directionally useful and grounded in academic literature, but it is not exchange-grade order flow.
This is not an autotrading robot. It draws on the chart and fires alerts. If you want automated execution based on these signals, the EA version (OrderFlow Structure SMC EA) is the corresponding product.
This will not catch every move. Pivot confirmation by definition requires future bars; during sharp vertical moves, pivots get labeled after the fact. The structure stream is most accurate during normal market rhythm and degrades during news spikes or thin-liquidity holidays.
The flow score uses tick volume, which is a proxy for true volume on most brokers. The proxy is generally good — tick count correlates strongly with traded volume — but it is not perfect. Treat the flow badges as confirmation signals rather than authoritative readings.
Past performance of any structural method does not guarantee future performance. SMC concepts work because enough market participants act on them; that participation can shift over time.
The shoulders this product stands on.
The Bulk Volume Classification model comes from:
Related microstructure work that informed the flow scoring design:
The Smart Money Concepts vocabulary (BoS, CHoCH, liquidity sweeps, EQH/EQL) is community-developed over many years. This indicator's contribution is the rigorous two-stage sweep validation and the BVC integration, not the underlying concepts.
cTrader's cAlgo API documentation, the cTrader Algo community forums, and the broader cTrader developer community made the platform work straightforward. Thank you.