Skip to content
RyFinancePublic

About

Hunts small and niche companies quietly dominating before everyone knows the name. Growth screen, anti-pump gates, 6-pillar score, live dashboard.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

PULSE: find the next one at $500M, not $500B

python universe refresh anti-pump

Pulse hunts small and niche companies that are quietly dominating, before everyone knows the name.
Not "MU has crazy revenue." The point is finding the next one while it's $500M, not $500B.


How it hunts

hunt      Yahoo screen: every US-listed stock over $50M with quarterly revenue +25% (~860 names).
          Each run researches the 40 best pre-ranked (trend, extension, size, improving EPS), plus a
          35-name slice walking the rest alphabetically, so the whole screen gets looked at about once a day.
          Any screen name scoring 62+ is kept in every run until it fades.
heat      names hot in news (Massive, Yahoo), Reddit/X cashtags (scraper.py), small-cap gainers
          → top 50 researched, at most 8 of them megacaps (> $500B) so hype can't crowd out the gems
gate      hard rejects: OTC, < $1, < $1M/day traded, < $10M revenue, shares +30%/yr, reverse split
          (18m), < 4 quarters of cash, pump pattern (+80%/5d on 5x volume with thin fundamentals),
          SEC delisting notice / late filing
score     6 pillars on fixed 0–100 scales → composite − 7 per red flag → BUY / WATCH / AVOID
read      news + social tone (VADER), IWM/SPY/QQQ/VIX backdrop, sector heat, written summary
Pillar Weight What it rewards
Growth 25% revenue growth, latest-quarter YoY, acceleration, gross-margin expansion, forward estimates
Quality 18% margins and their trend, FCF, cash runway, no dilution, low leverage
Estimates 12% net EPS revisions, estimate drift, surprises, beat rate, target upside
Valuation 8% EV/sales per point of growth, forward P/E, PEG
Momentum 17% 3m/6m vs SPY, 1m, off 52w high, above 50/200d
Early 20% smaller cap, few analysts, institutions near 40% (not crowded), not extended, 1y not parabolic

BUY needs 70 (75 over $50B, 80 over $500B — the names everyone already knows have to earn it). No size ceiling: megacaps can be ranked, but the Early pillar scores anything over $500B as zero on size. The dashboard splits everything into cap bands: Small (under $50B, the hunt), Growth & proven ($50B–$500B) and Megacaps ($500B+). Megacaps stay hidden unless they're doing something extraordinary (a BUY: 80+ with no red flags); the Megacaps band shows them all if you want to look. ◆ Diamonds in the rough: under $3B, ≤ 6 analysts, growth pillar ≥ 65, quality ≥ 50, score ≥ 60, no red flags.

Red flags (−7 each, 2+ = AVOID): dilution > 15%, recent offering/shelf (SEC), short float > 25%, +50% in 5d, press-release-heavy news, social hype with no independent coverage, estimate cuts, broken chart, D/E > 3.

News and social volume decide what gets looked at and feed the pump checks. They never add to the score.

New & rising lists names first ranked in the last 7 days (with where they came from) and the biggest 7-day score gains, so fresh finds don't sit under the same leaders.

Track record (bottom, starts collapsed) replays every saved run: for each name that has made the top 10 or top 20, how long it has held the spot, whether it is still there, and the price move since it got in, since it first scored 70/75/80, and since Pulse first ranked it. The full ranking shows its first 12 rows until expanded.

Inside every pick

  • Chart — line chart in the style of Apple Stocks, 1D / 1W / 1M / 3M / 1Y / 3Y / 5Y / 10Y. Hover to scrub; click to pin a date and see the move from there to any point (or to now).
  • Competitors — the 3 closest US-listed peers by size in the same sub-industry (Finnhub peers), scored with the same Pulse model, with a verdict on which is strongest and why.
  • Watchlist — hit ☆ Watch on any stock to file it into a folder. Each one remembers the day, price and rating it was added at, so the watchlist shows what only it can: % since added and rating then → now (with the change), next to price and the day's move. One line per stock, folders collapse, click a row to open it.

What's in the repo

File What it does
ranker.py discover → gate → research → score → rankings.json
server.py dashboard on :8790, re-ranks every 60 min
watchlist.py watchlist folders and since-added stats → watchlist.json (gitignored)
dashboard.html the UI: aero-shards hero with paper-airplane picks, sector filter, Apple-style price chart (1D–10Y, click to pin a date and measure from it), competitor check, watchlist, track record
scraper.py Reddit (rdt-cli) + X (headless Chrome) → raw_data.json, ~13s
save_x_session.py log in to X once; saves x_session.json (gitignored)
valid_tickers.txt listed US tickers used to validate cashtags

Setup: pip install -r requirements.txt, install the rdt CLI (rdt-cli) for Reddit and have Google Chrome installed for X. Run python save_x_session.py once to log in to X.

Run it

python ranker.py      # one pass → rankings.json (re-runs scraper.py if its data is > 50 min old)
python server.py      # dashboard at http://127.0.0.1:8790, re-ranks every 60 min

Always on: com.rytty.pulse.plist → ~/Library/LaunchAgents/, then launchctl load it. Logs: ~/Library/Logs/pulse.log.

Keys in .env (gitignored): MASSIVE_API_KEY, FINNHUB_API_KEY. Optional SEC_USER_AGENT="name email" turns on SEC EDGAR checks (offerings, delisting notices, late filings, insider filings); set it with launchctl setenv so it never lands in a file. Tunables: PULSE_MIN_MCAP, PULSE_MAX_MCAP, PULSE_MIN_DOLLAR_VOL, PULSE_MIN_REVENUE, PULSE_HUNT_CORE, PULSE_HUNT_ROTATE, PULSE_HEAT_DEEP, PULSE_INTERVAL_MIN, PULSE_SCRAPE=0.


Built by @slime2riches · slimecode.tech
A rules-based screen, not a backtested edge and not investment advice.

About

Hunts small and niche companies quietly dominating before everyone knows the name. Growth screen, anti-pump gates, 6-pillar score, live dashboard.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages