RCA Regime-Conditional Alpha
The difference between a signal that works on average and one that works right now
Learning Objectives
- •Distinguish conditional from unconditional signal performance
- •Evaluate signals within specific market regimes
- •Implement regime-conditional signal filtering
- •Avoid regime overfitting with its many subtle traps
Explain Like I'm 5
A signal might have a positive IC overall, but when you break it down by regime, it might only work in trending markets and actively lose money in choppy ones. Knowing *when* to use a signal is as important as having it.
Think of It This Way
Sunscreen has a positive effect on average. But its conditional effectiveness depends entirely on weather. Wearing sunscreen indoors is useless; not wearing it in direct sun is reckless. Same principle for trading signals.
1Conditional vs. Unconditional IC
2How ML Handles This Implicitly
3Explicit Regime Switching Approaches
4The Regime Overfitting Trap
5Implementation Decision Tree
Key Formulas
Conditional IC
Spearman correlation between predictions and realized returns, computed only within periods classified as regime k
Hands-On Code
Regime-Conditional Alpha Analysis
import numpy as np
from scipy.stats import spearmanr
def regime_conditional_ic(signal, returns, regime_labels, min_obs=30):
"""Compute IC for a signal within each market regime."""
unique_regimes = np.unique(regime_labels)
results = {}
# Unconditional IC
overall_ic, overall_p = spearmanr(signal, returns)
results['unconditional'] = {
'ic': round(overall_ic, 4),
'p_value': round(overall_p, 4),
'n_obs': len(signal)
}
# Conditional IC per regime
for regime in unique_regimes:
mask = regime_labels == regime
n_obs = mask.sum()
if n_obs < min_obs:
results[f'regime_{regime}'] = {'ic': None, 'status': 'insufficient_data'}
continue
ic, p_val = spearmanr(signal[mask], returns[mask])
results[f'regime_{regime}'] = {
'ic': round(ic, 4),
'p_value': round(p_val, 4),
'n_obs': int(n_obs),
'pct_of_time': round(n_obs / len(signal) * 100, 1)
}
return resultsComputes IC for a trading signal within each market regime, comparing regime-conditional to unconditional performance to assess the benefit of regime conditioning.
Knowledge Check
Q1.A momentum signal has unconditional IC of 0.04 but regime-conditional IC of +0.08 (trending) and -0.06 (crisis). The best approach is:
Q2.In-sample Sharpe increases monotonically with more regimes while out-of-sample peaks at 2 regimes. This indicates:
Assignment
Take a momentum and a mean-reversion signal for your favorite FX pair. Compute unconditional IC for each, then compute regime-conditional IC using Hurst-based classification. Build a regime-switching strategy and compare its walk-forward Sharpe to a non-regime-conditional approach.