Fusionar 3 fuentes de señal para el IBEX35: técnico, sentimiento y geopolítica (GDELT)
Un ensemble que combina LightGBM sobre 25+ indicadores técnicos, sentimiento de noticias y eventos geopolíticos de GDELT. Por qué el Sharpe importa más que el accuracy. Educativo, no consejo.
Aviso importante: esto es un proyecto de investigación y demostración técnica. Las señales que genera no son asesoramiento financiero ni recomendación de inversión. Lo interesante aquí no es "ganar a la bolsa" (spoiler: predecir la dirección del mercado es casi imposible), sino cómo se combinan tres fuentes de señal muy distintas en un solo modelo.
La honestidad primero: el mercado es casi aleatorio
Voy a empezar por el número más incómodo: el AUC-ROC del clasificador es 0.5280. Un AUC de 0.5 es puro azar. ¿Fracaso? No: es exactamente lo que la literatura predice para la predicción de dirección de mercado a corto plazo. Cualquiera que te enseñe un AUC de 0.85 prediciendo si el IBEX sube mañana o te está engañando o tiene data leakage. La pregunta correcta no es "¿aciertas la dirección?" sino "¿gestionas el riesgo mejor que comprar y esperar?".
| Métrica | Estrategia | Buy & Hold |
|---|---|---|
| Ratio de Sharpe | 2.56 | 1.83 |
| AUC-ROC dirección | 0.528 (≈ azar, esperado) | |
Ahí está el valor: un Sharpe de 2.56 frente a 1.83 del Buy & Hold. El sistema no acierta más veces; pierde menos cuando se equivoca.
Las tres fuentes
La señal final es un ensemble de tres perspectivas independientes sobre cada uno de los 15 tickers del IBEX35 (5 años de OHLCV vía yfinance):
- Técnico (el músculo): más de 25 indicadores —RSI, MACD,
Bandas de Bollinger, ATR, estocástico, OBV, EMA 20/50/200— alimentando un
LightGBM optimizado con Optuna (35 trials) y validado
con
TimeSeriesSplit(nunca con un split aleatorio: eso filtraría el futuro en el entrenamiento). - Geopolítica (el contexto): el GDELT Project (API v2, pública, sin key) da una puntuación de tensión geopolítica por país y empresa a partir de la cobertura mundial de noticias. Un repunte de tensión sube la incertidumbre esperada de un ticker.
- Sentimiento (el matiz): puntuación heurística basada en palabras clave financieras sobre titulares RSS.
Nota de transparencia: el diseño original contemplaba
ProsusAI/finbert (441 MB) para el sentimiento. En la demo del
portfolio uso análisis heurístico por palabras clave, más ligero;
FinBERT se integraría en producción con inferencia por lotes nocturna. Lo cuento
porque prometer "FinBERT" y servir otra cosa sería mentir, y este portfolio se
toma la honestidad en serio.
Explicabilidad: SHAP por ticker
Un modelo de trading que no puedes explicar es inservible. Cada señal viene con sus valores SHAP (TreeExplainer sobre el LightGBM), que dicen exactamente qué indicador empujó la decisión:
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_ticker)
# → "COMPRA de SAN.MC: +0.12 por RSI(14)=58, +0.04 por MACD>0, -0.02 por tensión GDELT"
Por qué fusionar y no elegir
Cada fuente sola es débil. El técnico ve patrones pero es ciego a una crisis diplomática; GDELT ve la crisis pero no la sobrecompra técnica. Combinarlas no sube el accuracy mágicamente —el mercado sigue siendo casi aleatorio— pero reduce los falsos positivos caros: la señal técnica de compra se atenúa si GDELT detecta tensión alta. Eso es lo que mueve el Sharpe.
Pruébalo tú mismo
Es un proyecto personal y open source: no vendo nada, solo comparto cómo está construido. Puedes probar la demo en vivo y trastear con ella. El código está en GitHub. Si te resulta útil o tienes una idea para mejorarlo, encantado de leerla.
Sobre este proyecto
AlphaSignal — Laboratorio de señales IBEX35
Pipeline three-source para el IBEX35: LightGBM técnico + sentimiento de noticias (heurístico) + GDELT (geopolítica), con actualización diaria. Evaluación transparente: el modelo ti...
Newsletter
¿Te aviso de nuevos proyectos y artículos?
Sin spam. Solo un email cuando publico algo nuevo de IA. Baja en un clic.