Spaces:
Running
Running
Stock Alchemist Orchestrator
Overview
The orchestrator is the central nervous system of Stock Alchemist, coordinating all components to work together seamlessly.
Architecture
Singleton Managers
All major components use thread-safe singleton patterns:
DatabaseManager: Manages all database operations
- Provides unified access to calendar, news, and fundamental adapters
- Thread-safe database connections
NewsScraperManager: Manages continuous news scraping
- Alpaca WebSocket connection for real-time news
- News processing pipeline with sentiment analysis
- Automatic database storage
CalendarScraperManager: Manages daily calendar scraping
- Fetches earnings, IPOs, stock splits, dividends, economic events
- Runs once per day
- Queues relevant tickers for analysis
FundamentalAnalysisManager: Manages on-demand analysis
- Caches recent analyses (30-day validity)
- Processes tickers from queue
- Stores results with timestamps
Thread Communication
The coordinator manages 4 worker threads:
News Scraper Thread (Continuous)
- Receives real-time news from Alpaca
- Filters by sentiment (non-NEUTRAL)
- Triggers fundamental analysis for relevant tickers
- Saves all news to database
Calendar Scraper Thread (Daily)
- Runs once every 24 hours
- Fetches all calendar events for today
- Saves events to database
- Queues tickers for fundamental analysis
Fundamental Analysis Thread (On-Demand)
- Processes tickers from analysis queue
- Checks if analysis needed (>30 days old or missing)
- Performs comprehensive stock analysis
- Saves results with
last_processed_datetime
Data Aggregation Thread (Periodic)
- Runs every 5 minutes
- Generates JSON overview files per ticker
- Combines news, fundamentals, and calendar events
Data Flow
βββββββββββββββββββ
β Alpaca News WS β (Real-time)
ββββββββββ¬βββββββββ
β
v
ββββββββββββββββββββββ ββββββββββββββββββββ
β News Processor βββββ>β News Database β
β (Sentiment Filter) β ββββββββββββββββββββ
ββββββββββ¬ββββββββββββ
β (Non-NEUTRAL sentiment)
v
ββββββββββββββββββββββ
β Analysis Queue β
ββββββββββ¬ββββββββββββ
β
v
ββββββββββββββββββββββ ββββββββββββββββββββ
β Fundamental βββββ>β Analysis DB β
β Analysis Worker β β (with timestamp) β
ββββββββββββββββββββββ ββββββββββββββββββββ
β
v
ββββββββββββββββββββββ
β JSON Aggregator β
β (Per Ticker) β
ββββββββββββββββββββββ
βββββββββββββββββββ
β NASDAQ API β (Daily)
ββββββββββ¬βββββββββ
β
v
ββββββββββββββββββββββ ββββββββββββββββββββ
β Calendar Scraper βββββ>β Calendar DB β
β (Earnings, IPOs, β ββββββββββββββββββββ
β Splits, Divs) β β
ββββββββββ¬ββββββββββββ β
β β
βββββββββββ>Analysis Queue<β
Output Format
Ticker Overview JSON
Location: output/ticker_overviews/{TICKER}.json
{
"ticker": "AAPL",
"generated_at": "2025-11-10T12:00:00",
"news": {
"news_1": {
"headline": "Apple announces new iPhone",
"sentiment": "POSITIVE",
"date": "2025-11-10"
},
"news_2": {
"headline": "Apple stock downgraded",
"sentiment": "NEGATIVE",
"date": "2025-11-09"
}
},
"fundamental_analysis": {
"json_hash_reference": "a1b2c3d4e5f6...",
"date_updated": "2025-11-10T10:00:00",
"result": {
"recommendation": "BUY",
"final_score": 85,
"confidence": "HIGH",
"key_metrics": {...}
}
},
"calendar_events": {
"event_1": {
"type": "earnings",
"date": "2025-11-15",
"data": {
"eps_estimate": "1.50",
"time": "after_close"
},
"importance": "high"
}
}
}
Database Schema
Fundamental Analysis Table
date: ISO date (YYYY-MM-DD)
data_type: "fundamental_analysis"
ticker: Stock symbol
data: {
"analysis_type": "complete",
"last_processed_datetime": "2025-11-10T12:00:00.123456",
"recommendation": "BUY|SELL|HOLD",
"final_score": 0-100,
"confidence": "HIGH|MEDIUM|LOW",
...
}
created_at: ISO timestamp
updated_at: ISO timestamp
expiry_date: ISO date (30 days from creation)
Running the Orchestrator
From Project Root
python main.py
From Orchestrator Directory
cd src/orchestrator
python coordinator.py
Configuration
Timeouts and Intervals
- Calendar Scraping: Every 24 hours
- Analysis Cache: 30 days validity
- News Storage: 30 days TTL
- Economic Events: 7 days TTL
- Aggregation: Every 5 minutes
Queues
- news_queue: Real-time news items
- analysis_queue: Tickers needing fundamental analysis
- calendar_queue: Calendar events for processing
Error Handling
All threads have exception handling:
- Errors logged to console
- Threads continue running
- Failed operations don't crash system
Graceful Shutdown
Press Ctrl+C to initiate graceful shutdown:
- Stops accepting new news
- Finishes current analyses
- Closes database connections
- Terminates all threads
Monitoring
Console output shows:
- β Component initialization
- π° News items received
- π Calendar events fetched
- π Stocks being analyzed
- π Aggregation runs
- β Errors and warnings
Dependencies
threading: Thread managementqueue: Inter-thread communicationdatetime: Timestampsjson: Data serialization- All Stock Alchemist modules
Future Enhancements
- Web Dashboard: Real-time monitoring UI
- Alerting System: Email/SMS for important events
- ML Integration: Sentiment improvement
- Backtesting: Historical performance analysis
- API Server: REST API for external access