Why Session-Based Regime Detection Beats Indicator-Based Regime Detection for Forex Bots

Forex already runs on a regime clock most bots ignore in favor of statistical methods built for markets that don't have one.


Search for regime detection in a trading context and almost everything you find borrows from equities research: hidden Markov models fitted to return series, changepoint detection algorithms, rolling volatility regime classifiers trained on decades of index data. These are legitimate techniques, built for a market structure where there’s no fixed daily clock governing who’s actually trading. Forex has that clock, and most of the regime-detection content aimed at retail bot builders quietly ignores it in favor of methods imported wholesale from a different asset class with a different underlying structure.

That’s backwards for this specific market. Forex liquidity and participation shift on a schedule, not just on a statistical boundary that has to be inferred after the fact from price behavior. The session structure isn’t a proxy for regime, in a meaningful sense it often is the regime, and treating it as secondary to an HMM or a changepoint model means reaching for a noisier, laggier tool when a cleaner one is sitting in the timestamp of every single tick.

Why the borrowed approach doesn’t transfer cleanly

Statistical regime-detection methods work by inferring hidden states from observed price behavior, which is exactly the right approach in a market where there’s no external structural signal to lean on. Equities don’t have a global 24-hour session cycle in the same way currencies do. A single exchange’s trading hours don’t tell you much about global regime shifts the way the handoff between Tokyo, London, and New York does for a currency pair.

Forex, by contrast, has an external, known, non-inferred driver of participation composition: which financial centers are open and actively trading at any given moment. That’s not a hidden state that needs to be statistically estimated from noisy price data after the fact. It’s a fact you already know before the candle even closes. Building a regime detector that ignores this and instead tries to infer the same information indirectly from volatility or returns is solving a problem that, for this asset class specifically, already has a more direct answer available.

The clock-based signal hiding in plain sight

Liquidity composition changes on a fixed schedule across four broad windows: the Asian session (00:00–08:00 UTC), typically thinner and more prone to range-bound chop; the London session (08:00–16:00 UTC), where volatility and directional volume ramp up sharply; the New York session (13:00–21:00 UTC), often carrying the bulk of news-driven, high-conviction moves; and the London/New York overlap (13:00–16:00 UTC), where liquidity peaks and spread compresses. These aren’t soft tendencies that need to be discovered through statistical inference. They’re a structural fact of how the global forex market operates, repeatable and known in advance.

Window UTC Typical regime character
Asian 00:00–08:00 Range-bound, thinner liquidity
London 08:00–16:00 Trend-prone, volatility ramping
New York 13:00–21:00 High conviction, news-sensitive
Overlap 13:00–16:00 Peak liquidity, tightest spread

A pattern-based strategy that’s genuinely trend-following in nature will often show a materially different edge in the London or overlap windows compared to the Asian session, not because some hidden statistical state changed, but because the participant composition driving price during those hours is structurally different. That difference is available to you before a single trade is placed, which is a meaningfully stronger position than waiting for a statistical model to infer, after some lag, that conditions have shifted.

Encoding it directly into the strategy instead of inferring it

This is where session-based regime detection has a practical advantage that goes beyond being conceptually cleaner: it’s trivial to encode directly into a strategy’s configuration rather than bolted on as a separate detection layer. A JSON config with start_hour and end_hour fields isn’t just a scheduling convenience, it’s a regime filter, provided those hours were chosen because the pattern’s edge was validated specifically within that window rather than left at the default of covering the full day. Restricting a trend-following pattern’s start_hour to align with the London open and its end_hour to the close of the New York overlap is functionally equivalent to running a regime classifier and only trading when it detects trend-favorable conditions, except it requires no model, no training data, and no risk of the classifier lagging behind the actual shift.

This also interacts directly with realistic cost modeling. Spread and slippage aren’t uniform across sessions, they’re tightest during the overlap and widest during thin Asian liquidity, so a session-based regime filter is simultaneously filtering for the conditions where a pattern’s underlying edge tends to be strongest and where execution cost tends to be lowest. An indicator-based regime detector doesn’t get you that second benefit for free, because volatility and liquidity don’t move in lockstep the way session and liquidity reliably do.

Where indicator-based detection still earns its place

None of this means statistical regime detection is worthless for forex bots, it’s genuinely useful for catching shifts that don’t respect the session clock, a sudden macro catalyst, a central bank surprise, a geopolitical shock that changes participant behavior mid-session regardless of which window it happens to fall in. Session structure tells you the baseline regime you should expect at a given hour. A statistical layer on top of that is well suited to catching the exceptions, the moments when the expected regime for that session gets overridden by something external.

The mistake isn’t using statistical methods, it’s reaching for them first and treating session structure as an afterthought, when for this specific asset class the schedule is doing most of the regime-detection work already, for free, without a single rolling window calculation required.