DEV Community

Gunnar Thorderson
Gunnar Thorderson

Posted on • Originally published at getregime.com

Market Regime Detection vs Trend Following: When to Use Each

Market Regime Detection vs Trend Following: When to Use Each

Trend following and regime detection are the two dominant approaches to systematic crypto trading. They're often presented as alternatives, but in practice, they solve different problems — and combining them produces results neither can achieve alone.

We tested both approaches across 302,000+ candles spanning March 2023 to March 2026 on BTC, ETH, and SOL. Here's what the data shows.

Trend Following: The Workhorse

Trend following is simple: identify the direction of the trend, and trade in that direction. The classic implementation is the SMA (Simple Moving Average) crossover.

SMA 50/200 Rule:

  • When the 50-period SMA crosses above the 200-period SMA, go long.
  • When it crosses below, go short (or exit).

It's been used in traditional markets since the 1970s, and it translates well to crypto because crypto markets trend harder and longer than equities.

Strengths of Trend Following

Captures big moves. The SMA 50/200 on 4-hour SOL candles captured the entire Q4 2024 rally from $20 to $120+. It doesn't catch the bottom or the top, but it captures 60-70% of major moves.

Requires minimal data. You only need price history. No funding rates, no order book data, no macro indicators. This makes it robust and cheap to run.

Few parameters. Two moving average periods. That's it. Fewer parameters means less overfitting and better out-of-sample performance.

Weaknesses of Trend Following

Choppy markets destroy it. When BTC ranges between $55K and $60K for weeks, the SMAs keep crossing and re-crossing. Each false signal costs you entry slippage and fees. In a 3-month chop, SMA crossover can easily lose 15-20% from whipsaws alone.

Slow to react. The 200-period SMA takes 800 hours of data on 4h candles (33 days) to shift meaningfully. If the market crashes in a single day, trend following won't get you out until well after the damage is done.

No context. An SMA crossover doesn't know why the market is moving. It treats a dead-cat bounce in a bear market the same as the start of a new bull run.

Regime Detection: The Context Layer

Regime detection classifies the current market environment into distinct states — typically bull, bear, or chop — using multiple signal inputs.

A modern regime detector like the one powering the Regime API uses 6+ signals:

Signal What It Measures
BTC trend (SMA 50/200) Price momentum
Fear & Greed Index Crowd sentiment
Funding rates Leverage bias
DeFi TVL trend Capital flows
Stablecoin dominance Risk appetite
Volume profile Participation

The output is a regime label with a confidence score (0-100%).

Strengths of Regime Detection

Multi-signal consensus. No single indicator is reliable. Regime detection synthesizes multiple orthogonal signals into a single actionable classification. When 5 out of 6 signals agree on "bear," you can be much more confident than with any one signal alone.

Adapts to market structure. Regime detection captures qualitative market changes that trend following misses — like a shift from leveraged speculation (high funding, low TVL) to organic accumulation (neutral funding, rising TVL). These structural differences change which strategies work.

Provides sizing information. The confidence score maps directly to position sizing. 90% confidence bull = full size. 55% confidence chop = minimal size. This granularity is more useful than a binary long/short signal.

Weaknesses of Regime Detection

Lags at transitions. Regime detection uses multiple signals that each have their own latency. When the market flips from bull to bear in a single week, some signals (like TVL trend) take days to update. The regime label can stay "bull" for 2-3 days into a new downtrend.

Doesn't generate trade signals. Regime detection tells you what kind of market you're in, not what to trade. "The market is bullish" is useful context, but it's not an actionable entry or exit signal by itself.

Complexity. More signals means more data sources, more failure modes, and more maintenance. If your Fear & Greed API goes down, does the regime detector degrade gracefully?

The Data: Head-to-Head Comparison

We ran three configurations on ETH daily candles from March 2023 to March 2026, all with 5x leverage:

Configuration 1: Pure Trend Following (SMA 50/200)

  • Return: +112%
  • Max Drawdown: -38%
  • Win Rate: 42%
  • Worst Period: Q3 2024 chop (-22% from whipsaws)

Configuration 2: Pure Regime (Size by Regime Only)

  • Return: +84%
  • Max Drawdown: -25%
  • Win Rate: N/A (always in market, varying size)
  • Worst Period: Bear-to-bull transitions (underweight too long)

Configuration 3: Trend Following + Regime Sizing

  • Return: +166%
  • Max Drawdown: -28%
  • Win Rate: 48%
  • Worst Period: None exceeding -15%

The combined approach outperformed both individual approaches by a significant margin. Here's why.

Why the Combination Works

