Daily Stock Analysis: un sistema de IA que convierte una watchlist en un panel de decisiones diario
daily_stock_analysis de ZhuLinsen es uno de los proyectos de IA financiera más destacados del momento — el repositorio de Python número 1 del día en Trendshift. Pero lo interesante no es el número de estrellas. Es que el proyecto se niega a fingir que predice precios. En cambio, resuelve un problema más acotado y mucho más útil: cada día de negociación, tomar tu watchlist y producir un informe analítico estructurado y explicable — y entregarlo donde realmente lees las cosas, tu mensajería.
Descargo de responsabilidad del autor del proyecto: solo para aprendizaje e investigación. No es asesoramiento de inversión. Los mercados conllevan riesgo.
Idea central: no un bot, sino un analista-informante diario

La mayoría de los repos de "IA para trading" persiguen la misma fantasía: modelo dentro, señal fuera, dinero arriba. daily_stock_analysis se construye sobre una premisa más honesta — lo difícil de invertir no es generar una señal más, sino ensamblar una imagen completa y coherente de un valor y escribirla de la misma manera cada día.
Así que se comporta como un analista junior con un horario fijo. El pipeline es lineal y legible:
| Etapa | Qué ocurre |
|---|---|
| Obtención de datos | Cotizaciones, velas diarias, indicadores, flujo de capital, fundamentales, chips |
| Análisis técnico | Medias móviles, RSI, volumen, ratio de desviación, clasificación de tendencia |
| Noticias e inteligencia | Busca noticias recientes, anuncios, sentimiento por ticker |
| Análisis LLM | Construye un paquete de contexto y un prompt, produce un panel de decisiones en JSON |
| Renderizado del informe | Informe en Markdown, opcionalmente convertido a imagen |
| Notificación | Envía a WeCom, Feishu, Telegram, Discord, Slack o correo electrónico |
Por defecto se ejecuta según un horario (días laborables, tras el cierre) y omite los días sin negociación. Cubre acciones A, Hong Kong, acciones y ETF de EE. UU., con soporte reducido para los mercados japonés y coreano donde las fuentes de datos no llegan.
La parte silenciosamente inteligente: el respaldo de datos


La decisión de ingeniería más robusta del proyecto no es el LLM — es cómo trata los datos como poco fiables por defecto.
Los datos de mercado se obtienen mediante una cadena de prioridad de seis proveedores, cada uno como respaldo del anterior:
Efinance (P0) → Tencent (P0) → Akshare (P1) → Pytdx (P2) → Baostock (P3) → Yfinance (P4)
Cuando analizas un ticker de EE. UU., el sistema omite automáticamente los proveedores exclusivos de China y se dirige a Yahoo Finance. Si una fuente falla, expira o devuelve datos parciales, la ejecución degrada solo ese bloque en lugar de hacer fallar todo el informe. Al prompt incluso se le indica qué bloques son fallback, partial o missing — de modo que el modelo está obligado a escribir "datos no disponibles" en lugar de inventar una cifra.
Este es el instinto correcto para cualquier sistema en producción: el fallo de una sola fuente de datos nunca debe tumbar todo el análisis. Trata cada fuente como best-effort, estandariza los campos y haz visibles los datos faltantes en lugar de rellenarlos silenciosamente.
El panel de decisiones

El LLM no devuelve prosa — devuelve un "panel de decisiones" JSON estricto que el informe renderiza en un diseño coherente:
- Conclusión principal — una frase: comprar, mantener o esperar, más la urgencia temporal.
- Consejo diferenciado — orientación distinta para quien ya mantiene la posición frente a quien está en efectivo.
- Perspectiva de datos — alineación de medias móviles, precio frente a soporte/resistencia, ratio de desviación, lectura de volumen.
- Inteligencia — alertas de riesgo y catalizadores positivos, cada uno con fecha obligatoria.
- Plan de batalla — puntos de francotirador concretos: compra ideal, stop-loss, objetivo, dimensionamiento de posición.
- Lista de verificación — cada condición marcada con ✅ / ⚠️ / ❌ (alineación alcista, desviación dentro de rango, volumen, sin noticias negativas importantes, valoración).
La disciplina incorporada en el prompt es contundente y sensata: no perseguir el precio (una desviación superior al 5% por encima de la MA5 es un "no comprar" tajante), operar solo con alineación alcista de medias móviles (MA5 > MA10 > MA20), preferir comprar un retroceso con volumen decreciente hacia el soporte, y no cambiar nunca entre compra y venta por el movimiento de un solo día.
Estrategias de agente: hazle una pregunta al sistema

Más allá del informe diario, el proyecto incluye un modo agente con 15 guías de estrategia incorporadas que puedes consultar por ticker:
| Familia | Ejemplos |
|---|---|
| Tendencia / medias móviles | Cruce dorado de medias, tendencia alcista |
| Teoría estructural | Teoría de Chan (Zen), onda de Elliott |
| Comportamiento / liquidez | ciclo emocional, ruptura de volumen, volumen en el fondo, retroceso con contracción |
| Catalizador / narrativa | tema candente, impulsado por eventos, reajuste de expectativas |
| Calidad / crecimiento | calidad del crecimiento |
Cada estrategia es un archivo YAML con sus propias reglas, herramientas requeridas y ajustes de puntuación — de modo que la "inteligencia" es configurable y auditable, no está oculta dentro de un único prompt gigante.
Cómo leerlo sin autoengañarse

Cualquier proyecto así es fácil de sobrevalorar. Una lista honesta de evaluación:
- Calidad de la fuente de noticias. El bloque de inteligencia es tan bueno como tus proveedores de búsqueda configurados — sin ellos, el sentimiento y los catalizadores quedan vacíos y el informe se apoya por completo en lo técnico.
- Determinismo. Las salidas del LLM varían; el mismo ticker puede leerse ligeramente distinto entre ejecuciones. Trata el panel como una opinión estructurada, no como una verdad fija.
- Cobertura por mercado. La profundidad de las acciones A (flujo de capital, chips, dragon-tiger) se degrada de forma elegante a
not_supporteden los mercados que los datos no cubren. - Frescura de los datos. Vigila las banderas
fallback/partial— las entradas degradadas deberían reducir tu confianza, tal como indica el prompt. - Backtesting ≠ beneficio. El informe es soporte a la decisión, no una ventaja verificada.
Limitaciones y evaluación honesta

Lo que daily_stock_analysis no es:
- No es un sistema de ejecución. Analiza e informa; no coloca órdenes ni modela liquidez.
- Depende del modelo. La calidad de la salida sigue al LLM que utilices.
- Depende de la búsqueda. Sin claves de API de noticias, la mitad cualitativa del informe se adelgaza.
- No determinista. Entradas idénticas pueden producir paneles ligeramente distintos.
Enlaces
- 💻 GitHub: ZhuLinsen/daily_stock_analysis
- 📄 Licencia: MIT
Conclusión
daily_stock_analysis es valioso no como oráculo sino como un hábito analítico repetible, automatizado:
- Estandariza lo que significa "mirar una acción", cada día.
- Trata los datos como poco fiables y haz visibles las carencias.
- Haz que la conclusión sea explicable — puntuación, niveles, lista de verificación, riesgos.
- Separa la generación de ideas (15 estrategias) de un marco de decisión disciplinado.
Para aprender, revisar a diario y prototipar un flujo de trabajo de investigación, está bien construido. Para producción, la siguiente capa es la misma que necesita cualquier sistema serio: datos validados, control de la deriva del modelo, ejecución realista y reglas de riesgo que vivan en el código, no solo en los prompts.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.