S&P 500 Sector Dislocation Screener
Summary · September 2026
We need to be more careful with Technology from here. It is about 38% of the S&P 500, the 99th percentile of its own history, and it has beaten the index by 30% over three years. That much concentration leaves little room for disappointment on valuation.
The other end of the market is dislocated and underperforming. Consumer Discretionary, Materials, Consumer Staples, Utilities and Health Care have lagged the S&P 500 by 22–30% over three years (the 1st–5th percentile of their own histories), and as a group they sit near their lowest index weights (12th percentile).
Similar setups were in 2000 and 2021: the two earlier times Tech was this overweight while these sectors were this out of favour. What the same group of sectors did next:
- February 2000: over the next 12 months the group returned +15.8% vs -8.9% for the S&P 500 (+24.6 pp); over 24 months +16.3% vs -17.2% (+33.6 pp). Technology returned -50% in that first year.
- November 2021: over the next 12 months the group returned +1.0% vs -9.2% for the S&P 500 (+10.2 pp); by 24 months the lead had faded (-0.6% vs +3.3%, -3.9 pp). Technology returned -19% in that first year.
Caveat: this setup is not new. It first appeared in October 2023, and since then the group has returned +41% vs +90% for the S&P 500 (-49 pp). A dislocation can last much longer than expected, and two past episodes are a very small sample.
Therefore, it will be interesting to see whether we can find an opportunity within these dislocated sectors. The Stock Screener tab ranks their largest holdings on quality and valuation.
Group = the sectors whose 3-year performance vs. the S&P 500 is at or below their 10th percentile today, equal-weighted, total return. Rule for a similar setup: Technology weight at or above its 90th percentile AND the lagging group at an extreme on at least one lens (average weight percentile <= 15, or its average 3-year relative performance vs SPY in the bottom decile of its history). Episodes start at the first qualifying month; gaps under 12 months are merged. The weight percentile for early 2000 rests on only ~14 months of ETF history at the time.
Current sector weight vs. its own history
Each bar shows how far the sector's estimated current weight in the S&P 500 sits from the 50th percentile of its own history (the dashed centerline). Red = trading at a historically high weight (overweight); blue = historically low (underweight). Click the chart to enlarge.
Sector weight history (est.)
Monthly estimated weight, full available history per sector. Dot = current reading. Click any chart to enlarge.
What happened after similar dislocations, historically
For each sector at an extreme today: every past episode where it reached a comparably extreme weight percentile (top or bottom decile of its own history to that point). Each cell shows the average actual return of the sector, the average actual return of the S&P 500 (SPY) over the same months, and the gap between them in percentage points (pp). Open "Show each episode" for the individual episodes. Price returns, not including dividends.
| Sector | Next 6m | Next 12m | Next 24m | Next 36m | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TechnologyXLK · Overweight extreme7 past episodes | Sector+7.2% S&P 500+3.6% Outperformed by3.6 pp | Sector+15.0% S&P 500+6.5% Outperformed by8.4 pp | Sector+14.1% S&P 500+14.1% Matched, gap0.0 pp | Sector+7.7% S&P 500+9.1% Underperformed by1.4 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| FinancialsXLF · Underweight extreme15 past episodes | Sector+13.3% S&P 500+5.7% Outperformed by7.7 pp | Sector+21.5% S&P 500+7.8% Outperformed by13.7 pp | Sector+32.3% S&P 500+19.8% Outperformed by12.5 pp | Sector+36.6% S&P 500+24.5% Outperformed by12.1 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Consumer StaplesXLP · Underweight extreme6 past episodes | Sector+8.6% S&P 500+0.5% Outperformed by8.0 pp | Sector+12.9% S&P 500-7.2% Outperformed by20.1 pp | Sector+11.6% S&P 500-12.3% Outperformed by23.9 pp | Sector+3.2% S&P 500-8.2% Outperformed by11.5 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| UtilitiesXLU · Underweight extreme14 past episodes | Sector+6.6% S&P 500+2.3% Outperformed by4.4 pp | Sector+9.4% S&P 500+3.1% Outperformed by6.3 pp | Sector+12.8% S&P 500+20.8% Underperformed by8.0 pp | Sector+15.4% S&P 500+28.2% Underperformed by12.9 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MaterialsXLB · Underweight extreme5 past episodes | Sector+15.6% S&P 500+7.3% Outperformed by8.2 pp | Sector+25.8% S&P 500+10.7% Outperformed by15.1 pp | Sector+29.5% S&P 500+13.5% Outperformed by16.0 pp | Sector+30.8% S&P 500+17.8% Outperformed by12.9 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Real EstateXLRE · Underweight extreme8 past episodes | Sector+8.7% S&P 500+8.6% Outperformed by0.1 pp | Sector+13.5% S&P 500+14.6% Underperformed by1.0 pp | Sector+12.2% S&P 500+15.0% Underperformed by2.8 pp | Sector+20.9% S&P 500+36.7% Underperformed by15.8 pp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
All sectors
"Historical mean" and "std dev" are computed over each sector's full available history of the weight-proxy series (not point-in-time). The σ column is how many standard deviations the current estimated weight sits from that historical mean — a second, more traditional way to size the dislocation alongside the percentile.
| Sector | Ticker | Est. weight | Historical mean | Std dev | Z-score | Percentile | Regime | Months of history |
|---|---|---|---|---|---|---|---|---|
| Technology | XLK | 38.0% | 19.7% | 6.66 | +2.75σ | 99th | Overweight extreme | 334 |
| Financials | XLF | 12.3% | 20.3% | 7.83 | -1.02σ | 3rd | Underweight extreme | 334 |
| Communication Services | XLC | 9.6% | 10.8% | 1.00 | -1.18σ | 16th | Mid-range | 100 |
| Health Care | XLV | 9.3% | 11.6% | 1.70 | -1.36σ | 11th | Mid-range | 334 |
| Consumer Discretionary | XLY | 9.0% | 9.5% | 2.00 | -0.27σ | 45th | Mid-range | 334 |
| Industrials | XLI | 8.3% | 9.1% | 0.77 | -1.05σ | 13th | Mid-range | 334 |
| Consumer Staples | XLP | 4.5% | 8.2% | 1.50 | -2.53σ | 1st | Underweight extreme | 334 |
| Energy | XLE | 3.5% | 6.6% | 3.03 | -1.04σ | 15th | Mid-range | 334 |
| Utilities | XLU | 2.0% | 3.9% | 0.87 | -2.20σ | 1st | Underweight extreme | 334 |
| Materials | XLB | 1.8% | 2.9% | 0.59 | -1.87σ | 3rd | Underweight extreme | 334 |
| Real Estate | XLRE | 1.8% | 3.3% | 0.87 | -1.72σ | 1st | Underweight extreme | 132 |
Sector Underperformance
A second lens on the same question. The weights section above asks how big a sector has become; this one asks how badly it has performed relative to the S&P 500, and how rare that is for that sector. (A percentile of the raw sector/SPY price ratio would just repeat the weights section, because weight moves with relative price, so this uses two measures that don't.)
- Relative 3y: how a dollar in the sector did against a dollar in SPY over the last 36 months (total return). −30% means the sector dollar ended worth 30% less than the SPY dollar. Ranked against every rolling 3-year window in the sector's history since 1999: 0th = worst stretch ever, 100th = best.
- Relative drawdown: how far the sector-vs-SPY line sits below its own all-time peak, and the percentile of that depth vs. history. This shows how deep the hole is; Relative 3y shows how bad the recent stretch was.
Trailing 3-year performance vs. SPY, ranked against own history
* short history (Real Estate since 2015, Communication Services since 2018): fewer than 15 years of rolling windows, so treat those percentiles as low-confidence.
All sectors: performance and drawdown
| Sector | Ticker | 3y total return | SPY 3y | Relative 3y | Pctl (3y) | Hist. median 3y | Worst 3y ever | Rel. drawdown | Pctl (DD) | Flagged by |
|---|---|---|---|---|---|---|---|---|---|---|
| Technology | XLK | +142.5% | +86.2% | +30.3% | 91st | +8.9% | -59.6%2003-03 | -0.5%peak 2026-06 | 97th | Both |
| Financials | XLF | +71.7% | +86.2% | -7.8% | 40th | -3.0% | -58.3%2009-02 | -65.5%peak 2006-12 | 1st | Weight |
| Communication Services short history | XLC | +76.0% | +86.2% | -5.5% | 55th | -8.1% | -26.9%2022-10 | -24.6%peak 2021-08 | 15th | — |
| Health Care | XLV | +39.9% | +86.2% | -24.9% | 5th | -0.5% | -38.0%2025-10 | -38.5%peak 2015-07 | 4th | Performance |
| Consumer Discretionary | XLY | +39.4% | +86.2% | -25.1% | 1st | +4.3% | -25.2%2007-12 | -38.0%peak 2021-11 | <1st | Performance |
| Industrials | XLI | +73.9% | +86.2% | -6.6% | 14th | +1.9% | -20.6%2020-06 | -21.4%peak 2017-12 | 1st | — |
| Consumer Staples | XLP | +29.7% | +86.2% | -30.4% | 3rd | -4.8% | -39.1%2025-12 | -54.5%peak 2016-06 | <1st | Both |
| Energy | XLE | +51.1% | +86.2% | -18.8% | 33rd | +0.2% | -63.9%2020-09 | -70.2%peak 2008-06 | 17th | — |
| Utilities | XLU | +46.0% | +86.2% | -21.6% | 4th | -4.5% | -28.4%2025-12 | -60.5%peak 2009-01 | <1st | Both |
| Materials | XLB | +33.5% | +86.2% | -28.3% | 2nd | -4.7% | -34.3%2025-11 | -57.8%peak 2008-06 | 1st | Both |
| Real Estate short history | XLRE | +34.7% | +86.2% | -27.7% | 17th | -16.9% | -36.1%2026-01 | -59.4%peak 2016-06 | 1st | Weight |
Trailing 3-year relative performance over time
Rolling 36-month total return minus SPY (relative), monthly. The flat line is 0% (matched SPY). Hover to see the point-in-time percentile at each date. Click to enlarge.
What happened after similar underperformance, historically
For each flagged sector: every past episode where its trailing 3-year relative performance fell to the bottom decile of its own history as known at the time (point-in-time percentile, 5-year burn-in, flickers within 12 months merged into one episode). Each cell shows, over the next 12, 24 and 36 months, the average actual total return of the sector, the average actual total return of the S&P 500 (SPY) over the same months, and the gap between the two in percentage points (pp), plus how many episodes beat the S&P. Open "Show each episode" for each episode's real numbers. For Technology the same is done for top-decile (≥90th) outperformance. Samples are very small (1–5 episodes), so treat these as anecdotes, not odds.
| Sector | Next 12m | Next 24m | Next 36m | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TechnologyXLK · Outperformance extreme (3y ≥90th pctl)2 past episodes | Sector-2.9% S&P 500+2.3% Underperformed by5.2 pp | Sector+23.3% S&P 500+19.7% Outperformed by3.6 pp | Sector+48.6% S&P 500+43.1% Outperformed by5.5 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| FinancialsXLF · Underperformance (drawdown ≤10th pctl)1 past episode | Sector+97.4% S&P 500+53.3% Outperformed by44.2 pp | Sector+128.9% S&P 500+87.9% Outperformed by41.1 pp | Sector+103.9% S&P 500+97.4% Outperformed by6.5 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Health CareXLV · Underperformance (3y ≤10th pctl, drawdown ≤10th pctl)2 past episodes | Sector+10.8% S&P 500+0.5% Outperformed by10.3 pp | Sector+14.6% S&P 500+10.8% Outperformed by3.9 pp | Sector+39.3% S&P 500+52.4% Underperformed by13.1 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Consumer DiscretionaryXLY · Underperformance (3y ≤10th pctl, drawdown ≤10th pctl)2 past episodes | Sector-5.0% S&P 500-7.7% Outperformed by2.7 pp | Sector-5.8% S&P 500-20.1% Outperformed by14.4 pp | Sector+20.1% S&P 500-8.1% Outperformed by28.2 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| IndustrialsXLI · Underperformance (drawdown ≤10th pctl)5 past episodes | Sector+39.8% S&P 500+29.8% Outperformed by10.0 pp | Sector+58.4% S&P 500+45.3% Outperformed by13.0 pp | Sector+70.8% S&P 500+59.7% Outperformed by11.1 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Consumer StaplesXLP · Underperformance (3y ≤10th pctl, drawdown ≤10th pctl)2 past episodes | Sector+11.1% S&P 500-0.4% Outperformed by11.6 pp | Sector+14.4% S&P 500+22.5% Underperformed by8.1 pp | Sector+38.7% S&P 500+51.5% Underperformed by12.8 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| UtilitiesXLU · Underperformance (3y ≤10th pctl, drawdown ≤10th pctl)4 past episodes | Sector+7.7% S&P 500-2.1% Outperformed by9.7 pp | Sector+22.2% S&P 500+19.5% Outperformed by2.7 pp | Sector+33.9% S&P 500+41.7% Underperformed by7.8 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MaterialsXLB · Underperformance (3y ≤10th pctl, drawdown ≤10th pctl)2 past episodes | Sector+31.0% S&P 500+18.6% Outperformed by12.4 pp | Sector+60.6% S&P 500+47.9% Outperformed by12.6 pp | Sector+51.1% S&P 500+40.2% Outperformed by10.9 pp | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Real EstateXLRE · Underperformance (drawdown ≤10th pctl)1 past episode | no episode old enough yet | no episode old enough yet | no episode old enough yet | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Show each episode (real returns)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
What stands out: over the next 12 months, past bottom-decile episodes usually saw a relief rally against SPY (Staples, Utilities, Health Care, Materials and Consumer Discretionary all beat SPY in most 12-month windows). Over 36 months the record is mixed. Staples, Health Care and Utilities mostly kept lagging, largely because the 2010s–2020s were one long mega-cap growth market. So being deeply out of favour has historically been a better signal for a 1-year rebound than for a lasting 3-year reversal.
Stock Screener — 8 Most Dislocated Sectors
Top ETF-weight holdings of the 8 S&P 500 sectors currently most dislocated vs. their own history on at least one lens (see the Sector Dislocation tab). The Lens column shows which: Weight (sector weight at an extreme percentile), Performance (3-year relative performance at ≤10th percentile; Consumer Discretionary and Health Care were added on this lens), or Both. Built for a contrarian screen: filter for a high Quality Score and a deep discount to all-time high, or an earnings-recovery candidate, to find "grey cloud" businesses the market has temporarily marked down.
Universe: 235 stocks: the top holdings (by ETF weight) of the 8 S&P 500 sectors currently most dislocated vs. their own multi-decade history on at least one lens. Weight lens (sector weight at <=10th or >=90th percentile): Technology (XLK), Financials (XLF), Consumer Staples (XLP), Utilities (XLU), Materials (XLB), Real Estate (XLRE). Performance lens (3-year total-return excess vs SPY at <=10th percentile), added 2026-09-28: Consumer Discretionary (XLY) and Health Care (XLV). Staples, Utilities, Materials and Technology are flagged by both. Source: State Street SSGA sector SPDR ETF holdings files; fundamentals from Yahoo Finance (XLY/XLV fetched 2026-09-28, the other six 2026-09-03 -- see each stock's dataAsOf).
Quality Score (0–100): 0-100 composite score, the equal-weighted average of 5 pillar scores. Each pillar score is itself the equal-weighted average of its underlying metrics' percentile ranks, computed across all 235 stocks in this universe (not within-sector) -- so a 90 means 'better than ~90% of these 235 stocks on this dimension,' comparable across sectors. Missing data for a metric excludes just that metric from its pillar's average (renormalized); a stock missing an entire pillar has that pillar excluded from its composite (renormalized) rather than penalized to zero.
- Profitability — Return on equity, net profit margin, operating margin, gross margin (all: higher percentile = better).
- Capital Efficiency — Average ROIC and worst-year ROIC across the (up to) 4 fiscal years Yahoo's free data provides (both: higher percentile = better). Excluded for banks and other financials, where EBIT/invested-capital isn't a meaningful framing -- their capital efficiency is captured by return on equity in the profitability pillar instead. See the 'roicAvgPct / roicMinPct' note below for why this isn't a true 5 or 10-year figure.
- Financial Health — Current ratio (higher better) and debt/equity (lower better).
- Valuation — Trailing P/E, price/free-cash-flow, price/book, PEG ratio, price/sales (all: lower percentile = better, i.e. cheaper scores higher). Negative or zero values (a data artifact of negative earnings/equity/FCF) are excluded rather than treated as 'infinitely cheap.'
- Growth — 1-year EPS growth (latest vs. prior fiscal year), best-available multi-year EPS CAGR (Yahoo's free data caps at 4 fiscal years, so this is typically a ~3-year CAGR and is labeled with its actual year count per stock -- NOT a true 5-year figure), revenue growth, and most recent quarterly earnings growth YoY (all: higher percentile = better).
Deliberately excluded from the score: Price/sentiment signals -- % below all-time high, 52-week range, short interest, analyst recommendation, normalized-EPS gap -- are NOT part of the quality score. They measure how out-of-favor a stock is (or how distorted its current earnings look), not how good the underlying business is. They're kept as separate sortable columns so you can combine 'high quality score' with 'deeply discounted' or 'earnings temporarily depressed' yourself -- the contrarian 'buy the grey clouds' screen this tool is built for.
Multi-year ROIC (avg / worst-year): Return on invested capital (ROIC), tracked over multiple years because a single high-ROIC year is easy to hit and means little -- a durably high ROIC sustained across an economic cycle is a much stronger quality signal, and is what this metric is trying to approximate.
ROIC per fiscal year = EBIT x (1 - effective tax rate) / invested capital, with all three inputs pulled directly from Yahoo's own pre-computed annual fields (not re-derived from raw statements). roicAvgPct is the average across the available years; roicMinPct is the worst single year -- included specifically to catch a stock whose average looks good only because of one exceptional year, versus one that cleared a high bar every year.
Yahoo's free fundamentals-timeseries endpoint caps annual data at exactly 4 fiscal years, verified empirically by querying it with a period1 as far back as 1995 and still getting only the most recent 4 years back for every ticker tested. A true 5-year or 10-year ROIC average is NOT obtainable from this data source -- roicYears on each stock states exactly how many fiscal years its figures actually span (typically 4, sometimes fewer for recent IPOs/spinoffs).
Banks, card networks, and other financials (about 15 of the 235 stocks, mostly in the Financials sector) have no meaningful EBIT/invested-capital framing -- interest income and expense ARE their core business, not a financing cost sitting outside operating profit -- so Yahoo doesn't report EBIT for them and ROIC comes back null rather than a misleading number. Return on equity (in the profitability pillar) is the appropriate capital-efficiency lens for those instead.
Normalized EPS & earnings-recovery flag: A mechanical proxy for a company's 'normal' earnings power, aimed at surfacing stocks whose reported (trailing) EPS is temporarily depressed by a one-off hit (impairment, write-down, restructuring charge) and expected to recover -- exactly the situation implied by 'buy when a temporary problem has crushed the reported number.' No line-item impairment/one-time-charge data is available from free sources, so this cannot identify the actual cause -- it's a statistical smoothing, not a real GAAP-adjusted normalized EPS a human analyst would derive from the footnotes.
normalizedEps = median of {each available annual fiscal-year EPS (up to the 4 years Yahoo's free data provides) + the current forward EPS estimate, when present}. The median absorbs a single unusual year (very low or very high) without needing to know why it happened. normalizedPE = current price / normalizedEps.
epsVsNormalizedGapPct: How far trailing (reported) EPS sits below (positive) or above (negative) the normalized level. A large positive gap is the 'earnings currently depressed vs. normal' signal; a negative gap flags the opposite -- trailing EPS currently running above its own normal level (a possible earnings-quality warning, not a buy signal).
Recovery candidate flag: True only when the gap is >20% AND the forward EPS estimate is itself above trailing EPS -- i.e. both the historical smoothing and the forward analyst consensus agree a recovery is already underway, not just a stock in secular decline.
The percentage gap can look extreme when normalizedEps itself is small (dividing by a near-zero number) -- always cross-check epsVsNormalizedGapAbs (the plain dollar gap) and normalizedPE, not the percentage alone, especially for stocks coming off a net loss.
Other notes:
- EPS growth figures use Yahoo Finance's free fundamentals-timeseries endpoint, which currently returns at most 4 fiscal years of annual EPS -- true 5-year EPS CAGR is not available from this data source. epsCagrYears on each stock states exactly how many years its CAGR actually spans.
- '1yr return %' (oneYearReturnPct) is Yahoo's 52-week price change, not exactly a trailing-12-month return.
- All fundamentals are a single snapshot fetched from Yahoo Finance; refresh by re-running the fetch + this script.
| Ticker | Sector | Lens | Price | % Below ATH | 1Y Return | P/E | P/S | P/B | P/FCF | Div Yield | EPS Gr 1Y | EPS CAGR | ROIC Avg/Min | ROE | Norm. P/E | Short % Float | Quality Score |
|---|
↻ = earnings recovery candidate (trailing EPS well below its normalized level, with the forward estimate already pointing back up). Click any column header to sort.