The two-gauge thesis, with every formula on the page.
Most sentiment trackers are black boxes. We publish every component, every weight, and every honest limitation. If you're going to look at our numbers, you should know exactly how they're built.
Why two gauges instead of one
Healthcare is not one trade. Pharma giants and biotech are driven by fundamentally different forces, and they routinely move in opposite directions. A single composite "healthcare sentiment" score would average those into noise — exactly the noise that's hiding the signal in this sector.
Pharma giants are stories about patent cliffs, dividend cash flow, and GLP-1 leadership. Mega-cap, defensive, valuation-sensitive. When biotech is rallying off generational lows, pharma can be flat or down on patent-cliff anxiety.
Biotech is a story about clinical pipelines, capital-markets access, and FDA decisions. Smaller-cap, pipeline-driven, often trading near cash value during downturns and tripling on a single Phase 3 readout.
When pharma reads Greed and biotech reads Fear, that divergence is itself the most interesting signal in the sector. Smushing them into one number destroys it.
Pharma Giants gauge
15-name basket: LLY, NVO, JNJ, PFE, MRK, ABBV, BMY, AZN, GSK, NVS, ABT, AMGN, RHHBY, SNY, TAK. Three weighted components.
Momentum (50% weight)
Average percent distance of each name's last close from its 125-day simple moving average. Positive = trading above mid-term trend, negative = trading below. Mapped from −15% to +15% onto a 0–100 score.
mom_score = 50 + (avg_pct_above_125d_sma / 15) × 50, clamped to 0–100.
Valuation (25% weight)
P/E ratio across the basket, drawn from Finnhub. We prefer normalized annual P/E (which strips out one-time charges like IPR&D writedowns and goodwill amortization, both routine in pharma) and fall back to TTM only when normalized isn't available. We then drop values above 60x or below 5x as bad data, take a trimmed median, and map onto a 0–100 score where 12x → 100 and 28x → 0.
val_score = 100 − (trimmed_median_pe − 12) × 5, clamped to 0–100.
The trim is important. ABBV and BMY routinely show TTM P/Es above 50x because of acquisition-related amortization, not because they're expensive. Without trimming, two names would dominate a 15-name basket.
Insider activity (25% weight)
Count of distinct pharma giants with at least one Form 4 filing in the past 30 days, pulled from SEC EDGAR. Not buy-vs-sell yet — production v2 will parse the filing XML for transactionCode P (purchase) vs S (sale). For now, presence of activity reads as engaged management.
Biotech gauge
25-name basket across large biotech (10) and small/mid biotech (15), plus the XBI and IBB ETFs for ratio math. Four weighted components.
Relative strength (40% weight)
90-day return of XBI minus 90-day return of IBB. XBI is equal-weighted (small-cap leaning), IBB is cap-weighted (mega-cap-dominated). When XBI outperforms IBB, it means small/mid biotech is leading — historically a bullish regime change. Mapped from −20pp to +20pp onto 0–100.
Distance from 52-week high (35% weight)
Average percent below the 52-week high across the small/mid biotech basket. A capital-runway pressure proxy: deep drawdowns in this space mean cash crunches and dilutive secondaries. Mapped −50% → 0, 0% → 100.
Breadth (15% weight)
Percent of the combined biotech basket trading above its 50-day moving average. Direct breadth measure.
IPO pulse (10% weight)
Healthcare IPO count in the trailing 30 days, filtered from Finnhub's IPO calendar. We exclude SPACs (ticker suffix "U", names containing "Acquisition Corp") and require either a healthcare-related name keyword or a match to our tracked basket. Mapped 0 → 35, 5 → 80, 8+ → 95.
Managed Care Watch — why a strip, not a third gauge
UNH, ELV, CI, HUM, CNC, CVS. Six-name basket performance vs. XLV over 30 days.
We don't fold this into either gauge because health insurance dynamics — medical-loss ratios, Medicare Advantage rate notices, regulatory exposure — don't move with pharma or biotech catalysts. A patent cliff has no bearing on UnitedHealth's MLR. A Phase 3 readout doesn't shift Humana's MA reimbursement.
Five status labels based on basket excess return vs. XLV:
- Surging — outperforming XLV by more than 10% in 30 days
- Strong — outperforming by 3–10%
- Stable — within 2 points of XLV
- Pressured — trailing XLV by 2–8%
- Stressed — trailing by more than 8%
M&A Pulse
Drawn from SEC 8-K filings. We monitor every pharma giant in the basket as a potential acquirer and grep for Item 1.01 (Entry into a Material Definitive Agreement), which is the exact disclosure trigger for M&A. Three rolling stats: deal count over 90 days, count vs. prior 90-day period, and a feed of the most recent definitive agreements with accession numbers linking back to EDGAR.
Aggregate value, median premium paid, and days-since-megadeal require parsing the 8-K body text — that's an upcoming v1.4 feature. For now those fields show "—" where the deal list works.
FDA Calendar
Curated list of upcoming PDUFA dates and AdCom meetings, focused on the most-watched 20–30 names. The FDA does not publish a clean machine-readable PDUFA calendar — companies disclose dates piecemeal in 10-Q filings or press releases. Paid services aggregate these for $20–40/month.
Our approach: tight curation rather than comprehensive coverage. We focus on dates that move stocks meaningfully, not every minor expansion review. Updates as new dates surface; entries older than a week auto-filter.
Refresh cadence
- Sentiment gauges and managed care strip: daily after US market close
- M&A Pulse: daily from SEC EDGAR
- FDA Calendar: weekly
- Insider activity: daily, 30-day rolling window
Honest limitations
Things we don't claim:
- Predictive power. The gauges describe the current sentiment regime. They are not forecasts. Past patterns are not predictive of future returns.
- Per-stock signal. Basket-level math doesn't tell you anything about an individual ticker. LLY can rally while pharma giants score Fear.
- Comprehensive FDA coverage. We deliberately keep the calendar tight. For full pipeline tracking, BiopharmCatalyst or a paid service is the right tool.
- Real-time data. We use daily closes. Sentiment is a slow-moving signal; intraday accuracy isn't the right benchmark.
- Buy/sell insider classification. Currently we count Form 4 activity as engagement. Production v2 will distinguish purchase from sale by parsing filing XML.
Nothing here is investment advice. The data is for context, not action.