Skip to main content

Spread Regime Indicator

Quick Reference

PropertyValue
Dimensionregime
Categorymarket_regime
Versionv1.0
Output Columnspread_regime

Spread regime: z-score of current spread vs rolling distribution — wide/tight spread state

Formula

(spread - rolling_mean(spread, window)) / rolling_std(spread, window)

CDM Inputs

ColumnCDM TableDescription
spreadcdm_*CDM source table

Parameters

ParameterTypeDefaultDescription
windowinteger300000Window for spread distribution estimation

Output

Column: spread_regime

Z-score of current spread relative to rolling distribution

Market Intuition & Trading Rationale

Spread regime indicator z-scores the current spread against its own distribution: (spread - μ) / σ. A z-score near 0 means spread is at its typical level. A z-score > 2 means spread is unusually wide (liquidity stress). A z-score < -1 means spread is unusually tight (cheap execution window). Self-calibrating — works across all instruments without per-symbol tuning.

Usage Cases

  • Execution gating: z > 2 → defer aggressive orders (spreads are abnormally wide). z < -1 → accelerate execution (spreads are abnormally tight — cheap to trade).
  • Liquidity stress early warning: Rising z-score signals deteriorating liquidity before depth evaporates or vol spikes. Pair with liquidity_stress_index for confirmation.
  • Mean reversion entry: Extreme spread spikes (z > 3) mean-revert as liquidity providers return. Enter after the peak when z-score starts declining toward zero.

YAML Definition

name: spread_regime_indicator
description: 'Spread regime: z-score of current spread vs rolling distribution — wide/tight
spread state'
category: market_regime
dimension: regime
version: v0.9.0 (Beta)
required_inputs:
- spread
output_column: spread_regime
output_description: Z-score of current spread relative to rolling distribution
tags:
- regime
- spread
- liquidity
parameters:
window:
type: integer
description: Window for spread distribution estimation
required: false
default: 300000
formula: (spread - rolling_mean(spread, window)) / rolling_std(spread, window)