What is the Breadth Signal?

The Breadth Signal is a pure breadth-based indicator that analyzes market participation using two key components:

Strong Buy Buy Hold Caution Trim No Signal
Core Philosophy: "No market confirmation = no portfolio risk." We only enter long positions when both MCO timing and MCSI confirmation align.

Component Analysis

MCO (McClellan Oscillator)

Purpose: Short-term breadth momentum timing

Calculation: Advancers minus decliners smoothed with 19/39-day EMAs

MCO = EMA19(breadth) - EMA39(breadth)

Key Thresholds:

  • Below -1σ - General oversold alert (timing window opens)
  • Below -2σ - Deep oversold (higher conviction potential)
MCSI (McClellan Summation Index)

Purpose: Longer-term participation confirmation

Calculation: Cumulative sum of MCO + 10DMA comparison

MCSI = cumulative_sum(MCO)
Curl-up = linear_slope(recent_MCSI_values) > 0
Reclaim = current_MCSI > 10DMA AND previous_MCSI ≤ 10DMA

Key Signals:

  • Curl-up - Early improvement, test the turn
  • Recently Reclaimed 10DMA (5d) - Structural shift within last 5 days, press with conviction
  • Curl-down - Contracting participation, stop adding
  • Above 10DMA - Confirmed uptrend, hold positions

Signal Generation Rules

Original Rule (Alex's Gitbook) Script Implementation Signal
Deep oversold MCO (-2σ) + MCSI curl-up + 10DMA reclaim mco_sigma <= -2 && mcsi_curl_up && mcsi_reclaiming_10dma Strong Buy
Oversold MCO (-1σ) + MCSI curl-up (even without full reclaim) mco_sigma <= -1 && mcsi_curl_up Buy
Oversold MCO but no MCSI confirmation (no curl-up) mco_oversold && !mcsi_curl_up Caution
Early MCSI curl-up from oversold but no MCO oversold mcsi_curl_up && mcsi_sigma < 0 && !mco_oversold Caution
MCSI above 10DMA + curl-up + not extended (confirmed uptrend) mcsi_above_10dma && mcsi_curl_up && !mcsi_extended Hold
MCSI extended (+1σ+) + curl-down (late stage from overbought) mcsi_sigma >= 1 && mcsi_curl_down Trim
MCSI curl-down (not extended) - participation fading mcsi_curl_down && !mcsi_extended Caution
No oversold MCO and no positive MCSI trend else condition No Signal

How the Signal is Calculated

1
Data Collection

Fetch historical MCO and MCSI values (typically 300 data points for optimal sigma calculation)

2
Sigma Calculations

Calculate rolling standard deviation (252-period) for both MCO and MCSI to determine deviation from normal

sigma = (current_value - rolling_mean) / rolling_std
3
MCSI Trend Analysis

Determine curl-up using linear regression on recent values and check for 10DMA reclaim

curl_slope = linear_regression_slope(MCSI[last_3_days])
reclaim = (MCSI_today > 10DMA) AND (MCSI_yesterday ≤ 10DMA)
4
Signal Generation

Apply the confluence rules in priority order to generate final signal with reasoning

Trading Guidelines

When to Act
  • Strong Buy: Highest conviction window - deep oversold MCO + MCSI curl-up + recently reclaimed 10DMA
  • Buy: Standard entry - oversold MCO with early MCSI confirmation (curl-up)
  • Hold: Confirmed uptrend - MCSI above 10DMA + curl-up, hold positions, selective adds
  • Consider price context (21DMA, RS) for final entry timing
When to Wait
  • Caution: Monitor only - isolated signals without full confluence or participation fading
  • Trim: Extended + curling down - trim into strength, no new positions
  • No Signal: Stay flat - fading participation or no setup
  • Never add new positions when MCSI is in confirmed downtrend
Important: This is a breadth-only layer. Alex layers price analysis (21DMA) and Relative Strength on top for final entry decisions. The breadth signal provides the "when" (timing) and "if" (confirmation), while price/RS provide the exact entry.

Multi-Index Analysis

Our implementation tracks breadth signals across three major indices:

NYSE

Broad market breadth - most comprehensive market participation

NASDAQ

Tech/growth focus - leading indicator for risk appetite

SPY

S&P 500 ETF - large-cap institutional participation

Strategy: Look for confluence across indices. Strongest signals occur when multiple indices show green/strong_green simultaneously.
Back to All Guides
Help me understand this page