scanner-bullish — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited scanner-bullish (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Scans symbols for bullish trends and ranks them by composite score.
Note: Ifuvis not installed orpyproject.tomlis not found, replaceuv run pythonwithpythonin all commands below.
uv run python scripts/scan.py SYMBOLS [--top N] [--period PERIOD]SYMBOLS - Comma-separated ticker symbols (e.g., AAPL,MSFT,GOOGL,NVDA)--top - Number of top results to return (default: 30)--period - Historical period for analysis: 1mo, 3mo, 6mo (default: 3mo)| Indicator | Condition | Points |
|---|---|---|
| SMA20 | Price > SMA20 | +1.0 |
| SMA50 | Price > SMA50 | +1.0 |
| RSI | 50-70 (bullish) | +1.0 |
| 30-50 (neutral) | +0.5 | |
| <30 (oversold) | +0.25 | |
| MACD | MACD > Signal | +1.0 |
| Histogram rising | +0.5 | |
| EMA9/21 | EMA9 > EMA21 (golden cross) | +0.5 |
| EMA9 < EMA21 (death cross) | -0.25 | |
| Dual crossover | Both up, both ≤10 days | +1.0 |
| Both up, any age | +0.5 | |
| Both down, both ≤10 days | -1.0 | |
| Both down, any age | -0.5 | |
| Directions conflict | -0.5 | |
| ADX | >25 with +DI > -DI | +1.5 |
| +DI > -DI only | +0.5 | |
| Momentum | period return / 20 | -1 to +2 |
Returns JSON with:
scan_date - Timestamp of scansymbols_scanned - Total symbols analyzedresults - Array sorted by score (highest first):symbol, score, pricenext_earnings, earnings_timing (BMO/AMC)period_return_pct, pct_from_sma20, pct_from_sma50rsi, macd, macd_signal, macd_hist, adx, dmp, dmnema9, ema21 — current EMA9 and EMA21 valuesema_crossover - Most recent EMA9/EMA21 crossover (or null if none found):direction - "up" (EMA9 crossed above EMA21 = bullish) or "down" (crossed below = bearish)days_ago - Trading days since the crossover bar (0 = happened in the most recent bar)macd_crossover - Most recent MACD crossover (or null if none found):direction - "up" (MACD crossed above signal = bullish) or "down" (crossed below = bearish)days_ago - Trading days since the crossover bar (0 = happened in the most recent bar)signals - List of triggered conditionsdays_ago (0-5): fresh golden cross — short-term momentum confirmednull: EMA9/21 relationship unchanged throughout the perioddirection: "up" with small days_ago (0-5): fresh bullish crossover — early entry signaldirection: "up" from a deeply negative signal: recovery from correctiondirection: "down": momentum has turned bearish regardless of scorenull: no sign change found in the period — trend has been consistently one-directional# Scan a few symbols
uv run python scripts/scan.py AAPL,MSFT,GOOGL,NVDA,TSLA
# Get top 10 from larger list
uv run python scripts/scan.py AAPL,MSFT,GOOGL,NVDA,TSLA,AMD,AMZN,META --top 10
# Use 6-month lookback
uv run python scripts/scan.py AAPL,MSFT,GOOGL --period 6mopandaspandas-tayfinanceAll timestamps and time-based calculations must use the America/New_York timezone. All JSON output must include generated_at (NY time string) and data_delay fields.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.