12 KiB
Stock Analysis - Future Enhancements
Roadmap Overview
v4.0.0 (Current) - Geopolitical Risk & News Sentiment
✅ 8 analysis dimensions with Fear/Greed, short interest, VIX structure, put/call ratio ✅ Safe-haven indicators (GLD, TLT, UUP) with risk-off detection ✅ Breaking news alerts via Google News RSS ✅ Geopolitical risk mapping (Taiwan, China, Russia, Middle East, Banking) ✅ Sector-specific crisis flagging with confidence penalties ✅ 1h caching for shared indicators (Fear/Greed, VIX structure, breaking news) ✅ Async parallel sentiment fetching (5 indicators with 10s timeouts)
v5.0.0 (Current) - Portfolio & Crypto
✅ Portfolio management (create, add, remove, show assets) ✅ Cryptocurrency support (Top 20 by market cap) ✅ Portfolio analysis with --portfolio flag ✅ Periodic returns (--period daily/weekly/monthly/quarterly/yearly) ✅ Concentration warnings (>30% single asset) ✅ Crypto fundamentals (market cap, category, BTC correlation)
v4.1.0 - Performance & Completeness
✅ Full insider trading parsing via edgartools (Task #1) ✅ Market context caching with 1h TTL (Task #3b) 🔧 SEC EDGAR rate limit monitoring (Task #4 - low priority)
Future (v6.0+)
💡 Research phase: Social sentiment, fund flows, on-chain metrics
Sentiment Analysis Improvements
1. Implement Full Insider Trading Parsing
Status: ✅ DONE Priority: Medium Effort: 2-3 hours
Current State:
- ✅
get_insider_activity()fetches Form 4 filings via edgartools - ✅ SEC identity configured (
stock-analysis@clawd.bot) - ✅ Aggregates buys/sells over 90-day window
- ✅ Scoring logic: strong buying (+0.8), moderate (+0.4), neutral (0), moderate selling (-0.4), strong (-0.8)
Tasks:
- Research edgartools API for Form 4 parsing
- Implement transaction aggregation (90-day window)
- Calculate net shares bought/sold
- Calculate net value in millions USD
- Apply scoring logic:
- Strong buying (>100K shares or >$1M): +0.8
- Moderate buying (>10K shares or >$0.1M): +0.4
- Neutral: 0
- Moderate selling: -0.4
- Strong selling: -0.8
- Add error handling for missing/incomplete filings
- Test with multiple tickers (BAC, TSLA, AAPL)
- Verify SEC rate limit compliance (10 req/s)
Expected Impact:
- Insider activity detection for 4th sentiment indicator
- Increase from 3/5 to 4/5 indicators typically available
2. Add Parallel Async Fetching
Status: ✅ DONE (sentiment indicators) Priority: High Effort: 4-6 hours
Current State:
- ✅ Sentiment indicators fetched in parallel via
asyncio.gather() - ✅ 10s timeout per indicator
- Main data fetches (yfinance) still sequential (acceptable)
Tasks:
- Convert sentiment helper functions to async
async def get_fear_greed_index()async def get_short_interest(data)async def get_vix_term_structure()async def get_insider_activity(ticker)async def get_put_call_ratio(data)
- Update
analyze_sentiment()to useasyncio.gather() - Handle yfinance thread safety (may need locks)
- Add timeout per indicator (10s max)
- Test with multiple stocks in sequence
- Measure actual runtime improvement
- Update SKILL.md with new runtime (target: 3-4s)
Expected Impact:
- Reduce runtime from 6-10s to 3-4s per stock
- Better user experience for multi-stock analysis
3. Add Caching for Shared Indicators
Status: ✅ DONE (sentiment + breaking news) Priority: Medium Effort: 2-3 hours
Current State:
- ✅ Fear & Greed Index cached (1h TTL)
- ✅ VIX term structure cached (1h TTL)
- ✅ Breaking news cached (1h TTL)
- ✅ Market context (VIX/SPY/QQQ/GLD/TLT/UUP) cached (1h TTL)
Tasks:
- Design cache structure (simple dict or functools.lru_cache)
- Implement TTL (time-to-live):
- Fear & Greed: 1 hour
- VIX structure: 1 hour
- Short interest: No cache (per-stock)
- Insider activity: No cache (per-stock)
- Put/Call ratio: No cache (per-stock)
- Add cache invalidation logic
- Add verbose logging for cache hits/misses
- Test multi-stock analysis (e.g.,
BAC TSLA AAPL) - Measure performance improvement
- Document caching behavior in SKILL.md
Expected Impact:
- Multi-stock analysis faster (e.g., 3 stocks: 18-30s → 10-15s)
- Reduced API calls to Fear/Greed and VIX data sources
- Same-session analysis efficiency
4. Monitor SEC EDGAR Rate Limits
Status: Not Started Priority: Low (until insider trading implemented) Effort: 1-2 hours
Current State:
- SEC EDGAR API has 10 requests/second rate limit
- No rate limit tracking or logging
- edgartools may handle rate limiting internally
Tasks:
- Research edgartools rate limit handling
- Add request counter/tracker if needed
- Implement exponential backoff on 429 errors
- Add logging for rate limit hits
- Test with high-volume scenarios (10+ stocks in quick succession)
- Document rate limit behavior
- Add error message if rate limited: "SEC API rate limited, try again in 1 minute"
Expected Impact:
- Robust handling of SEC API limits in production
- Clear user feedback if limits hit
- Prevent API blocking/banning
Stock Analysis 4.0: Geopolitical Risk & News Sentiment
What's Currently Missing
The current implementation captures:
- ✅ VIX (general market fear)
- ✅ SPY/QQQ trends (market direction)
- ✅ Sector performance
What we don't have yet:
- ❌ Geopolitical risk indicators
- ❌ News sentiment analysis
- ❌ Sector-specific crisis flags
7. Geopolitical Risk Index
Status: ✅ DONE (keyword-based) Priority: High Effort: 8-12 hours
Proposed Approach: Option A: Use GPRD (Geopolitical Risk Daily Index) from policyuncertainty.com Option B: Scan news APIs (NewsAPI, GDELT) for geopolitical keywords
Tasks:
- Research free geopolitical risk data sources
- Check policyuncertainty.com API availability
- Evaluate NewsAPI free tier limits
- Consider GDELT Project (free, comprehensive)
- Design risk scoring system (0-100 scale)
- Implement data fetching with caching (4-hour TTL)
- Map risk levels to sentiment scores:
- Low risk (0-30): +0.2 (bullish)
- Moderate risk (30-60): 0 (neutral)
- High risk (60-80): -0.3 (caution)
- Extreme risk (80-100): -0.5 (bearish)
- Add to sentiment analysis as 6th indicator
- Test with historical crisis periods
- Update SKILL.md with geopolitical indicator
Expected Impact:
- Early warning for market-wide risk events
- Better context for earnings-season volatility
- Complement to VIX (VIX is reactive, geopolitical is predictive)
Example Output:
⚠️ GEOPOLITICAL RISK: HIGH (72/100)
Context: Elevated Taiwan tensions detected
Market Impact: Risk-off sentiment likely
8. Sector-Specific Crisis Mapping
Status: ✅ DONE Priority: High Effort: 6-8 hours
Current Gap:
- No mapping between geopolitical events and affected sectors
- No automatic flagging of at-risk holdings
Proposed Risk Mapping:
| Geopolitical Event | Affected Sectors | Example Tickers |
|---|---|---|
| Taiwan conflict | Semiconductors | NVDA, AMD, TSM, INTC |
| Russia-Ukraine | Energy, Agriculture | XLE, MOS, CF, NTR |
| Middle East escalation | Oil, Defense | XOM, CVX, LMT, RTX |
| China tensions | Tech supply chain, Retail | AAPL, QCOM, NKE, SBUX |
| Banking crisis | Financials | JPM, BAC, WFC, C |
Tasks:
- Build event → sector → ticker mapping database
- Implement keyword detection in news feeds:
- "Taiwan" + "military" → Semiconductors ⚠️
- "Russia" + "sanctions" → Energy ⚠️
- "Iran" + "attack" → Oil, Defense ⚠️
- "China" + "tariffs" → Tech, Consumer ⚠️
- Add sector exposure check to analysis
- Generate automatic warnings in output
- Apply confidence penalty for high-risk sectors
- Test with historical crisis events
- Document in SKILL.md
Expected Impact:
- Automatic detection of sector-specific risks
- Clear warnings for exposed holdings
- Reduced false positives (only flag relevant sectors)
Example Output:
⚠️ SECTOR RISK ALERT: Semiconductors
Event: Taiwan military exercises (elevated tensions)
Impact: NVDA HIGH RISK - supply chain exposure
Recommendation: HOLD → downgraded from BUY
9. Breaking News Check
Status: ✅ DONE Priority: Medium Effort: 4-6 hours
Current Gap:
- No real-time news scanning before analysis
- User might get stale recommendation during breaking events
Proposed Solution:
- Scan Google News or Reuters RSS before analysis
- Flag high-impact keywords within last 24 hours
Tasks:
- Choose news source (Google News RSS, Reuters API, or NewsAPI)
- Implement news fetching with 24-hour lookback
- Define crisis keywords:
- War/Conflict: "war", "invasion", "military strike", "attack"
- Economic: "recession", "crisis", "collapse", "default"
- Regulatory: "sanctions", "embargo", "ban", "investigation"
- Natural disaster: "earthquake", "hurricane", "pandemic"
- Add ticker-specific news check (company name + keywords)
- Generate automatic caveat in output
- Cache news check results (1 hour TTL)
- Add
--skip-newsflag for offline mode - Test with historical crisis dates
- Document in SKILL.md
Expected Impact:
- Real-time awareness of breaking events
- Automatic caveats during high volatility
- User protection from stale recommendations
Example Output:
⚠️ BREAKING NEWS ALERT (last 6 hours):
"Fed announces emergency rate hike"
Impact: Market-wide volatility expected
Caveat: Analysis may be outdated - rerun in 24h
10. Safe-Haven Indicators
Status: ✅ DONE Priority: Medium Effort: 3-4 hours
Current Gap:
- No detection of "risk-off" market regime
- VIX alone is insufficient (measures implied volatility, not capital flows)
Proposed Indicators:
- Gold (GLD) - Flight to safety
- US Treasuries (TLT) - Bond market fear
- USD Index (UUP) - Dollar strength during crisis
Risk-Off Detection Logic:
IF GLD +2% AND TLT +1% AND UUP +1% (all rising together)
THEN Market Regime = RISK-OFF
Tasks:
- Fetch GLD, TLT, UUP price data (5-day change)
- Implement risk-off detection algorithm
- Add to market context analysis
- Apply broad risk penalty:
- Risk-off detected → Reduce all BUY confidence by 30%
- Add caveat: "Market in risk-off mode - defensive positioning recommended"
- Test with historical crisis periods (2008, 2020, 2022)
- Add verbose output for safe-haven movements
- Document in SKILL.md
Expected Impact:
- Detect market-wide flight to safety
- Automatic risk reduction during panics
- Complement geopolitical risk scoring
Example Output:
🛡️ SAFE-HAVEN ALERT: Risk-off mode detected
- Gold (GLD): +3.2% (5d)
- Treasuries (TLT): +2.1% (5d)
- USD Index: +1.8% (5d)
Recommendation: Reduce equity exposure, favor defensives
General Improvements
11. Add Social Sentiment (Future Phase)
Status: Deferred Priority: Low Effort: 8-12 hours
Notes:
- Requires free API (Twitter/Reddit alternatives?)
- Most sentiment APIs are paid (StockTwits, etc.)
- Research needed for viable free sources
12. Add Fund Flows (Future Phase)
Status: Deferred Priority: Low Effort: 6-8 hours
Notes:
- Requires ETF flow data
- May need paid data source
- Research free alternatives
Implementation Priorities
v4.1.0 Complete
- ✅ Task #1 - Insider trading parsing via edgartools
- ✅ Task #3b - Market context caching (1h TTL)
- 🔧 Task #4 - SEC EDGAR rate limits (low priority, only if hitting limits)
Completed in v4.0.0
- ✅ Task #2 - Async parallel fetching (sentiment)
- ✅ Task #3 - Caching for shared indicators (sentiment + news)
- ✅ Task #7 - Geopolitical risk (keyword-based)
- ✅ Task #8 - Sector-specific crisis mapping
- ✅ Task #9 - Breaking news check
- ✅ Task #10 - Safe-haven indicators
Version History
- v5.0.0 (2026-01-16): Portfolio management, cryptocurrency support (Top 20), periodic analysis
- v4.1.0 (2026-01-16): Full insider trading parsing via edgartools, market context caching
- v4.0.0 (2026-01-15): Geopolitical risk, breaking news, safe-haven detection, sector crisis mapping
- v3.0.0 (2026-01-15): Sentiment analysis added with 5 indicators (3-4 typically working)
- v2.0.0: Market context, sector performance, earnings timing, momentum
- v1.0.0: Initial release with earnings, fundamentals, analysts, historical