OutlierQLive demo

Options Trading Signal Engine

  • Python
  • FastAPI
  • React
  • TypeScript
  • yfinance
  • VADER
01

Overview & Problem

Options markets react to news in seconds, but the signal-to-noise ratio is brutal. OutlierQ tries to surface statistically meaningful events early enough to act on, while filtering out the noise that makes most retail signals useless.

02

What I Built

A multi-stage anomaly-detection pipeline: z-score-based volume analysis, sentiment filtering on news text, and keyword-driven event classification.

A FastAPI backend serving signals and model metrics to a React/TypeScript dashboard that visualizes live recommendations.

155+ passing tests across the pipeline and API surface.

03

Architecture

OutlierQ is a linear pipeline with a deliberately cheap-to-expensive ordering. yfinance minute bars and news headlines are ingested first; a rolling volume z-score does the inexpensive initial filtering so only statistically unusual tickers proceed to the heavier stages. Flagged tickers then pass through VADER sentiment scoring and a keyword event classifier, which together set the strike-price and expiry heuristics for the emitted signal.

A FastAPI backend serves the resulting signals and model metrics to a React/TypeScript dashboard. FastAPI was chosen for its async I/O, which suits fanning out to multiple data sources each cycle; the dashboard polls the API on an interval rather than holding an open subscription, keeping the client simple and the backend stateless.

See it in action

latest signal
fetching latest signal
04

Key Technical Decisions & Tradeoffs

OutlierQ is a staged, rules-augmented pipeline rather than a single end-to-end model — a choice driven by interpretability and data reality. With limited labelled data and a need to explain why a signal fired, a transparent chain (z-score → sentiment → event class) is far easier to debug, justify, and tune than an opaque model that emits a recommendation with no traceable reasoning.

The pipeline is ordered cheapest-filter-first on purpose: the volume z-score discards the overwhelming majority of tickers before any sentiment or classification work runs. That keeps per-cycle latency dominated by data ingestion — the network-bound yfinance and news calls — rather than by model inference, which is why the backend leans on async I/O.

The 155+ tests concentrate on the pipeline's deterministic logic: z-score maths, sentiment thresholds, event-classification rules, and the API contract. They deliberately don't test signal profitability, which depends on live market behaviour — the tests guarantee the system computes what it claims, not that the market cooperates.

05

Results

The live demo runs the full pipeline end-to-end and surfaces a representative signal — ticker, score, strike, expiry, and the drivers behind it — served through the same FastAPI surface the dashboard consumes.

Because the stages are interpretable, every signal traces back to the evidence that produced it — the volume anomaly, the sentiment read, the event class — rather than appearing as an unexplained recommendation.

06 —

Links