Joaquín Borja León ProyectosProjects

Analista incansable

Vigila cada día una lista de acciones, puntúa cada empresa por sus fundamentales y avisa cuando algo merece una segunda mirada. Analiza y vigila; nunca predice ni opera.Every day it watches a list of stocks, scores each company on its fundamentals and flags anything worth a second look. It analyses and watches; it never predicts or trades.

Proyecto personalPersonal project2026

PeriodoPeriod
2026
EquipoTeam
Proyecto personalPersonal project
ContextoContext
Corre en mi servidor Ubuntu, en una red privadaRuns on my Ubuntu server, inside a private network
Mi papelMy role
Todo el proyectoThe whole project
TecnologíasTech stack
  • Python
  • pandas
  • yfinance
  • SQLite
  • FastAPI
  • Jinja2
  • n8n
  • Telegram
Lista de seguimiento ordenada por distancia a la zona de entrada, con la puntuación de cada empresa
Detalle de una empresa con precio, zona, RSI, medias y desglose de la puntuación
Panel web de solo lectura pensado para el móvil, con datos sintéticos de demostración.Read-only web panel designed for the phone, with synthetic demo data.

Qué haceWhat it does

  • Descarga precios diarios y cuentas anuales y los guarda en SQLite. Un dato que falta se muestra como «s/d»: nunca se inventa.Downloads daily prices and annual statements into SQLite. Missing data is shown as “n/a”: it is never invented.
  • Puntúa cada empresa de 0 a 100 con ocho criterios y lista aparte las banderas rojas.Scores each company from 0 to 100 on eight criteria and lists red flags separately.
  • Avisa al entrar en la zona de interés o quedarse a menos del 3 %, al cruzar la media de 200 sesiones o al aparecer una bandera roja nueva.Alerts when a stock enters its zone or gets within 3%, crosses the 200-day average or gets a new red flag.
  • Cada aviso de zona incluye los últimos titulares y la nota manual del valor.Every zone alert includes the latest headlines and the manual note for the stock.

Cómo está hechoHow it is built

  • Pesos y umbrales en un YAML, para ajustar el método sin tocar código.Weights and thresholds in YAML, to tune the method without touching code.
  • Una tabla antispam evita repetir el mismo aviso durante 5 días.An anti-spam table stops the same alert repeating for 5 days.
  • Salida en JSON para un flujo de n8n o envío directo por la API de Telegram.JSON output for an n8n workflow, or straight to the Telegram API.
  • Panel FastAPI sin endpoints de escritura y un modo demo con datos sintéticos.A FastAPI panel with no write endpoints and a demo mode with synthetic data.

La puntuaciónThe score

CriterioCriterionVerdeGreenÁmbarAmberPesoWeight
Crecimiento de ingresosRevenue growth> 20 %10 a 20 %10 to 20%20
Margen brutoGross margin> 50 %35 a 50 %35 to 50%10
Flujo de caja libreFree cash flowpositivo y crecientepositive and growingpositivopositive20
Margen de flujo de cajaFCF margin> 10 %5 a 10 %5 to 10%10
Deuda neta / EBITDANet debt / EBITDA< 1x o caja neta< 1x or net cash1 a 3x1 to 3x10
ROE> 15 %8 a 15 %8 to 15%10
Dilución anualAnnual dilution< 2 %2 a 5 %2 to 5%10
El beneficio acompañaEarnings keep upcrece como los ingresosgrow with revenuepositivo pero más lentopositive but slower10

Verde suma el peso completo, ámbar la mitad, y rojo o dato ausente, cero. Las banderas rojas se listan aparte y no se promedian.Green earns the full weight, amber half, and red or missing data zero. Red flags are listed separately and never averaged away.

¿Hablamos?Let’s talk

Soy de Sevilla y ahora vivo en Madrid. Me gusta que las cosas funcionen de principio a fin: diseñar el sistema, escribir el código, desplegarlo y medir si de verdad responde bien.I’m from Seville and now live in Madrid. I like things to work end to end: designing the system, writing the code, deploying it and measuring whether it really holds up.

Si buscas a alguien para backend, datos o IA aplicada, escríbeme y te respondo.If you’re looking for someone for backend, data or applied AI work, write to me and I’ll get back to you.