Fintech · Market Screener

EMA Crossover Screener

Real-time crypto screener detecting 9/20 EMA crossovers across five timeframes, with a live dashboard and Telegram alerts.

PythonFastAPIUvicornWebSocketsPandasNumPyDelta Exchange APITelegram Bot APIJavaScriptDockerNginxGCP

Status

Live

EMA periods

9 / 20

Timeframes

1m · 15m · 1h · 4h · 1d

Data

Live WebSocket

Alerts

Telegram

The Problem

Spotting EMA crossovers by hand means flipping between charts, symbols, and timeframes — five timeframes across a dozen symbols is sixty charts to watch. Signals get missed, and by the time a crossover is noticed on a one-minute chart the move is often already over.

The Solution

A persistent WebSocket connection to Delta Exchange streams live candles into per-symbol, per-timeframe EMA state. Crossovers are confirmed on candle close and pushed straight to the browser over a WebSocket, so the dashboard updates without polling. The watchlist is dynamic — adding or removing a symbol subscribes and unsubscribes from the upstream feed at runtime, with no restart. Historical candles are cached to disk so restarts are near-instant instead of refetching everything.

Features

Real-Time Signal Detection

  • Persistent WebSocket connection to the Delta Exchange India feed
  • 9-period and 20-period EMA computed per symbol and per timeframe
  • Crossovers confirmed on candle close to avoid mid-candle false signals
  • Five timeframes tracked concurrently — 1m, 15m, 1h, 4h, and 1d
  • Signals pushed to the browser over WebSocket, with no client polling
  • Historical crossover lookup for any symbol and timeframe

Dynamic Watchlist

  • Add or remove symbols from the UI without restarting the service
  • Runtime subscribe and unsubscribe against the upstream market feed
  • Full instrument list pulled live from the Delta Exchange products API
  • Watchlist state persisted server-side across restarts
  • Colour-coded multi-timeframe table showing bullish and bearish states

Alerts & Sessions

  • Telegram alerts on confirmed crossovers, delivered per linked user
  • PIN-based Telegram account linking, with unlink support
  • HS256-signed sessions with a 30-minute expiry and rolling refresh
  • Capped concurrent sessions per deployment
  • Rotating file logs for both backend events and frontend errors

Architecture

FastAPI application with an async polling manager holding one persistent WebSocket to Delta Exchange. Candle data flows into per-symbol, per-timeframe EMA state in shared memory; confirmed crossovers fan out to connected browsers over a /ws endpoint and to Telegram through the bot worker. Historical candles are cached on disk so restarts avoid refetching the full history. Runs as a containerised uvicorn app behind Nginx with Let's Encrypt TLS on GCP.