Saltar a contenido

Regime detection — bull vs bear vs transition

¿Cómo detectar en tiempo real si el mercado está cambiando de régimen? Crítico porque los momentum crashes ocurren en transiciones bear→bull. La recomendación: ensemble de 3-4 indicadores simples, no un solo modelo ML.

Principio

Ningún indicator solo es suficiente. Un sistema robusto: - Combina 3-4 signals ortogonales. - Define regímenes discretos (risk-on, risk-off, transition). - Switchea exposure por regime, no cada día.

Indicators recomendados (ortogonales)

1. Trend filter — SPY vs 200-day MA

  • Bull: SPY > 200-day MA.
  • Bear: SPY < 200-day MA -5%.
  • Signal único más usado por simple efectividad.

2. VIX level + term structure

  • VIX < 20: calm bull.
  • VIX 20-30: elevated uncertainty.
  • VIX > 30: panic / bear.
  • Backwardation (VIX9D > VIX1M): panic bottom potencial — contrarian signal.
  • Contango (VIX1M < VIX3M): normal, mild concern.

Cboe publica VIX9D, VIX, VIX3M, VIX6M, VIX1Y — usar la forma de la curva, no solo el nivel.

3. Breadth — advance/decline ratio

  • Bull: breadth >1.5 (más stocks subiendo que bajando consistentemente).
  • Divergence bajista: SPY sube pero breadth cae → rally frágil (ej: 2021-Q4 → 2022 bear).
  • Bull-Bear ratio: >1.5 bullish, <0.5 bearish, 0.5-1.5 neutral.

4. Yield curve

  • 10Y - 2Y inverted: históricamente predictor de recession (lag 6-18 meses).
  • No cambia la posición del mes siguiente, pero ajusta expectativa de transition.

Regímenes discretos

Combinar los 4 signals en 4 estados:

Régimen Condición Position sizing
Bull normal SPY>200MA + VIX<20 + breadth>1.5 100% target
Bull elevated SPY>200MA + VIX 20-30 + breadth>1 75% target
Transition SPY cross ±5% of 200MA o VIX 25-35 50% target
Bear / panic SPY<200MA-5% o VIX>35 o breadth<0.5 25% target o cash

Hysteresis: para evitar flip-flopping, requiere condiciones sostenidas 3-5 días antes de cambiar regime.

Integración con Strategy Agent

El Strategy Agent consulta regime flag al final de su procedure:

regime = detect_regime(spy_vs_200ma, vix_level, vix_term_structure, breadth)
position_sizing_scalar = {
    "bull_normal": 1.0,
    "bull_elevated": 0.75,
    "transition": 0.5,
    "bear_panic": 0.25
}[regime]

# Apply to all positions in the signals output

Esto suma al vol targeting de analysis/momentum-crash-risk — si ambos reducen, se multiplican (más conservative).

Por qué NO ML / black box

Tentación: entrenar un modelo ML que detecte regime shifts. Razones para evitar en MVP:

  1. Overfitting: limited regime transitions en data histórica (~10-15 desde 1990). Imposible entrenar bien.
  2. Interpretability: si falla, no sabes por qué.
  3. Robustness: regla simple sobre 4 signals documentados académicamente es más robusta.
  4. Time: MVP tiene que estar corriendo en semanas, no meses.

Post-MVP, si el sistema funciona, explorar HMM (Hidden Markov Models) o similar.

Gaps

  • Backtest del regime filter: ¿cuánto reduce drawdown? ¿cuánto cuesta en upside?
  • Sensitivity al threshold exacto (±5% vs ±10% del 200MA, VIX 30 vs 35).
  • Detección de false positives: en 2015-2016 hubo transition corto que revirtió — el sistema habría salido y re-entrado, costando fricción.
  • Cómo integrar macro context (Fed decisions, earnings season) sin convertirlo en discretionary.

Relaciones