Joaquín Borja León Projects ES

Analista incansable

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.

Personal project2026

Period
2026
Team
Personal project
Context
Runs on my Ubuntu server, inside a private network
My role
The whole project
Tech stack
  • Python
  • pandas
  • yfinance
  • SQLite
  • FastAPI
  • Jinja2
  • n8n
  • Telegram
Watchlist sorted by distance to the entry zone, with each company’s score
Company detail with price, zone, RSI, moving averages and score breakdown
Read-only web panel designed for the phone, with synthetic demo data.

What it does

  • Downloads daily prices and annual statements into SQLite. Missing data is shown as “n/a”: it is never invented.
  • Scores each company from 0 to 100 on eight criteria and lists red flags separately.
  • Alerts when a stock enters its zone or gets within 3%, crosses the 200-day average or gets a new red flag.
  • Every zone alert includes the latest headlines and the manual note for the stock.

How it is built

  • Weights and thresholds in YAML, to tune the method without touching code.
  • An anti-spam table stops the same alert repeating for 5 days.
  • JSON output for an n8n workflow, or straight to the Telegram API.
  • A FastAPI panel with no write endpoints and a demo mode with synthetic data.

The score

CriterionGreenAmberWeight
Revenue growth> 20 %10 to 20%20
Gross margin> 50 %35 to 50%10
Free cash flowpositive and growingpositive20
FCF margin> 10 %5 to 10%10
Net debt / EBITDA< 1x or net cash1 to 3x10
ROE> 15 %8 to 15%10
Annual dilution< 2 %2 to 5%10
Earnings keep upgrow with revenuepositive but slower10

Green earns the full weight, amber half, and red or missing data zero. Red flags are listed separately and never averaged away.

Let’s talk

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.

If you’re looking for someone for backend, data or applied AI work, write to me and I’ll get back to you.