ORB article

ORB Volume Filter: Separating Real Breakouts From Noise

The exact volume rule the engine runs on every closed M1 bar: the multiplier, the lookback, what it rejects, and where it honestly falls short.

Opening range high Opening range low Breakout close Range window
ORB Volume Filter: Separating Real Breakouts From Noise

Where the filter sits in the trigger

The engine evaluates once per closed M1 bar. Two gates, both required, both on the same bar:

  1. Close gate. The bar's close — not the wick — must be above the opening range high (long) or below the opening range low (short).
  2. Volume gate. The same bar's tick volume must pass the 1.5× rule below.

Pass one gate and fail the other: no signal, nothing posts. That is the whole trigger. There is no VWAP, no moving average, no oscillator anywhere in the decision — a fixed session clock, a 15-minute range, an M1 closing price, and tick volume against a 20-bar average.

The range the filter protects is fixed by the clock: the high and low of the first 15 minutes of M1 bars after each GMT session open, computed once and never redrawn.

SessionOpen (GMT)Opening range window (GMT)Filter active until (GMT)
Sydney22:0022:00–22:1507:00
Asia00:0000:00–00:1509:00
London07:0007:00–07:1515:00
New York13:3013:30–13:4520:00

All session math runs in GMT and converts to broker server time internally, so DST changes and the Sydney window crossing midnight do not shift the range.

The exact rule, straight from the EA

The breakout bar's tick volume must be at least 1.5× the average tick volume of the 20 bars immediately preceding it — bars 2 through 21, counting back from the breakout bar. The breakout bar never averages itself; the baseline is the market as it stood the moment before the break. The alert prints the measured ratio, e.g. “2.3× average”.

ParameterValue
Volume sourceTick volume, M1 bars
Multiplier1.5×
Lookback (N)20 bars immediately before the breakout bar (bars 2–21)
Conditionbreakout-bar volume ≥ 1.5 × average(prior 20 bars)
EvaluatedOnce per closed M1 bar, same bar as the close check
Signals per sessionMax one long and one short per day — each side latches once fired
InstrumentsXAUUSD, XAGUSD, US100/NQ/USTEC
Alert outputEntry, stop (1R in points), Target 1 (1R), Target 2 (2R), volume ratio

Two design choices matter. The threshold is relative, not a fixed tick count — the same rule holds on a thin Sydney open and a loud New York open because each break is judged against its own last 20 minutes. And the lookback is short — 20 minutes, not a day — so the baseline reflects conditions right now, not this morning.

Worked example: pass vs. reject

US100, New York session. Opening range fixed at 13:45 GMT. The 20 bars before a candidate breakout bar average 1,800 ticks, so the threshold on that bar is 1.5 × 1,800 = 2,700 ticks.

BarClose vs. OR highTick volumeRatioResult
Bar ACloses above4,1402.3×Signal fires. Alert reads “2.3× average”.
Bar BCloses above2,4301.35×No signal. Close passed, volume failed.
Bar CWick above, closes inside5,2002.9×No signal. Volume passed, close failed.
Bar DCloses above2,7001.50×Signal fires. The rule is ≥, so exactly 1.5× passes.

A rejected bar does not kill the setup. The long side has not latched, so if Bar B fails at 1.35×, a later bar that closes above the range at ≥1.5× volume still fires the long. Note the threshold moves with the market: each new candidate bar is measured against its own prior 20 bars, so by Bar D the average may no longer be 1,800.

When a signal fires, R is defined on that same bar: entry = the confirming close, stop = the opposite side of the opening range, 1R = the distance between them. Say entry 21,540 with the OR low at 21,500: 1R = 40 points, Target 1 = 21,580, Target 2 = 21,620. All of it, plus the volume ratio, in one embed.

Why breakouts without volume fail more

The rule as taught: no volume confirmation, no trade. A breakout without volume is a rumor, and it routinely snaps back inside the range.

The mechanics: the opening range edges are where stop orders and breakout orders cluster. A low-volume push through the level can be nothing more than resting orders getting cleared — a probe, not a move. If participation did not expand as price left the range, nobody with size accepted prices out there, and the market tends to return to where two-sided trade last existed: inside the range. A break that snaps back inside is exactly the trade the stop at the opposite side of the range punishes hardest — the filter's job is to refuse it before it becomes an alert.

Volume expansion is the only evidence inside the trigger itself that new participants showed up on the break. Everything else in the stack — expected move, gamma walls, flip point, institutional flow bias — is confluence for grading targets and skip decisions. None of it generates or confirms an entry.

What the filter rejects

  • Quiet drift. Price leaks over the OR high on fading participation. The close gate passes, the ratio prints 1.1–1.4×, no alert. This is the single most common rejection.
  • Dead-hour pokes. A break during a lull where the breakout bar is indistinguishable from the 20 bars before it. The bar has to stand out against its own immediate context, not against a fixed number.
  • Thin-session noise. Sydney runs small ranges and more fakeouts. The 1.5× rule is unchanged there, but the baseline is Sydney's own thin tape — a break still has to beat its local average by half again, which most Sydney pokes do not.
  • Stop-run probes. One bar pushes through the level on ordinary volume, clears the resting stops, and the next bar closes back inside. Without expansion on the confirming bar, the engine never called it a breakout in the first place.
  • Wick spikes. Strictly, the close gate kills these before volume is consulted, but the gates work as a pair: a wick through the level never triggers anything, no matter how loud the bar.

Honest limits

  • Tick volume is a proxy. On CFDs (XAUUSD, XAGUSD, US100) tick volume counts price updates at your broker, not contracts traded on an exchange. It correlates well with real activity, but feeds differ — it is consistent within one broker, which is what a relative ratio needs, yet two brokers can disagree on a marginal 1.4×-vs-1.6× bar.
  • The relative baseline cuts both ways. After 20 dead bars, a merely average bar can clear 1.5×. After 20 loud bars — right after a news release, say — a genuinely strong breakout bar can fail because the baseline is inflated. The filter measures relative expansion, not absolute participation.
  • It tests one bar. The ratio is computed on the confirming bar only. Volume can collapse on the very next bar and the filter will not know. Follow-through is what the 1R/2R targets and the stop at the opposite side of the range are for.
  • It confirms participation, not destination. A 3× break aimed straight into a nearby stall level can still be a poor trade. That is why the teaching layer grades signals against the expected move and mapped institutional strikes — a skip-and-target overlay, never part of the trigger.
  • It rejects some winners. A fixed 1.5× threshold with zero discretion will occasionally filter a break that would have worked, and will occasionally pass a loud break that fails anyway. That is the cost of a mechanical rule, and it is why all signals — including losers — are logged openly in the results channel. No hype, no guarantees, just data.

One more thing the filter does not do: place trades. The EA is signals-only — it computes the range, checks the close, checks the ratio, and posts the alert. Execution and risk are yours. Education, not financial advice.

See the filter fire live

The Discord posts every opening range as it completes and every volume-confirmed breakout with entry, stop, 1R/2R targets, and the measured ratio — winners and losers alike, logged in the open. Premium adds ORB Flow Engine context and institutional option flow for grading targets and skips. Education, not financial advice.

Join the Discord