Methodology

How the gauges are calculated.

Two formulas, both transparent. Every input is published below — including the bits that are still proxies, and exactly which fields use them.

Why two gauges

Most "energy sentiment" readings collapse the entire sector into one number. That number is dominated by the supermajors (XOM and CVX alone are ~40% of XLE), so it tracks integrated-major sentiment with E&P noise on top — and tells you very little about either separately.

This site separates the two: integrated majors with refining and dividend yield (defensive cash flow) on one side, pure-play E&P and oilfield services (commodity beta) on the other. They move together when oil is calm. They diverge sharply during real regime changes — which is when sentiment data actually matters.

Energy Majors gauge

15 integrated oil companies plus US refiners. Tickers in the basket: XOM, CVX, COP, SHEL, BP, TTE, EQNR, E, OXY, WDS, SU, CNQ, MPC, VLO, PSX. The score is a weighted blend of three components on a 0–100 scale.

Component 1 — Momentum (50% weight)

Average percentage above the 125-day moving average across the basket. Mapped to 0–100 with a ±25 percentage-point band: −25pp below MA scores 0, at MA scores 50, +25pp above MA scores 100. The wider band (vs healthcare's ±15pp) reflects energy's commodity-driven cycles, where the basket can swing further from its MA than non-cyclical sectors.

Component 2 — Valuation (25% weight)

Trimmed median price-to-earnings ratio across the basket. Top and bottom outliers are dropped (top/bottom 2 for the 15-name basket), and any P/E outside 5–60 is excluded as bad data. This protects against companies with one-time earnings distortions.

Mapping for energy is calibrated to the cyclical reality: integrated majors typically trade 8–16x. We map 8x → 0, 16x → 100. Note the inversion versus normal P/E intuition: in energy, low P/E often signals fear (market expects earnings collapse from oil weakness), while elevated P/E signals confidence (recovery priced in). This is opposite from how P/E reads in non-cyclical sectors.

P/E data is sourced from Finnhub's peNormalizedAnnual field, which strips one-time charges. If unavailable, falls back to TTM P/E.

Component 3 — Insider Activity (25% weight)

Number of basket tickers with at least one Form 4 filing in the last 30 days, sourced from SEC EDGAR. Mapping: 0 active tickers = 0, 8+ active = 100 (out of 15 majors). This is a sentiment proxy — when insiders are engaged (filing forms at all), it correlates with a more active news cycle and inflection points.

Limitation acknowledged: v1 counts engagement, not direction. Form 4 filings include both buys (transaction code P) and sells (S), which carry different signals. v2 will distinguish them by parsing the underlying XML and weighting purchases positively, sales near-neutrally (since they're often automated 10b5-1 plans).

E&P + Services gauge

23 names — 10 large independent E&P (EOG, FANG, APA, DVN, OVV, CTRA, EQT, AR, RRC, EXE) and 13 small/mid + services (CHRD, MUR, MTDR, PR, SM, MGY plus oilfield services SLB, HAL, BKR, WFRD, NOV, FTI, PTEN). CIVI was removed when SM Energy completed its acquisition in January 2026. The score blends four components.

Component 1 — Relative Strength vs Sector (40% weight)

XOP 90-day return minus XLE 90-day return. XOP is the equal-weighted E&P pure-play ETF; XLE is the integrated-heavy sector ETF. When XOP outperforms XLE, the high-beta pure-plays are leading — a "risk-on" energy market. Mapped with a ±20pp band onto 0–100.

Component 2 — Distance from 52-Week High (35% weight)

Average percentage off the 252-day high across the small/mid E&P + services basket. Names trading near their highs score near 100; names down 50%+ score near 0. This captures both the pain trade (deep drawdowns = fear) and the breakout regime (new highs = greed).

Component 3 — Breadth (15% weight)

Percentage of basket names trading above their own 50-day moving average. Pure breadth measure — when 80%+ of E&P names are above their 50d MA, the rally has participation; when only 30% are, the index might be holding up on a few large caps.

Component 4 — Oil Price Momentum (10% weight)

WTI front-month futures (CL=F) percentage above its own 125-day moving average, mapped onto 0–100 with the same ±15pp band as the majors momentum component. This is a direct anchor — E&P P&Ls are levered to the oil price, so the price itself deserves a small weight independent of how the equities have moved.

What's not a proxy here: all four components are computable from price history alone (no Finnhub, no EDGAR). That means the historical backfill of this gauge is fully formula-aligned with the live formula — no calibration tricks, no constant-held proxies. The chart line is the same calculation every day.

Clean Energy watch strip

A 6-name basket — NEE, ENPH, FSLR, RUN, BE, PLUG — measured as 30-day average return minus XLE's 30-day return. Status thresholds:

This is a relative read, not a sentiment gauge in its own right. Clean energy moves on rates and policy (long-duration assets, IRA tax credits, residential solar dynamics) far more than on oil. The watch strip surfaces whether the rotation is currently into or out of the energy-transition trade.

Commodity pulse

Three front-month futures from Yahoo Finance: WTI Crude (CL=F), Brent Crude (BZ=F), Henry Hub Natural Gas (NG=F). Spot price + 30-day change. These are independent of equity sentiment — the prices themselves move on physical supply/demand and macro flows, not on how XOM or FANG are trading.

This is the morning glance every energy investor takes anyway. It's on the homepage so the bifurcation context is grounded in actual commodity prices, not just inferred from equity moves.

M&A pulse

Counts 8-K filings under SEC Item 1.01 (Material Definitive Agreement) and Item 2.01 (Completion of Acquisition) from the 15 major-basket tickers in the last 90 days. Sourced directly from SEC EDGAR's submissions API (free, no auth, requires a User-Agent header).

The post-2024 wave of energy consolidation — XOM-Pioneer, CVX-Hess, COP-Marathon, FANG-Endeavor — was the dominant story for 18 months. Tracking new 8-Ks in real time tells you whether that wave is rolling forward or has crested.

v1 limitation: we count filings and link to EDGAR, but don't yet parse the 8-K body for deal value, target name, or premium. That's the v1.4 backlog item. Until shipped, the homepage shows deal counts honestly without fabricating premiums.

Catalyst calendar

Two sources, mixed:

Macro context (from macroread.com)

The homepage shows three macro indicators sourced from macroread.com — a sister property that tracks 10 macro economic signals daily. Three of those signals are directly relevant to energy and aren't derivable from Yahoo prices alone:

The integration is browser-side via macroread.com's published consumer feed (/assets/macroread-feed.js). Each visitor's browser fetches once per page-view (with a 1-hour localStorage cache) directly from https://macroread.com/api/external.php. CORS is allowlisted on macroread's side for energy.feargreedchart.com. If macroread is unreachable, the cards display "—" placeholders and the rest of the energy site continues to render normally — no hard dependency, and no impact on the cron pipeline.

Historical backfill

The trend chart shows ~90 days of recomputed history. Each historical day is calculated using the same formula as the live gauge — not a calibration curve, not an interpolation.

  • E&P historical: fully formula-aligned. All four components (RS, distance, breadth, oil momentum) are computable from price history. No proxies.
  • Majors historical: momentum is recomputed; valuation and insider use today's values as proxies. Finnhub doesn't expose historical P/E on the free tier, and querying SEC EDGAR for 90 days × 15 tickers daily is impractical. The proxy approach means the historical majors line is dominated by the recomputed momentum component (which is what the 50% weight is doing anyway).

The handoff from backfill (yesterday) to live (today) should be smooth — small day-to-day movement only, no jumps or visible boundary. If you see one, the system is broken.

Update cadence

Daily after US market close. The cron job (a) fetches Yahoo price histories for 53 symbols including 3 commodity futures, (b) queries SEC EDGAR for Form 4 and 8-K activity, (c) hits Finnhub for P/E ratios across the majors basket, (d) computes both gauges, (e) writes cache/snapshot.json and appends a deduped line to cache/history.jsonl.

The history append is idempotent — if today's entry already exists from a prior run, it's replaced rather than duplicated.

What this cannot tell you

  • Where oil is going next week.
  • Whether to buy XOM or short FANG.
  • What OPEC+ will decide at their next ministerial.
  • Whether the consolidation wave is finished or just paused.

What it tells you is what the market has already done — how the two halves of the energy sector are positioned coming into today, and whether they agree or disagree about what's coming. That's a useful read, but it's a backward-looking one.

This site is a market sentiment tracker built from public data. It is not investment advice, not a research report, and not a recommendation.