Skip to content

dxiri/ValueSentinel

Repository files navigation

ValueSentinel

Financial valuation metrics alerter for value investors.

ValueSentinel monitors fundamental valuation ratios — P/E, EV/EBITDA, P/B, P/FCF, and more — and sends alerts when user-defined conditions are met. Unlike traditional price-alert tools, ValueSentinel alerts on value (e.g., "P/E dropped below 15x" or "EV/EBITDA hit a 10-year low").

Features

  • 9 valuation metrics — Trailing P/E, Forward P/E, EV/EBITDA, EV/EBIT, P/FCF, P/FFO, P/AFFO, P/B, P/S
  • 3 alert types — Absolute threshold, percentage change, historical extremes (rolling window)
  • Global equities — Any ticker supported by yfinance (US, Europe, Asia-Pacific, Emerging Markets)
  • 4 notification channels — Telegram, Discord, Email (SMTP), Pushover
  • Priority levels — Critical (immediate), Normal (next cycle), Informational (log only)
  • Configurable cooldowns — 1h, 6h, 12h, 24h, 48h, or 1 week per alert
  • Streamlit dashboard — Create, edit, pause, resume, stop, and remove alerts; view history; manage watchlist
  • Optional IBKR integration — Real-time pricing via Interactive Brokers; auto-fallback to yfinance delayed quotes
  • Docker-ready — Single docker compose up for production deployment with PostgreSQL

Quick Start

Prerequisites

  • Python 3.10+
  • (Optional) Docker & Docker Compose for containerized deployment

One-Command Deploy

Cross-platform deployment scripts handle prerequisites, environment setup, builds, and migrations automatically.

macOS / Linux:

git clone https://github.com/<your-username>/ValueSentinel.git
cd ValueSentinel
./deploy.sh              # Docker (default)
./deploy.sh --local      # Local Python venv

Windows (PowerShell):

git clone https://github.com/<your-username>/ValueSentinel.git
cd ValueSentinel
.\deploy.ps1              # Docker (default)
.\deploy.ps1 -Mode local  # Local Python venv

Manual: Local Development

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
# Edit .env with your API keys / notification credentials
valuesentinel init-db
streamlit run src/valuesentinel/dashboard/app.py

Manual: Docker (Recommended for Production)

cp .env.example .env
# Edit .env — set notification credentials
docker compose build && docker compose up -d

The dashboard will be available at http://localhost:8501.

Three services start automatically:

  • app — Streamlit dashboard
  • scheduler — Background alert check loop
  • db — PostgreSQL 16

CLI

valuesentinel init-db          # Initialize database tables
valuesentinel add-ticker AAPL  # Add a ticker to watchlist
valuesentinel add-ticker SHEL.L  # Non-US ticker (London)
valuesentinel remove-ticker AAPL  # Remove a ticker (cascades to its alerts & cached fundamentals)
valuesentinel refresh AAPL     # Refresh fundamentals for a ticker
valuesentinel check            # Run one alert-check cycle
valuesentinel run              # Start the scheduler loop

Project Structure

ValueSentinel/
├── src/valuesentinel/
│   ├── models.py              # SQLAlchemy models & enums
│   ├── config.py              # Environment-based configuration
│   ├── cli.py                 # CLI entry point
│   ├── data/
│   │   ├── yfinance_connector.py   # yfinance data fetching & caching
│   │   └── price_provider.py       # IBKR / yfinance price abstraction
│   ├── calculator/
│   │   └── valuation.py       # All 9 valuation metric formulas
│   ├── alerts/
│   │   └── engine.py          # Alert evaluation & state management
│   ├── notifications/
│   │   ├── manager.py         # Multi-channel dispatch
│   │   ├── telegram.py        # Telegram Bot API
│   │   ├── discord.py         # Discord Webhooks
│   │   ├── email_notifier.py  # SMTP
│   │   └── pushover.py        # Pushover API
│   ├── scheduler/
│   │   └── jobs.py            # APScheduler job definitions
│   └── dashboard/
│       └── app.py             # Streamlit UI (5 pages)
├── alembic/                   # Database migrations
├── tests/                     # pytest test suite
├── docs/
│   ├── deployment-guide.md    # Technical deployment documentation
│   └── user-guide.md          # End-user guide
├── docker-compose.yml
├── Dockerfile
├── Makefile
├── deploy.sh              # Deployment script (macOS/Linux)
├── deploy.ps1             # Deployment script (Windows)
├── pyproject.toml
├── .env.example
└── README.md

Configuration

Copy .env.example to .env and fill in the values you need. At minimum:

Variable Required Description
DATABASE_URL Yes SQLite or PostgreSQL connection string
CHECK_INTERVAL_MINUTES No Check cycle interval (default: 15)
TELEGRAM_BOT_TOKEN If using Telegram Bot token from @BotFather
TELEGRAM_CHAT_ID If using Telegram Target chat/group ID
DISCORD_WEBHOOK_URL If using Discord Webhook URL
SMTP_HOST / SMTP_PORT / etc. If using Email SMTP server details
PUSHOVER_USER_KEY / PUSHOVER_API_TOKEN If using Pushover Pushover credentials
IBKR_HOST / IBKR_PORT If using IBKR IB Gateway/TWS connection

See docs/deployment-guide.md for full configuration reference.

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=valuesentinel --cov-report=term-missing

# Lint
ruff check src/ tests/

# Type check
mypy src/valuesentinel/

Documentation

  • Deployment Guide — Installation, Docker, migrations, monitoring, backups
  • User Guide — Dashboard usage, alert creation, metrics reference, FAQ

License

MIT

About

A specialized financial monitoring tool designed to alert investors based on fundamental valuation metrics rather than simple price action, delivering alerts via Email, Telegram, Discord and Pushover

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors