Professional Stock Analysis
Technical analysis, fundamentals, chart patterns, market news, and trade setups with targets & stop-losses for short-term and mid-term horizons.
AAPL — Apple
NVDA — NVIDIA
TSLA — Tesla
MSFT — Microsoft
Starting analysis…
Trade Setup — Entry, Targets & Stop Loss
Risk Assessment
LowMediumHighVery High
Price Chart — Candlestick + Moving Averages + Bollinger Bands
SMA 20
SMA 50
SMA 200
BB Bands
RSI (14)
MACD (12,26,9)
Analysis Breakdown
Technical Signals
Chart Patterns
Fundamental Signals
Market News
Social Sentiment — StockTwits & Reddit WSB
Fundamental Metrics
Support & Resistance Levels
Initializing…
Ready to screen
Pick a universe and click Scan Now — results stream in as each stock is analyzed.
Current Limitations & Improvement Roadmap
This tool uses yfinance for market data, rule-based technical pattern detection, FinBERT neural sentiment on news headlines, and a weighted scoring model (TA 50% · FA 35% · News 15%). Below are the known gaps in each layer and the prioritized improvements planned.
⚠ Current Limitations
Data Source
Partially Fixed
yfinance is an unofficial API — market hours now shown
fast_info.last_price is used for near-real-time price. A live market status badge (Open / Pre-Market / After Hours / Closed) now appears next to the price. True tick-level data still requires a paid API (Polygon.io, Alpaca, etc.).
Screener
Fixed ✓
Dynamic screener universe (now live)
Screener now queries Yahoo Finance predefined and custom screener APIs to discover stocks dynamically. Falls back to the 70-ticker curated list if the live API is unavailable.
Sentiment
Fixed ✓
Social sentiment now live (Reddit + News Volume)
Reddit (WSB, r/stocks, r/StockMarket, r/investing, r/pennystocks) is now searched for ticker mentions. StockTwits shut down its public API in 2024 and requires OAuth — it cannot be used without an API key. Twitter/X API is paid-only.
Technical
Fixed ✓
Intraday charts now available (15m / 1H / 1D / 1Y / 1W)
The price chart now has a timeframe toggle. Selecting 15m or 1H fetches intraday OHLCV from yfinance and redraws the chart. RSI and MACD charts remain on daily data.
Technical
Fixed ✓
Candlestick patterns + divergence (now live)
Hammer, Doji, Shooting Star, Bullish/Bearish Engulfing, Morning/Evening Star now detected. RSI and MACD price divergence — both bullish and bearish — also detected over the last 30 bars and fed into the technical score.
Fundamental
Fixed ✓
Adaptive weighting for penny stocks (now live)
When fewer than 2 FA signals are scoreable (typical micro-cap), the composite switches to TA 60% / News 25% / Social 15% — removing FA from the formula entirely rather than zeroing it out. A yellow notice appears in the Fundamentals section when this applies.
Sentiment
Fixed ✓
Expanded to 15 + Google News (now live)
Up to 15 Yahoo Finance headlines + up to 8 Google News RSS headlines fetched concurrently (deduplicated). FinBERT does not read article bodies. If
torch/transformers are not installed, it falls back to the 31-keyword lookup.
Screener
Fixed ✓
Screener formula aligned with full analyzer
Composite weights now match
risk_analyzer.py exactly (TA 45% / FA 30% / News 15%). A critical 3-value unpack bug (which would have crashed all screener runs) was also fixed. Adaptive FA weighting now applies in the screener too.
Architecture
Fixed ✓
Per-future timeouts added to concurrent fetches
Google News (8 s), Reddit (12 s), IV (10 s), and Quarterly trend (10 s) each have independent timeouts via
future.result(timeout=N). A stalled call no longer blocks the entire analysis — it returns its default and the rest proceeds.
Chart
Fixed ✓
RSI & MACD now sync on timeframe toggle
The
/chart/ endpoint now computes and returns RSI(14) and MACD(12,26,9) for every timeframe. Switching to 15m or 1H redraws RSI and MACD with intraday values via Chart.update('none') — no full chart rebuild needed.
Sentiment
Fixed ✓
Reddit now searches by relevance + 1-week window
Changed from
sort=hot to sort=relevance&t=week. Results are now filtered to the last 7 days and ranked by how closely the post matches the ticker — recent sentiment takes precedence over old viral posts.
Fundamental
Fixed ✓
Sector P/E now fetched live from ETFs
Each sector maps to its SPDR ETF (XLK, XLV, XLF, etc.). Live trailing P/E is fetched via
yfinance and cached for 24 hours. Falls back to the hardcoded table only if the ETF fetch fails.
Trade Setup
Fixed ✓
Days-to-target now adapt to volatility
Days are calculated as actual target distance ÷ expected daily move (≈ 50% of ATR). A high-vol penny stock with a nearby T1 may show 1–2 days; a slow large-cap with a distant target may show 10+ days. Capped at 21d / 90d for short / mid term.
UI / Scores
Fixed ✓
Score cards now distinguish "no data" from neutral 0
When FA data is absent (typical penny stock), the Fundamental card shows — with a "· no data" sub-label and a dimmed bar. When all non-TA scores are absent, a ⚠ TA-only signal note appears under the Composite score.
Risk
Low Impact
Beta benchmarked against SPY only
All stocks are measured against the S&P 500. A healthcare penny stock should be compared to XLV; a clean energy stock to ICLN. Sector-appropriate benchmarks would produce more meaningful beta values.
Screener
Low Impact
Scan results have no timestamp
The scanner doesn't show when each ticker was last analyzed. A scan over 80 tickers can take 3–5 minutes; results at the top may be stale by the time the scan completes. No indication of per-row data freshness.
Architecture
Low Impact
5-minute in-memory cache (now live)
Repeated queries for the same ticker within 5 minutes return cached results instantly. A ⚡ badge shows the cache age and a Refresh link bypasses it. No database persistence — score history, alerts, and portfolio tracking still require a DB layer.
Architecture
Low Impact
No backtesting — scoring thresholds unvalidated
Score weights and verdict thresholds (±20 = neutral, ±40 = strong) were set heuristically. There is no historical simulation to validate whether a composite score ≥ 40 correlates with positive forward returns.
High Impact — meaningfully affects signal quality
Medium Impact — noticeable gaps in coverage
Low Impact — edge cases or performance only
🚀 Next Steps to Improve
✓ Done
Sentiment
Shipped
Reddit social sentiment — live
Reddit (WSB, r/stocks, r/StockMarket, r/investing, r/pennystocks) searched for ticker mentions. Results shown in a dedicated Social Sentiment section with bullish/bearish bar and recent posts. Social score added as 4th score component (10% composite weight). StockTwits API deprecated — requires OAuth since 2024.
✓ Done
Screener
Shipped
Dynamic screener universe — live
Screener now hits Yahoo Finance predefined screeners (most_actives, small_cap_gainers, day_gainers, undervalued_small_caps) and a custom POST screener before each scan. Universe automatically expands with new listings. Falls back to curated 70-ticker list if APIs are unavailable.
✓ Done
Technical
Shipped
Intraday charts (15m / 1H / 1D / 1Y / 1W) — live
Timeframe toggle added above the price chart. Clicking 15m or 1H fetches intraday OHLCV via a new
/chart/{ticker} endpoint and redraws the candlestick chart with SMA20, SMA50, and Bollinger Bands for that timeframe.
✓ Done
Technical
Shipped
Candlestick patterns + RSI/MACD divergence — live
Added Doji, Hammer, Shooting Star, Bullish/Bearish Engulfing, Morning Star, Evening Star. Added RSI Bullish/Bearish Divergence and MACD Bullish/Bearish Divergence detection across last 30 bars. All patterns appear in the Chart Patterns section automatically.
✓ Done
Architecture
Shipped
5-minute in-memory response cache — live
Analyze results are cached in-process for 300 seconds. Repeated requests for the same ticker are served in <50ms. A cache badge appears in the price header with age and a one-click Refresh link. Force-refresh via
?refresh=true.
✓ Done
Risk
Shipped
Implied volatility from ATM options — live
Fetches the two nearest-expiry ATM call and put chains concurrently. Displays Implied Vol % and IV/HV Ratio in the Risk Assessment section. Green = options pricing less vol than history (calm), Red = options pricing more (event risk ahead).
✓ Done
Fundamental
Shipped
Quarterly revenue + EPS trend — live
Fetches
quarterly_financials and quarterly_earnings via yfinance. Displays last 4 quarters of revenue QoQ % with accelerating/decelerating label, and EPS actual vs estimate with beat/miss markers and beat rate % — shown above the Fundamental Metrics grid.
P3
Validation
High effort
Backtesting engine to validate score thresholds
Replay historical scores against forward 30/60-day returns for tickers in the universe. Plot score buckets vs. median return. Use results to calibrate the TA/FA/News weights and verdict thresholds from data rather than heuristics.
Converts scoring from opinion-based to evidence-based. Essential before using signals for real capital allocation.
P3
UX
Medium effort
Price alerts & watchlist persistence
Store a watchlist in
localStorage (or a lightweight SQLite backend). Allow users to set target and stop-loss alert prices. Poll prices on an interval and surface a browser notification when a level is hit.Closes the loop between analysis and action — currently the tool has no memory of past analyses.
P1Highest priority — biggest signal quality gain
P2Medium priority — meaningful improvements
P3Nice to have — polish and validation