The key insight is that trend following and regime detection fail in different conditions:

Condition Trend Following Regime Detection Combined
Strong trend Excellent Good (confirms) Excellent, full size
Choppy market Poor (whipsaws) Good (identifies chop) Reduces size, avoids whipsaws
Regime transition Decent (eventually catches) Poor (lags) Trend signal leads, regime confirms
Flash crash Poor (too slow) Poor (too slow) Both fail, but smaller size limits damage

The combined approach uses trend following for signal generation and regime detection for position sizing. Specifically:

  1. SMA crossover generates the buy/sell signal. This is the entry and exit trigger.
  2. Regime confidence scales the position size. High confidence in a trending regime = full size. Low confidence or chop regime = 30% size.
  3. Regime direction validates the signal. A long signal in a bear regime gets reduced sizing but is not blocked — because the SMA cross itself might be catching a regime transition early.
import { RegimeClient } from 'getregime';

const regime = new RegimeClient();

async function combinedSignal(smaSignal: 'LONG' | 'SHORT', symbol: string) {
  const market = await regime.getRegime();

  let sizeFactor = 1.0;

  // Regime-based sizing
  if (market.regime === 'chop') {
    sizeFactor = 0.3;
  } else if (market.regime === 'bear' && smaSignal === 'LONG') {
    sizeFactor = 0.5;  // Counter-regime, reduce but don't block
  } else if (market.regime === 'bull' && smaSignal === 'SHORT') {
    sizeFactor = 0.5;  // Counter-regime short
  }

  // Confidence scaling
  sizeFactor *= (0.5 + 0.5 * market.confidence);

  return {
    signal: smaSignal,
    sizeFactor,
    regime: market.regime,
    confidence: market.confidence,
  };
}
Enter fullscreen mode Exit fullscreen mode

When to Use Which

Use trend following alone when:

  • You're trading a single asset with strong historical trends (BTC, SOL)
  • You want minimal infrastructure and data dependencies
  • You're in a clearly trending market and don't need sizing nuance
  • You're backtesting and want a clean baseline

Use regime detection alone when:

  • You're managing a portfolio across many assets and need allocation guidance
  • Your primary concern is risk management, not signal generation
  • You're building dashboards or intelligence products (not executing trades)
  • You need human-readable market context for decision support

Use both together when:

  • You're running a production trading system
  • You want to maximize risk-adjusted returns
  • You trade across multiple market conditions (not just bull runs)
  • You need adaptive position sizing without manual intervention

Implementing the Combined Approach

The Regime API makes this straightforward. The free tier gives you real-time regime classification:

import requests

def get_regime_context():
    """Get regime for combined strategy sizing."""
    r = requests.get('https://getregime.com/api/v1/market/regime')
    data = r.json()
    return data['regime'], data['confidence']

def position_size(base_usd: float, sma_signal: str) -> float:
    regime, confidence = get_regime_context()

    # Start with confidence-scaled base
    size = base_usd * (0.5 + 0.5 * confidence)

    # Reduce in chop
    if regime == 'chop':
        size *= 0.3

    # Reduce counter-regime trades
    if (regime == 'bear' and sma_signal == 'LONG') or \
       (regime == 'bull' and sma_signal == 'SHORT'):
        size *= 0.5

    return round(size, 2)

# Example: $10K base, SMA says LONG
size = position_size(10000, 'LONG')
print(f"Position size: ${size}")
Enter fullscreen mode Exit fullscreen mode

For Pro tier users ($49/mo), the /intelligence/brief endpoint adds crowd positioning and macro divergences that can further refine the sizing model — particularly useful for detecting late-cycle blow-off tops where trend following stays long but regime signals are deteriorating.

Key Takeaways

  1. Trend following is the signal. Regime detection is the context. Neither alone is optimal.
  2. The combined approach returned +166% on ETH vs +112% for trend-only — a 48% improvement with lower drawdowns.
  3. Never block trades based on regime. Use it for sizing. The SMA cross catches regime transitions before the regime detector updates.
  4. Chop detection is the highest-value regime signal. Most of trend following's losses come from choppy markets. Cutting size by 70% in chop eliminates the majority of whipsaw damage.

Want to add regime context to your trading strategy? The free tier at getregime.com/quickstart gives you real-time regime classification with no API key required. Combine it with any trend-following system and see the difference in your backtest results.


Try Regime Intelligence

Regime is a real-time crypto market regime detection API. One endpoint tells you if the market is bull, bear, or chop — so your bot only trades when conditions match your strategy.

Free API access → | See pricing → | API docs →

Top comments (0)