Stock Analysis
About This Skill
Analyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management, watchlists with alerts, dividend analysis, 8-dimension stock scoring, viral trend detection (Hot Scanner),…
Use Cases
Documentation (Original)
Source: README.md📈 Stock Analysis v6.1
AI-powered stock & crypto analysis with portfolio management, watchlists, dividend analysis, and viral trend detection.
What's New in v6.1
- 🔥 Hot Scanner — Find viral stocks & crypto across multiple sources
- 🐦 Twitter/X Integration — Social sentiment via bird CLI
- 📰 Multi-Source Aggregation — CoinGecko, Google News, Yahoo Finance
- ⏰ Cron Support — Daily trend reports
What's New in v6.0
- 🆕 Watchlist + Alerts — Price targets, stop losses, signal change notifications
- 🆕 Dividend Analysis — Yield, payout ratio, growth rate, safety score
- 🆕 Fast Mode — Skip slow analyses for quick checks
- 🆕 Improved Commands — Better OpenClaw/Telegram integration
- 🆕 Test Suite — Unit tests for core functionality
Features
| Feature | Description |
|---|---|
| 8-Dimension Analysis | Earnings, fundamentals, analysts, momentum, sentiment, sector, market, history |
| Crypto Support | Top 20 cryptos with market cap, BTC correlation, momentum |
| Portfolio Management | Track holdings, P&L, concentration warnings |
| Watchlist + Alerts | Price targets, stop losses, signal changes |
| Dividend Analysis | Yield, payout, growth, safety score |
| Risk Detection | Geopolitical, earnings timing, overbought, risk-off |
| Breaking News | Crisis keyword scanning (last 24h) |
Quick Start
Analyze Stocks
uv run scripts/analyze_stock.py AAPL
uv run scripts/analyze_stock.py AAPL MSFT GOOGL
uv run scripts/analyze_stock.py AAPL --fast # Skip slow analyses
Analyze Crypto
uv run scripts/analyze_stock.py BTC-USD
uv run scripts/analyze_stock.py ETH-USD SOL-USD
Dividend Analysis
uv run scripts/dividends.py JNJ PG KO
Watchlist
uv run scripts/watchlist.py add AAPL --target 200 --stop 150
uv run scripts/watchlist.py list
uv run scripts/watchlist.py check --notify
Portfolio
uv run scripts/portfolio.py create "My Portfolio"
uv run scripts/portfolio.py add AAPL --quantity 100 --cost 150
uv run scripts/portfolio.py show
🔥 Hot Scanner (NEW)
# Full scan with all sources
python3 scripts/hot_scanner.py
# Fast scan (skip social media)
python3 scripts/hot_scanner.py --no-social
# JSON output for automation
python3 scripts/hot_scanner.py --json
Analysis Dimensions
Stocks (8 dimensions)
- Earnings Surprise (30%) — EPS beat/miss
- Fundamentals (20%) — P/E, margins, growth, debt
- Analyst Sentiment (20%) — Ratings, price targets
- Historical Patterns (10%) — Past earnings reactions
- Market Context (10%) — VIX, SPY/QQQ trends
- Sector Performance (15%) — Relative strength
- Momentum (15%) — RSI, 52-week range
- Sentiment (10%) — Fear/Greed, shorts, insiders
Crypto (3 dimensions)
- Market Cap & Category
- BTC Correlation (30-day)
- Momentum (RSI, range)
Dividend Metrics
| Metric | Description |
|---|---|
| Yield | Annual dividend / price |
| Payout Ratio | Dividend / EPS |
| 5Y Growth | CAGR of dividend |
| Consecutive Years | Years of increases |
| Safety Score | 0-100 composite |
| Income Rating | Excellent → Poor |
🔥 Hot Scanner
Find what's trending RIGHT NOW across stocks & crypto.
Data Sources
| Source | What it finds |
|---|---|
| CoinGecko Trending | Top 15 trending coins |
| CoinGecko Movers | Biggest gainers/losers (>3%) |
| Google News | Breaking finance & crypto news |
| Yahoo Finance | Top gainers, losers, most active |
| Twitter/X | Social sentiment (requires auth) |
Output
📊 TOP TRENDING (by buzz):
1. BTC (6 pts) [CoinGecko, Google News] 📉 bearish (-2.5%)
2. ETH (5 pts) [CoinGecko, Twitter] 📉 bearish (-7.2%)
3. NVDA (3 pts) [Google News, Yahoo] 📰 Earnings beat...
🪙 CRYPTO HIGHLIGHTS:
🚀 RIVER River +14.0%
📉 BTC Bitcoin -2.5%
📈 STOCK MOVERS:
🟢 NVDA (gainers)
🔴 TSLA (losers)
📰 BREAKING NEWS:
[BTC, ETH] Crypto crash: $2.5B liquidated...
Twitter/X Setup (Optional)
- Install bird CLI:
npm install -g @steipete/bird - Login to x.com in Safari/Chrome
- Create
.envfile:
AUTH_TOKEN=your_auth_token
CT0=your_ct0_token
Get tokens from browser DevTools → Application → Cookies → x.com
Automation
Set up a daily cron job for morning reports:
# Run at 8 AM daily
0 8 * * * python3 /path/to/hot_scanner.py --no-social >> /var/log/hot_scanner.log
Risk Detection
- ⚠️ Pre-earnings warning (< 14 days)
- ⚠️ Post-earnings spike (> 15% in 5 days)
- ⚠️ Overbought (RSI > 70 + near 52w high)
- ⚠️ Risk-off mode (GLD/TLT/UUP rising)
- ⚠️ Geopolitical keywords (Taiwan, China, etc.)
- ⚠️ Breaking news alerts
Performance Options
| Flag | Speed | Description |
|---|---|---|
| (default) | 5-10s | Full analysis |
--no-insider |
3-5s | Skip SEC EDGAR |
--fast |
2-3s | Skip insider + news |
Data Sources
- Yahoo Finance — Prices, fundamentals, movers
- CoinGecko — Crypto trending, market data
- CNN Fear & Greed — Sentiment
- SEC EDGAR — Insider trading
- Google News RSS — Breaking news
- Twitter/X — Social sentiment (via bird CLI)
Storage
| Data | Location |
|---|---|
| Portfolios | ~/.clawdbot/skills/stock-analysis/portfolios.json |
| Watchlist | ~/.clawdbot/skills/stock-analysis/watchlist.json |
Testing
uv run pytest scripts/test_stock_analysis.py -v
Limitations
- Yahoo Finance may lag 15-20 minutes
- Short interest lags ~2 weeks (FINRA)
- US markets only
Disclaimer
⚠️ NOT FINANCIAL ADVICE. For informational purposes only. Consult a licensed financial advisor before making investment decisions.
Security Audit
Summary
Analyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management, watchlists with alerts, dividend analysis, 8-dimension stock scoring, viral trend detection (Hot Scanner), and rumor/early signal detection. Use for stock analysis, portfolio tracking, earnings reactions, crypto monitoring, trending stocks, or finding rumors before they hit mainstream.
ToxicSkills Analysis
Toxic Flags
No Toxic signals detected by current static checks.
Key Risks 0 items
Deterministic Findings (Evidence)
| Rule | Severity | File | Snippet |
|---|---|---|---|
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 8 | import urllib.request |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 30 | os.environ[key] = value |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 60 | req = urllib.request.Request(url, headers=self.headers) |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 61 | with urllib.request.urlopen(req, timeout=timeout, context=SSL_CONTEXT) as resp: |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 288 | req = urllib.request.Request(url, headers=headers) |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 290 | with urllib.request.urlopen(req, timeout=15, context=SSL_CONTEXT) as resp: |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 328 | req = urllib.request.Request(url, headers=headers) |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 330 | with urllib.request.urlopen(req, timeout=15, context=SSL_CONTEXT) as resp: |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 387 | env = os.environ.copy() |
| PROC_EXEC | high | skills/udiedrichsen/stock-analysis/scripts/hot_scanner.py Line 388 | result = subprocess.run( |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/portfolio.py Line 45 | state_dir = os.environ.get("CLAWDBOT_STATE_DIR", os.path.expanduser("~/.clawdbot")) |
| NET_HTTP_REQUEST | medium | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 21 | from urllib.request import urlopen, Request |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 38 | os.environ[key.strip()] = value.strip().strip('"').strip("'") |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 79 | env = os.environ.copy() |
| PROC_EXEC | high | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 81 | result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env) |
| SENSITIVE_ENV | medium | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 132 | env = os.environ.copy() |
| PROC_EXEC | high | skills/udiedrichsen/stock-analysis/scripts/rumor_scanner.py Line 134 | result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env) |
| PROC_EXEC | high | skills/udiedrichsen/stock-analysis/scripts/watchlist.py Line 246 | result = subprocess.run( |
| QUALITY_README_PRESENT | low | README Line n/a | README detected |
Scoring Criteria
Each skill is scored across 5 dimensions. The weighted total determines the star rating.
Star Rating Scale
Why This Score?
The following dimensions scored below 60, dragging the overall rating down:
- Code Toxicity: 12/100
- Privacy Risk: 0/100