QuantE β€” Devpost Write-Up


🌟 Inspiration

Earnings calls move markets β€” sometimes violently. A single hedged phrase from a CFO or a deflected analyst question can signal weakness that won't show up in the numbers for another quarter. Yet most retail traders read the headline EPS number and move on, missing the richest signal of all: how management talks when they're uncertain.

We wanted to build a tool that listens the way a seasoned buy-side analyst would β€” catching the evasion, the momentum shifts, the over-hedged guidance β€” and converts it into an actionable trading signal in real time.


πŸ“‘ What It Does

QuantE is a real-time NLP-powered earnings call analyzer that transforms raw transcripts into structured trading intelligence.

You drop in a ticker, hit Analyze, and within seconds a streaming pipeline fires:

  • 3-factor NLP scoring grades the call on guidance certainty, analyst Q&A transparency, and semantic language momentum using sentence-transformer embeddings
  • EPS surprise integration adjusts signal confidence (not the score) based on how the reported number compared to consensus
  • A live trading signal β€” LONG, SHORT, or NEUTRAL β€” with a confidence percentage and bootstrap confidence intervals
  • A voice summary narrated by a deep AI voice that describes the call like a trading desk analyst would ("Nvidia is looking pretty bullish here β€” 78% confidence on this one…")
  • A replay simulator that steps through historical candlestick data post-earnings with auto-calculated take-profit/stop-loss levels and live P&L tracking
  • A backtester showing directional accuracy, Sharpe proxy, signal decay curves, and an ablation study comparing NLP vs. keyword-only baselines

πŸ”§ How We Built It

Backend β€” FastAPI + Python

The core is a multi-factor signal engine. Guidance Hedge (35% weight) scans forward-looking statements for certainty vs. hedging keywords. Analyst Pressure (15%) detects Q&A evasion, repeat questioning, and deflection patterns. Language Momentum (50%) runs all-MiniLM-L6-v2 sentence embeddings against positive/negative anchor phrase clusters to capture semantic drift across the call. An EPS surprise modifier nudges confidence Β±15% without touching the composite score.

Results stream to the frontend via Server-Sent Events in 9 sequential events β€” parsing, three sub-scores, composite signal, per-sentence attribution heatmap, price data, and a done trigger for TTS.

Frontend β€” React 18 SPA (zero build step)

A three-panel layout: transcript input on the left, an animated gauge + sub-score bars + sentence heatmap in the center, and a Recharts price action chart + Alpaca paper trading panel on the right. A second page runs the TradingView Lightweight Charts replay simulator.

Voice β€” ElevenLabs

A conversational TTS script maps raw signal data into natural analyst-style narration (tickers expanded to company names), synthesized with the Brian voice on eleven_multilingual_v2. The center panel auto-scrolls with an easeInOut curve during playback, with frosted gradient motion-blur edges.

Paper Trading β€” Alpaca

Signals can be executed directly as paper trades with position sizing scaled by confidence ($2,000 Γ— confidence notional).


🧱 Challenges We Ran Into

Autoplay is a browser minefield. Modern browsers block audio.play() unless it's directly inside a user gesture. We solved this by warming up a silent audio element on the "Analyze" button click, then reusing that same unlocked element for TTS playback β€” threading the needle between the gesture requirement and the async SSE pipeline that fires the audio URL seconds later.

NaN propagation from yfinance. Financial data is messy. yfinance returns NaN for missing prices, numpy produces Infinity on edge-case calculations, and both explode JSON serialization silently. We added a recursive _sanitize() pass over every outbound payload.

React hooks ordering. An early return null before a useEffect call in the sub-score bar component caused a hooks-order violation that only surfaced when scores toggled visibility. Moved all hooks above the early return with visibility guards inside the effect.

Stale closures on mute state. The TTS mute button's state was captured at SSE registration time, so toggling mute during analysis had no effect. Fixed by syncing a ttsMutedRef on every toggle and reading the ref (not the state) inside the SSE done handler.


πŸ† Accomplishments That We're Proud Of

  • A fully streaming analysis pipeline that animates results progressively rather than blocking on a single API call β€” the UX feels live
  • Bootstrap confidence intervals on guidance and momentum scores, giving traders a sense of statistical uncertainty rather than false precision
  • A signal decay curve showing return attribution at 1, 2, 3, 5, 7, 10, 15, and 20 day horizons β€” so you know whether this is a day-trade or a swing
  • NLP vs. keyword baseline ablation that quantifies how much the embedding layer actually adds over simple word counting (spoiler: meaningfully)
  • The auto-scrolling, voice-narrated summary β€” genuinely the most delightful part to demo

πŸ“š What We Learned

Earnings call NLP is deceptively hard. Management teams are trained to hedge β€” so a simple positive/negative sentiment model sees every call as mildly bullish. The real signal lives in the ratio of hedging to certainty, the shift in language tone between prepared remarks and Q&A, and whether management answers the question that was actually asked. Weighting momentum at 50% and building the guidance factor around directional certainty (not just positivity) was a hard-won design decision.

We also learned that streaming UX is worth the complexity. Watching the gauge needle swing as each sub-score arrives is qualitatively different from a spinner followed by a wall of results β€” it builds trust in the model's reasoning as it unfolds.


πŸš€ What's Next for QuantE

  • Multi-quarter trend analysis β€” track how a company's language patterns evolve across 4–8 quarters to detect guidance quality degradation early
  • Sector-relative scoring β€” calibrate signals against the average hedge density for a given industry, since a utility company should hedge more than a hypergrowth SaaS firm
  • Live transcript ingestion via earnings call audio streams, not just post-hoc text β€” true real-time signal generation during the call
  • Fine-tuned embeddings trained specifically on earnings call transcripts and subsequent price outcomes, replacing the general-purpose MiniLM model
  • Options flow integration β€” overlay unusual options activity as a second-opinion signal against the NLP score

Built With

Share this project:

Updates