En este artículo presentamos una herramienta en Python que clasifica automáticamente el tipo de mercado —alcista, bajista, lateral, corrección, rally o recesión— a partir de medias móviles, cambios porcentuales y volatilidad. Esta clasificación diaria permite analizar cualquier activo con un enfoque más riguroso y cuantitativo.
El objetivo es ofrecer a los inversores una forma sencilla y objetiva de identificar en qué entorno se encuentra el mercado en cada momento. Esto resulta especialmente útil para evaluar la solidez de una estrategia de inversión: no solo importa la rentabilidad global, sino cómo se comporta la estrategia en fases alcistas, en periodos de alta volatilidad o durante recesiones.
El artículo incluye un notebook descargable para ejecutar el análisis tanto en Google Colab como en un ordenador local, junto con instrucciones para incorporar datos propios en formato CSV. Una herramienta práctica para quienes buscan comprender mejor el contexto del mercado y poner a prueba sus estrategias con mayor precisión.
1. Notebook del Proyecto (descarga y ejecución)
👉 Descargar Notebook del Analizador de Mercado
Para Google Drive : 'Identificar_tipo_mercado_1.ipynb'
Para tu ordenador: 'Identificar_tipo_mercado_1.ipynb'
Este notebook permite:
Ejecutar el análisis directamente en Google Colab sin instalaciones.
O ejecutarlo en tu propio ordenador con Python estándar.
Dentro del notebook encontrarás instrucciones detalladas para:
Descargar cotizaciones desde yfinance.
Cargar tus propios CSV.
Analizar fondos o activos individuales o múltiples.
2. Criterios para Identificar el Tipo de Mercado
El sistema clasifica cada día del mercado combinando tres dimensiones:
Tendencia (medias móviles)
Momentum (cambios porcentuales)
Volatilidad (desviación estándar anualizada)
A continuación se explica cada criterio.
2.1. Medias Móviles (MA)
Se calculan dos medias móviles:
- MA_Short: media móvil de n días (por defecto 20)
- MA_Long: media móvil de m días (por defecto 50)
Criterio de tendencia
- Alcista: MA_Short > MA_Long
- Bajista: MA_Short < MA_Long
- Formula: MA = (Close_1 + Close_2 + ... + Close_n) / n
2.2. Cambio Porcentual a 30 Días (Pct_Change_30d)
Mide la variación del precio en los últimos 30 días.
Criterios
- Rally: Pct_Change_30d > rally_threshold (por defecto +15%)
- Corrección: Pct_Change_30d < correction_threshold (por defecto −10%)
- Formula : Pct_Change_30d = (Close_t − Close_(t−30)) / Close_(t−30)
2.3. Volatilidad (Volatility)
- Se calcula la desviación estándar anualizada de los retornos logarítmicos (ventana de 20 días).
- Retorno logarítmico: Log_Return_t = ln(Close_t / Close_(t−1))
- Volatilidad anualizada: Volatility = stdev(Log_Return últimos 20 días) * sqrt(252)
Criterio para detectar Recesión
Un mercado se clasifica como Recesión si:
- Está en tendencia bajista, y
- La volatilidad supera el percentil 75 de su serie histórica.
2.4. Clasificación por defecto
Si no se cumplen los criterios anteriores:
Lateral
3. Resumen de la Lógica de Clasificación
El sistema sigue una secuencia jerárquica:
1. Tendencia (Medias Móviles)
- MA_Short > MA_Long → Alcista
- MA_Short < MA_Long → Bajista
2. Momentum (Cambios Porcentuales)
- Rally → subidas fuertes
- Corrección → caídas fuertes
3. Volatilidad (Recesiones)
- Mercado bajista + volatilidad alta → Recesión
4. Si nada aplica → Lateral
4. Parámetros Ajustables
- short_ma, long_ma → ventanas de medias móviles
- rally_threshold, correction_threshold → umbrales de momentum
- Ventana de volatilidad → por defecto 20 días
- Percentil de estrés → por defecto 75
Permite adaptar el modelo a distintos activos y estilos de inversión.
5. ¿Por qué este enfoque?
Combina tres dimensiones complementarias:
✔️ Tendencia → visión estructural
✔️ Momentum → fuerza del movimiento
✔️ Volatilidad → riesgo y estrés del mercado
El resultado es una clasificación:
- Robusta
- Interpretables
- Adaptable
Útil para análisis cuantitativo y para inversores que buscan reglas claras para entender el contexto del mercado.
6. Cómo Usar el Script para Probar Estrategias de Trading
El script permite:
1️⃣ Clasificación automática del mercado día a día
Tipos posibles:
Alcista
Bajista
Lateral
Corrección
Rally
Recesión
2️⃣ Selección interactiva de períodos
El método analizar_y_mostrar() permite:
Introducir fechas de inicio y fin
Obtener el tipo de mercado diario
Generar una tabla con rangos consecutivos del mismo tipo
Si detectas algún error, tienes sugerencias de mejora o crees que este análisis podría ampliarse en alguna dirección, estaré encantado de leerte en los comentarios. Toda aportación es bienvenida: desde matices técnicos hasta ideas para futuras versiones del notebook o nuevas funcionalidades. Este proyecto pretende ser útil y práctico para la comunidad, y tu feedback es fundamental para seguir mejorándolo.