cTrader · Operator Manual

OrderFlow Structure SMC Indicator

Dual-track market structure detection with two-stage liquidity sweep validation and Bulk Volume Classification flow scoring.

Platform
cTrader 5.x+
File
.algo
Type
Indicator
Build
NomadTradingFX

Contents

  1. 01Installation
  2. 02Three Systems on One Chart
  3. 03Structure Detection
  4. 04Liquidity Sweep Engine
  5. 05BVC Flow Scoring
  6. 06The Dashboard
  7. 07Reading the Signals
  8. 08Alerts
  9. 09Parameter Reference
  10. 10Timeframe Recipes
  11. 11A Suggested Workflow
  12. 12Troubleshooting
  13. 13Honest Limits
  14. 14Credits & References

Installation

Two ways to install. The Store route is the easier of the two.

From the cTrader Store

  1. Open cTrader. Click cTrader Store in the top right of the workspace, or in the right-side panel of the Automate workspace.
  2. Search OrderFlow Structure SMC and open the listing.
  3. Click Buy or Get. The indicator installs automatically into your Algo workspace under Indicators.
  4. Open any chart, click the f(x) indicators icon in the chart toolbar, find OrderFlow Structure SMC Indicator under Custom, and double-click to attach.

Manual install from .algo file

  1. Save the .algo file you received to anywhere on disk.
  2. In cTrader, click Automate at the bottom of the workspace switcher.
  3. Drag the .algo file into the Indicators list, or use File → Add Existing Item.
  4. cTrader compiles and registers the indicator. It appears in the Custom Indicators menu on every chart.
The compiled .algo file is platform-independent within cTrader. The same file works on every broker and account.

Three Systems on One Chart

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.

The point is not to pick one system and trust it. The point is to see where the three agree. A swing-grade CHoCH with a confirmed sweep below it and strong aligned flow is a setup with three independent confirmations. A break with contrarian flow and no sweep beneath it is exactly the kind of fakeout that catches retail traders.

Structure Detection

Two pivot streams, two trend states, one principled definition of BoS versus CHoCH.

Dual-track pivots

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.

Trend state and the BoS vs CHoCH distinction

Each stream maintains its own trend state: BULL, BEAR, or NONE. When a swing high gets broken upward:

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.

Break confirmation: close vs. wick

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.

Equal highs and lows

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.

Liquidity Sweep Engine

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.

Stage 1: pending sweep registration

A pending sweep registers when, on the same bar, all three conditions hold against an unbroken swing level:

  1. The wick penetrates the level by at least SweepMinPenetration × ATR.
  2. The close comes back inside the level (below for a high sweep, above for a low sweep).
  3. The wick beyond the level accounts for at least 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.

Stage 2: confirmation

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:

The number of confirmed sweeps you see on a typical day will be small. That is the point. Each one is a level where price ran liquidity and then actually reversed.

Sweep grades

Sweeps come in two grades, matching the structure streams:

BVC Flow Scoring

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.

How it works

