
BullBear
Stock decision dashboard · AI signals
Eight weighted indicators roll up into one explainable Buy/Sell/Hold call with a 0-100% confidence score; a documented optimization pass cut market-data loads from 20+s to ~9s and took AI-recommendation coverage from 0% to 100%.
Pick the next move: Bull (up) or Bear (down).
Opens the live Hugging Face Space.
Open live app ↗︎BullBear, a graduate financial-analytics course project, ingests historical OHLCV plus real-time Yahoo Finance quotes and produces explainable trading recommendations: a StockSignalAnalyzer computes eight independent signals (RSI, MACD, moving averages, Bollinger Bands, volume, momentum, support/resistance, news sentiment), each with an explicit weight, and combines them into a Buy/Sell/Hold call with a 0-100% confidence score and human-readable reasoning for every signal. A Gradio UI sits over a layered core/analysis/visualization architecture that uses the Strategy pattern to swap technical, fundamental and risk views, computing returns, volatility, Sharpe, max drawdown, VaR and correlation heatmaps over a bundled 20-asset portfolio (2013-2017, 24,520 daily rows). A documented optimization pass (batch quote fetching instead of sequential calls, adaptive minimum-data requirements, fallback fetches) cut market-load time from 20+s to ~9s and took AI-recommendation coverage on market movers from 0% to 100%. The recommendation engine is deterministic weighted-indicator logic, not a trained model, and the card says so.
- Python
- Gradio
- Pandas
- NumPy
- Plotly
- yahooquery
- SciPy
- Hugging Face Spaces
- Signal engine
- 8 weighted indicators
- Load time
- 60% faster (20s → 9s)
- Bundled OHLCV
- 24,520 rows · 20 assets
- Code
- 11,362 LOC · 17 modules
What I'd improve
The eight signal weights are hand-set, not learned, and nothing in the project verifies the calls would have made money. The honest next step is a backtest of the signal engine against buy-and-hold over the bundled 2013-2017 portfolio, and only then deciding whether learned weights or an actual model earn their complexity. After that, the project's own open items: result caching and parallel recommendation processing to push market loads under 5 seconds.