Skip to content

Alerts ​

Alerts are the cross-cutting trigger system that lives behind the Watchlist, the News panel, and the price-target sub-panel of the Security dashboard. One backend service, three call sites. Implemented at backend/routes/alerts.py.

Alert types ​

Price thresholds ​

Trigger when a symbol's last quote crosses an absolute level (above or below). The most common alert. Alert conditions are evaluated server-side on a schedule against the latest quotes (EODHD is the primary quote source; Finnhub is optional and supplemental). Quotes reach the browser by periodic (~30s) REST polling — there is no client WebSocket stream.

Volume spikes ​

Trigger when intraday volume exceeds a multiple of 30-day average. Useful for catching unusual interest before the price reflects it.

News keyword triggers ​

Trigger when a story matching your keyword filter (and optionally tagged with a symbol from your watchlist) lands in the news feed. Composes with News panel screens.

Price-target / consensus shifts ​

Trigger when sell-side analyst consensus revises up or down beyond a threshold. Driven by EODHD analyst-estimates feed.

Composing an alert ​

The bell icon in the Watchlist, the Alert me action in News, and the Watch this target button in Price target all open the same composer modal. Inputs:

FieldNotes
TriggerOne of the four types above
Symbol or keywordRequired; auto-filled from caller context
ThresholdAbsolute price, % change, or volume multiplier
WindowAlways-on, market-hours-only, or custom schedule
ChannelIn-app toast, email, or both

Delivery channels ​

  • In-app toasts — surface in the right rail with the offending data point.
  • Email — off by default; requires SMTP configuration (EMAIL_* env vars). Until SMTP is set, email alerts (like verification, password reset, and digests) silently no-op. Once configured, verify your address in Settings → Profile.
  • Webhook delivery is on the roadmap — not yet shipped.

State and history ​

Alerts have three states: active, tracking (within 1% of trigger), inactive (paused or fired-once). See status.* keys in frontend/src/i18n/en.json. Past triggers are listed in the alerts panel; you can re-arm a one-shot alert from history.

Limits ​

  • Soft cap: ~100 active alerts per user. There's no hard limit, but the composer warns above that.
  • News keyword alerts evaluate every ~5 minutes on the news feed cadence — they're not instant.
  • In-app toasts are universal; email delivery depends on SMTP being configured (off by default).

Tips ​

  • For a stop-loss-like alert, set a price threshold ~5% below your average cost from the Market panel Portfolio view.
  • For breakouts, combine a price threshold with a volume spike alert on the same symbol — fire only when both are true (composer supports AND combinator).
  • Don't forget to disarm alerts on closed positions — they don't auto-prune.

Released under the project license. Public sources only — no proprietary or restricted data.