For each bar in a short rolling window, the indicator:

  1. Computes the log-return against the previous bar's close.
  2. Standardises that return against the volatility of the surrounding FlowWindow bars to get a z-score.
  3. Maps the z-score through the standard normal CDF to estimate the bar's buyer-initiated fraction (between 0 and 1).
  4. Multiplies tick volume by (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.

Flow badges

When a break event fires, the flow index is compared against the break direction:

[++]
Flow aligns strongly with the break. Buy-intensity above FlowStrongThr for bull breaks, or sell-intensity above the same threshold for bear breaks. Statistically the cleanest setups.
[~]
Flow is ambivalent. Between the weak and strong thresholds. The break may still work but you are not getting participation confirmation.
[!?]
Flow opposes the break direction. These often turn out to be fakeouts. Not a hard rule, but a useful filter.

The Dashboard

Live state of both streams, the flow ratio, the next levels being monitored, and any pending sweeps.

⋮⋮ MSS SMC Pro v3 EURUSD Hour ─────────────────────────── Swing BEARISH Internal BEARISH Flow 52% B / 48% S ─────────────────────────── Next SH 1.16447 Next SL 1.15936 broken Pending sweeps: 1

What the rows mean

Drag and persistence

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.

Reading the Signals

Six structural events, two grades each. Same color logic across the chart and the dashboard.

BoS (bullish)
Continuation up. Swing trend was already bullish or unset; a new swing high just broke.
BoS (bearish)
Continuation down. Swing trend was already bearish or unset; a new swing low just broke.
CHoCH (bullish)
Character change up. Swing trend was bearish and price has now broken a swing high. Reversal alert, not a confirmed reversal yet.
CHoCH (bearish)
Character change down. Swing trend was bullish and price has now broken a swing low.
SWEEP (bullish)
A swing low got swept and price reversed up. Often a reaction high follows.
SWEEP (bearish)
A swing high got swept and price reversed down. Often a reaction low follows.

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.

Label collision avoidance

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.

Alerts

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:

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.

Parameter Reference

Every input the indicator exposes, what it does, and when to change it.

Structure Detection

InternalLen default: 5
Pivot length for the Internal stream. Lower values are more reactive. Raise to 7 or 9 on M5/M15 to cut noise.
SwingLen default: 25
Pivot length for the Swing stream. Lower for Daily (try 15), higher for sub-hour charts (try 35).
UseCloseBreak default: true
If true, breaks confirm on close. If false, they fire on wick. The default is conservative.
EqualThreshold default: 0.1
EQH/EQL detection tolerance, expressed as multiples of ATR(14). Higher values catch more equal-level pairs but at lower precision.

Sweep Detection

DetectSweeps default: true
Master switch. Turn off if you do not trade sweep reversals — the chart gets visibly cleaner.
SweepLookback default: 5
Maximum bars after a pending sweep for confirmation to arrive. Raise to 7 on slower instruments.
SweepMinPenetration default: 0.05
Minimum wick penetration of the level, in ATR multiples. Higher values require deeper sweeps.
SweepRejectionPct default: 0.5
Minimum fraction of the sweep bar's range that must be wick. Raising to 0.65 cuts marginal sweeps.

Flow Confirmation

UseFlowConfirm default: true
Master switch for BVC scoring. If off, no flow badges appear and the dashboard's Flow row shows 50%/50%.
FlowWindow default: 20
Bars used to calibrate volatility for standardisation. Larger windows produce smoother, slower flow reads.
FlowCumWindow default: 10
Bars over which signed flow accumulates. The dashboard's flow ratio reflects this window's net flow.
FlowStrongThr default: 0.60
Buy-intensity above this prints [++] for bull breaks. Sell-intensity above this prints [++] for bear breaks.
FlowWeakThr default: 0.40
Below this threshold, flow is classified as contrarian to bull breaks (or supporting bear breaks).

Display

ShowInternal
Toggle Internal-stream rendering.
ShowSwing
Toggle Swing-stream rendering.
ShowSwingPoints
Toggle pivot dot markers.
ShowEqualLevels
Toggle EQH/EQL connectors.
ShowLines
Toggle horizontal lines on every break and sweep.
ShowFlowBadges
Toggle the flow badge suffix on labels. The dashboard still shows the flow ratio.
ShowDashboard
Toggle the dashboard panel entirely.

Performance

MaxObjects default: 500
Soft cap on chart objects. Older objects get cleared when the cap is reached.
MaxBarsCalc default: 2000
How far back to analyze on first attach. Lower this on very long charts if rendering feels sluggish.

Timeframe Recipes

Tested starting points. Adjust from here based on the instrument and your style.

RECIPE · Conservative

H1 — H4 FX majors
InternalLen
5
SwingLen
25
UseCloseBreak
true
SweepRejectionPct
0.55
FlowStrongThr
0.62

RECIPE · Scalping

M5 — M15 indices & gold
InternalLen
7
SwingLen
30
UseCloseBreak
true
SweepRejectionPct
0.45
FlowCumWindow
7

RECIPE · Daily swing

D1 majors & crosses
InternalLen
4
SwingLen
15
UseCloseBreak
true
SweepLookback
7
FlowWindow
30

RECIPE · Aggressive

M15 — H1 volatile pairs
InternalLen
5
SwingLen
20
UseCloseBreak
false
SweepRejectionPct
0.4
FlowStrongThr
0.55

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.

A Suggested Workflow

One way to use the three systems together. Adapt as you find your own rhythm.

  1. Read the dashboard first. Swing trend tells you the directional bias. Internal tells you whether the immediate move agrees. Flow tells you whether participation is behind it.
  2. Identify the next level. The Next SH and Next SL rows show what the indicator is monitoring. These are the prices to watch for the next structural event.
  3. Wait for a break with confirmation. A swing-grade event with a [++] flow badge is the highest-conviction signal the indicator produces.
  4. Use sweeps as context. If a CHoCH fires shortly after a confirmed sweep at the same level, the reversal has both structural and liquidity context behind it.
  5. Skip the contrarian breaks. When a break fires with a [!?] badge, treat it with skepticism. Some still work, but the win rate is materially lower than aligned-flow signals.
The indicator does not place trades. It draws signals and fires alerts. Trade decisions, position sizing, and risk management are yours. Treat the signals as input to your own process, not as instructions.

Troubleshooting

Common questions and the answers I have given most often.

The dashboard is hidden behind the chart header

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.

The Next SL row says "broken" most of the time

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.

No flow badges appear on labels

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 markers seem to lag behind price

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.

Too many internal labels cluttering the chart

Increase InternalLen to 7 or 9, or turn ShowInternal off entirely. The Swing stream alone is often enough for higher-timeframe trading.

The indicator looks different from one attach to the next

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.

Honest Limits

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.

Credits & References

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.