Publicado originalmente en medium.com

La mayoría del contenido de trading te vende una señal. Compra en la caída. Vigila el RSI. Sigue la media de 200 días.
Casi ninguno te muestra el número real detrás de la afirmación.
Así que tomé diez años de datos diarios del S&P 500 a través de EODHD, construí nueve de las señales "predictivas" más comunes de las que la gente habla, y medí cada una contra lo que realmente pasó con los precios un mes después. Sin rango de fechas seleccionado a dedo. Sin backtest que empiece convenientemente después de un crash. Solo 2.262 sesiones de trading con números reales.
El resultado no fue lo que sugiere la mayoría del contenido financiero.
Escribe "qué predice los retornos bursátiles" en YouTube y te encontrarás con un muro de respuestas seguras de sí mismas. Momentum. RSI. Picos de volumen. La media móvil de 200 días. Cada una presentada como si fuera una regla.
La señal de alarma es que ninguno de esos vídeos muestra un coeficiente de correlación. Ninguno muestra un R². Muestran un gráfico con una flecha apuntando hacia arriba, y una estrategia que "habría" ganado dinero si hubieras empezado justo en la semana correcta.
Eso no es análisis. Es una historia ajustada hacia atrás sobre datos que ya ocurrieron.
Quería saber algo más simple: a lo largo de una década completa, ¿cuánto del retorno del mes siguiente puedes explicar realmente usando la información que tenías hoy?
Elegí nueve predictores candidatos, todos calculables a partir de datos ordinarios de precio y volumen, sin indicadores propietarios:
Para cada día del dataset, registré el valor del predictor y el retorno real del S&P 500 durante los siguientes 21 días de trading, y luego medí la correlación y el R² sobre toda la muestra.
Así es el setup, usando el endpoint de precios históricos de EODHD para SPY:
import requests
import pandas as pd
import numpy as np
API_TOKEN = "YOUR_API_TOKEN"
url = f"https://eodhd.com/api/eod/SPY.US"
params = {
"api_token": API_TOKEN,
"from": "2015-08-01",
"to": "2025-08-30",
"fmt": "json"
}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data)
df["date"] = pd.to_datetime(df["date"])
df = df.sort_values("date").reset_index(drop=True)
df["adj_close"] = df["adjusted_close"]
horizon = 21
df["fwd_ret_1m"] = df["adj_close"].shift(-horizon) / df["adj_close"] - 1
df["mom_3m"] = df["adj_close"] / df["adj_close"].shift(63) - 1
df["drawdown_63d"] = df["adj_close"] / df["adj_close"].rolling(63).max() - 1
Diez años de barras diarias, sin huecos, ajustadas por splits y dividendos, en una sola llamada. Construir las características de momentum, volatilidad y RSI encima de eso me llevó quizás 30 líneas de pandas.
Aquí está el ranking completo, ordenado por R² (cuánto de la varianza en los retornos del mes siguiente explica cada señal por sí sola):
| Predictor | Correlación | R² |
|---|---|---|
| Drawdown desde el máximo de 63 días | -0.26 | 6.6% |
| Volatilidad realizada de 21 días | +0.23 | 5.4% |
| Momentum a 6 meses | -0.19 | 3.5% |
| Momentum a 3 meses | -0.19 | 3.5% |
| Distancia a la media de 200 días | -0.18 | 3.4% |
| Momentum a 1 mes | -0.15 | 2.3% |
| Momentum a 12 meses | -0.10 | 0.9% |
| RSI(14) | -0.09 | 0.8% |
| Pico de volumen reciente | -0.01 | 0.0% |
Hay varias cosas que llaman la atención.
Primero, nada aquí se acerca a explicar la mayor parte del retorno del mes siguiente. El mejor predictor individual explica en torno al 6,6% de la varianza. El otro 93% es ruido, noticias y todo lo demás que mueve los mercados.
Segundo, los signos son los opuestos a lo que suele implicar el contenido de "momentum trading". Las acciones que habían caído fuerte durante los 3 a 6 meses anteriores tendían a rebotar, no a seguir cayendo. Las acciones muy estiradas por encima de su media de 200 días tendían a rendir peor, no a seguir corriendo.
Descomponer la distancia respecto a la media de 200 días en quintiles hace el patrón muy concreto:
| Quintil (bajo a alto) | Retorno medio del mes siguiente |
|---|---|
| Muy por debajo de la media | 1.89% |
| Por debajo de la media | 1.81% |
| Cerca de la media | 1.22% |
| Por encima de la media | 0.83% |
| Muy por encima de la media | 0.53% |
Cuanto más "barata" parecía una acción respecto a su propia tendencia reciente, mejor tendía a comportarse el mes siguiente. Eso es reversión a la media, no momentum.
Tercero, y esta es la parte que casi todo el contenido se salta por completo: los picos de volumen no me dijeron nada. El volumen reciente relativo a su propia media tuvo una correlación de -0.01. Si has visto alguna estrategia construida sobre "un volumen inusual precede a un movimiento", esta década de datos del S&P 500 no la respalda como señal independiente.
Comprobé cuánto se correlacionaban entre sí los nueve predictores, y ahí es donde está la historia real.
El drawdown, la distancia respecto a la media de 200 días y el momentum de 3 a 6 meses estaban todos correlacionados entre sí entre 0.6 y 0.88. No son nueve señales independientes. Son una sola idea subyacente, medida de nueve formas ligeramente distintas: si el precio ha caído recientemente respecto a su propia historia.
Combinar las dos señales más fuertes, drawdown y volatilidad, en un solo modelo solo empujó el R² de 6.6% a 6.8%. Añadir una segunda medición del mismo fenómeno subyacente apenas movió el número.
También hay un problema de régimen. Dividí la muestra en 2020 y volví a calcular la correlación del drawdown. Antes de 2020 era -0.14. Después de 2020, saltó a -0.28. La señal prácticamente se duplicó en fuerza, lo cual encaja con dos de los episodios de caída-y-recuperación más marcados de la historia reciente de los mercados: marzo de 2020 y el suelo del mercado bajista de 2022.
Eso no es necesariamente una ley estable de los mercados. Puede que sean tres o cuatro eventos concretos haciendo la mayor parte del trabajo en una muestra de diez años.
Hice toda esta prueba con un solo proveedor de datos. El endpoint de precios históricos de EODHD me dio closes ajustados de una década completa para un solo ticker, con splits y dividendos ya resueltos, así que no tuve que reconstruir los precios ajustados yo mismo.
El mismo setup se extiende sin mucho esfuerzo adicional:
Si vas a probar señales a lo largo de una década de histórico, consigue un 10% de descuento en EODHD aquí: eodhd.com
No necesitas el setup de Python de arriba para correr esta prueba tú mismo. EODHD ofrece un servidor MCP, lo que significa que Claude puede llamar a sus endpoints directamente, sin código de integración de por medio.
Una vez conectado, Claude ve las herramientas de EODHD igual que cualquier otra herramienta: precios históricos, indicadores técnicos, fundamentales y más, invocables directamente desde una petición en lenguaje natural.
Este es el prompt que reproduce el análisis de este artículo:
Pull 10 years of daily adjusted close and volume data for SPY.US from EODHD. Build these features for each day: 1, 3, 6, and 12-month momentum, 21-day realized volatility, distance from the 200-day moving average, RSI(14), 63-day drawdown from the trailing high, and 5-day average volume relative to the 21-day average. Calculate the forward 21-trading-day return for each date. Report the Pearson correlation and R² of each feature against that forward return, sorted by R², then break the strongest feature into quintiles and show the average forward return per quintile.
Ejecuté ese mismo prompt contra el conector para confirmar que se reproduce. Claude extrajo la serie de RSI directamente, sin código, en una sola llamada a herramienta:
date rsi
2025-08-29 59.20
2025-08-28 65.11
2025-08-27 63.08
2025-08-26 61.76
2025-08-25 59.28
Los mismos números que obtendrías con la versión en pandas de arriba, solo que sin tener que mantener el script tú mismo. Para una prueba puntual, el conector es más rápido. Para algo que vayas a ejecutar cada semana o donde quieras control total, la versión en Python de la sección anterior merece la pena mantenerla.
¿Quieres la skill de Claude reutilizable que uso para este tipo de backtest? Está en mi canal de YouTube, donde explico todo el setup en español.
Los predictores de arriba hablan del ruido del mes siguiente, no de qué mantener durante años. Pregunta distinta, herramienta distinta: el endpoint de screener de EODHD en lugar de precios históricos.
Corrí una versión de un filtro de calidad-ingresos a largo plazo: capitalización de mercado superior a $50B, EPS positivo, rentabilidad por dividendo superior al 1.5%, acciones comunes cotizadas en EE. UU. (excluyendo ADRs OTC de bajo volumen y acciones preferentes, que aparecen en los resultados en bruto pero no son útiles aquí).
| Ticker | Empresa | Sector | Cap. de mercado | EPS | Rentabilidad por dividendo |
|---|---|---|---|---|---|
| JPM | JPMorgan Chase | Financials | $951B | 23.57 | 1.69% |
| JNJ | Johnson & Johnson | Healthcare | $646B | 8.68 | 1.97% |
| XOM | Exxon Mobil | Energy | $644B | 7.79 | 2.61% |
| ABBV | AbbVie | Healthcare | $451B | 3.54 | 2.65% |
| BAC | Bank of America | Financials | $436B | 4.41 | 1.83% |
| CVX | Chevron | Energy | $396B | 10.50 | 3.49% |
| KO | Coca-Cola | Consumer Defensive | $386B | 3.35 | 2.34% |
| MRK | Merck | Healthcare | $366B | 1.25 | 2.22% |
| UNH | UnitedHealth | Healthcare | $353B | 15.48 | 2.27% |
| MS | Morgan Stanley | Financials | $337B | 12.37 | 1.93% |
| PG | Procter & Gamble | Consumer Defensive | $335B | 6.64 | 2.98% |
Fíjate en lo que falta. NVDA, AAPL y MSFT no pasan este filtro; su rentabilidad por dividendo está por debajo del 1%. No es un descuido, es lo que pasa cuando filtras por flujo de caja más dividendo en lugar de por crecimiento. Cambia el filtro y la lista se da la vuelta por completo.
Este screener tampoco dice nada sobre la calidad del balance, las tendencias de margen, ni cuánto tiempo lleva cada empresa aumentando su dividendo. Conseguir eso requiere extraer fundamentales por ticker y revisar deuda/EBITDA e histórico de márgenes individualmente, una tarea mucho más pesada que una sola llamada al screener.
Trata una lista así como una preselección de partida para investigar más, no como una lista de compra.
La reversión a la media tras un drawdown real es lo más parecido a un patrón repetible en estos datos. Las acciones que cayeron fuerte respecto a su propia historia reciente tendían a recuperar parte de ese terreno durante el mes siguiente.
Momentum, RSI y picos de volumen, usados solos, casi no explicaron nada. Si una estrategia se apoya por completo en uno de estos como su ventaja, esta década de datos del S&P 500 no lo respalda.
Combinar señales redundantes no multiplica tu ventaja. Nueve indicadores suena más riguroso que uno. Aquí, la mayoría estaban midiendo lo mismo desde un ángulo distinto.
Nada de esto es asesoramiento de inversión, y un R² de 6.6% no es un sistema de trading. Es un punto de partida para hacerte mejores preguntas sobre tus propios datos, en lugar de fiarte de un gráfico con una flecha dibujada encima.
¿El momentum predice realmente los retornos bursátiles? En esta muestra de 10 años del S&P 500, el momentum a 3, 6 y 12 meses estuvo correlacionado negativamente con los retornos del mes siguiente. Las acciones que habían subido fuerte tendían a frenar, no a seguir acelerando. Es lo contrario de lo que suele afirmar el contenido de "momentum investing" para un horizonte de un solo mes.
¿Es el RSI un buen predictor por sí solo? No, según esta medida. El RSI(14) explicó menos del 1% de la varianza en los retornos del mes siguiente. Se movía en la misma dirección que las demás señales de reversión a la media, solo que mucho más débilmente.
¿Cuál es la señal más fuerte en esta prueba? El drawdown desde el máximo de los últimos 63 días, con un R² de 6.6%. Sigue siendo una señal débil por sí sola, y está muy correlacionada con varios de los otros predictores, así que no son realmente nueve ideas independientes confirmándose entre sí.
¿Puedo correr esto en otra acción o índice? Sí. Cambia el ticker en el código o en el prompt de MCP de arriba. El mismo conjunto de características funciona para cualquier símbolo que cubra EODHD, incluyendo mercados fuera de EE. UU. y cripto.
¿Es un R² del 6.6% suficiente para operar con ello? No. Significa que la señal explica una porción pequeña de la varianza del mes siguiente, con el otro 93%+ viniendo de todo lo demás. Trátalo como un input más, no como un sistema.
¿Buscas contenido técnico para tu empresa? Puedo ayudarte — LinkedIn · kevinmenesesgonzalez@gmail.com
Más análisis como este: kevinmeneses.com