Rising Dividend Yield: Separating Compounders from Value Traps on 25 Years of US Data

We screened for stocks with 3 consecutive years of rising dividend yield driven by dividend growth, then backtested on all US exchanges from 2000 to 2025. 9.56% CAGR, +1.71% alpha, zero cash periods.

Growth of $10,000 invested in Rising Dividend Yield US strategy vs S&P 500 from 2000 to 2025.

We screened for stocks with 3 consecutive years of rising dividend yield, filtered for cases where the increase came from dividend growth (not falling prices), and backtested the strategy on all US exchanges from 2000 to 2025. The portfolio returned 9.56% annually vs 7.85% for the S&P 500, with zero cash periods and an average of 27 stocks per rebalance. The signal works, but it's the driver classification that makes the difference.

Contents

  1. Method
  2. The Concept
  3. The Screens
  4. Rising Yield Screen (SQL)
  5. What We Found
  6. 25 years of data. +1.71% annual alpha over the S&P 500.
  7. Year-by-year returns
  8. The early 2000s: the strategy's best stretch
  9. The 2018-2019 gap
  10. Pre/Post-GFC split
  11. Backtest Methodology
  12. Historical Research
  13. When It Works
  14. When It Struggles
  15. Limitations
  16. Takeaway
  17. Part of a Series
  18. References
  19. Run This Screen Yourself

Data: FMP financial data warehouse, 2000–2025. Updated March 2026.


Method

Data source: Ceta Research (FMP financial data warehouse) Universe: All US exchanges (NYSE, NASDAQ, AMEX), market cap > $1B USD Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), equal weight top 30 by 2-year yield expansion Benchmark: S&P 500 Total Return (SPY) Cash rule: Hold cash if fewer than 10 stocks qualify Transaction costs: Size-tiered (0.1% for >$10B, 0.3% for $2-10B, 0.5% for <$2B, one-way)

For the full methodology, metrics definitions, and data quality procedures, see our public methodology.


The Concept

Dividend yield is a ratio: annual dividend per share divided by stock price. When yield rises over multiple years, one of two things happened.

Scenario A: The dividend grew faster than the price. Management raised the payout. The stock held steady or rose, but not as fast as the dividend. This is the bullish signal. The company is confident enough in cash flows to keep raising the distribution.

Scenario B: The price dropped. The dividend stayed flat or declined less than the price. Yield expanded mechanically. This might signal undervaluation, but more often the market is pricing in future trouble.

The distinction matters. A screen that just sorts by "yield went up" mixes both groups together. You get a portfolio that's half quality compounders and half falling knives.

This is not the same as dividend growth. A company can grow its dividend 10% per year and still see its yield fall if the stock price rises 15%. That's great for shareholders but it won't show up in a rising yield screen. Dividend growth tracks absolute payments. Rising yield tracks the trajectory of the yield ratio itself.

Caveat on driver classification: The binary split (DPS grew vs. didn't) can mask mixed scenarios. A stock might fall 5% while DPS rises 2%. Yield goes up, DPS went up, so it shows "Dividend Growth." But the price decline is doing most of the work. Our backtest requires consecutive DPS growth across both years to mitigate this, but it doesn't eliminate the ambiguity entirely.


The Screens

Rising Yield Screen (SQL)

WITH yearly_yield AS (
    SELECT r.symbol, r.date,
        r.fiscalYear AS yr,
        r.dividendYield,
        r.dividendPerShare,
        r.dividendPayoutRatio,
        LAG(r.dividendYield, 1) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS yield_1yr,
        LAG(r.dividendYield, 2) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS yield_2yr,
        LAG(r.dividendPerShare, 1) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS dps_1yr,
        LAG(r.dividendPerShare, 2) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS dps_2yr
    FROM financial_ratios r
    WHERE r.period = 'FY' AND r.dividendYield > 0
),
screened AS (
    SELECT y.symbol, y.date, y.yr,
        y.dividendYield, y.dividendPerShare, y.dividendPayoutRatio,
        (y.dividendYield - y.yield_2yr) AS yield_change_2yr,
        CASE
            WHEN y.dividendPerShare > y.dps_1yr AND y.dps_1yr > y.dps_2yr THEN 'Consecutive DPS Growth'
            WHEN y.dividendPerShare > y.dps_1yr THEN 'Partial DPS Growth'
            ELSE 'Price Decline Driver'
        END AS yield_driver
    FROM yearly_yield y
    WHERE y.yield_2yr IS NOT NULL
      AND y.dividendYield > y.yield_1yr AND y.yield_1yr > y.yield_2yr
      AND y.dividendPerShare > y.dps_1yr
      AND y.dividendPayoutRatio > 0 AND y.dividendPayoutRatio < 0.75
    QUALIFY ROW_NUMBER() OVER (PARTITION BY y.symbol ORDER BY y.date DESC) = 1
)
SELECT s.symbol, p.companyName,
    ROUND(s.dividendYield * 100, 2) AS yield_pct,
    ROUND(s.yield_change_2yr * 100, 2) AS yield_expansion_2yr_pct,
    s.yield_driver,
    ROUND(s.dividendPayoutRatio * 100, 1) AS payout_pct,
    ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
    ROUND(k.marketCap / 1e9, 1) AS market_cap_b
FROM screened s
JOIN key_metrics_ttm k ON s.symbol = k.symbol
JOIN profile p ON s.symbol = p.symbol
WHERE k.returnOnEquityTTM > 0.10
  AND k.marketCap > 1e9
  AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
ORDER BY s.yield_change_2yr DESC
LIMIT 30

Run this query on Ceta Research

The LAG window functions pull the previous two fiscal years of dividendYield for each stock. The WHERE clause enforces the monotonic increase: current > 1yr ago > 2yr ago. The yield_driver column classifies whether DPS grew consecutively. We rank by 2-year yield expansion and take the top 30.


What We Found

Growth of $10,000 invested in Rising Yield US vs S&P 500 from 2000 to 2025.
Growth of $10,000 invested in Rising Yield US vs S&P 500 from 2000 to 2025.

25 years of data. +1.71% annual alpha over the S&P 500.

Metric Rising Yield (US) S&P 500
CAGR 9.56% 7.85%
Total Return 880% 562%
Volatility 19.0% 16.6%
Max Drawdown -29.77% -38.01%
Sharpe Ratio 0.397 0.352
Sortino Ratio 0.879 0.628
Win Rate (annual) 52% -
Avg Stocks per Period 27.3 -
Cash Periods 0 of 25 -

The strategy turned $10,000 into roughly $98,000. The S&P 500 turned it into roughly $66,000. The portfolio was fully invested every single year, averaging 27 stocks per rebalance.

The drawdown story: -29.77% vs -38.01%. The rising yield screen, by filtering for companies actively growing their dividends, avoided the worst of major sell-offs. The Sharpe ratio confirms this: 0.397 vs 0.352. More return per unit of risk.

Year-by-year returns

Rising Yield US vs S&P 500 annual returns from 2000 to 2024.
Rising Yield US vs S&P 500 annual returns from 2000 to 2024.

Year Rising Yield S&P 500 Excess
2000 +25.3% -14.8% +40.1%
2001 +2.9% -22.4% +25.3%
2002 +11.0% +6.9% +4.1%
2003 +20.2% +14.9% +5.3%
2004 +30.8% +8.9% +21.9%
2005 +21.2% +8.0% +13.2%
2006 +34.2% +20.9% +13.3%
2007 -3.6% -15.2% +11.6%
2008 -27.1% -26.9% -0.2%
2009 +19.7% +16.0% +3.7%
2010 +30.5% +33.5% -3.0%
2011 -10.1% +4.2% -14.3%
2012 +15.7% +20.7% -5.1%
2013 +37.1% +24.7% +12.4%
2014 -5.0% +7.2% -12.2%
2015 -5.7% +2.7% -8.4%
2016 +19.5% +18.6% +0.9%
2017 +7.0% +14.3% -7.3%
2018 -6.5% +11.2% -17.7%
2019 -18.1% +7.4% -25.5%
2020 +50.5% +41.0% +9.5%
2021 -13.5% -10.7% -2.8%
2022 +19.2% +18.1% +1.1%
2023 +10.1% +25.4% -15.4%
2024 +14.1% +14.4% -0.3%

The early 2000s: the strategy's best stretch

Year Rising Yield S&P 500 Excess
2000 +25.3% -14.8% +40.1%
2001 +2.9% -22.4% +25.3%
Cumulative (2000-01) +28.9% -33.8% +62.7%

While the S&P 500 lost 34% during the dot-com bust, the rising yield portfolio gained 29%. Dividend growers were insulated from the tech bubble. Companies raising their dividends weren't the ones trading at 100x earnings.

2004-2007 was also strong. The screen loaded up on mature companies growing dividends through the mid-2000s expansion. Even in 2007, the portfolio was essentially flat (-0.4%) while the market dropped 13.7%.

The 2018-2019 gap

2018 and 2019 were the worst two years: -6.5% and -18.1% vs the S&P 500's +11.2% and +7.4%. Growth stocks dominated. Companies with fast-growing yields tend to be mature, cash-rich businesses. They don't participate in momentum-driven markets. The 2020 bounce (+50.5%) recovered most of the damage, but anyone holding through 2019 would have been tested.

Pre/Post-GFC split

The strategy has a clear structural break around the Global Financial Crisis:

Period Avg Annual Excess
2000-2010 +10.5%
2011-2019 -9.0%
2020-2024 -1.6%

The first decade was the best: dividend growers outperformed massively during both the dot-com bust and the GFC recovery. The 2011-2019 stretch was tough as growth stocks dominated. Post-2020 is mixed. The pattern suggests the strategy's edge is strongest during market stress and value rotations.


Backtest Methodology

Parameter Choice
Universe NYSE + NASDAQ + AMEX, Market Cap > $1B USD
Signal 3yr rising dividendYield, DPS growth driver, ROE > 10%, Payout < 75%
Portfolio Top 30 by 2-year yield expansion, equal weight
Rebalancing Annual (July)
Cash rule Hold cash if < 10 qualify
Benchmark S&P 500 Total Return (SPY)
Period 2000-2025 (25 years)
Transaction costs Size-tiered (0.1-0.5% one-way)
Data Point-in-time (FY filings, no look-ahead bias)

Historical Research

Campbell and Shiller (1988) decomposed the dividend-price ratio into expected future dividends and expected future returns. Their key finding: a high dividend-price ratio predicts higher future stock returns. Cochrane (2008) extended this and argued that virtually all variation in dividend-price ratios reflects changing expected returns, not changing expected dividend growth.

For this strategy, the implication is straightforward. When we filter for rising yield driven by DPS growth, we're capturing the quality end of the spectrum. The academic evidence says dividend-price ratios carry predictive power. Our screen isolates the subset where that predictive power comes from improving fundamentals, not deteriorating prices.


When It Works

After market corrections. The strategy's biggest wins came in 2000-2001, 2004, 2007, and 2020. Dividend growers tend to be overlooked during crashes and are repriced upward during recoveries.

In value-oriented markets. When investors rotate from growth to value, companies with rising dividend yields attract capital. They offer income plus growth potential.

Mature sectors with pricing power. Utilities, consumer staples, industrials. Companies in these sectors grow dividends because they have predictable cash flows.

When It Struggles

During growth rallies. 2018-2019 was painful. The market rewarded revenue growth and momentum, not dividend trajectories. Rising yield stocks are, by definition, not the fastest-growing names.

In falling rate environments. Lower rates benefit growth stocks disproportionately through lower discount rates. Dividend yield becomes a smaller component of total return.


Limitations

Driver classification is imperfect. The binary DPS growth check doesn't account for mixed scenarios where both price decline and DPS growth contribute to yield expansion. Consecutive DPS growth requirement mitigates this but can't eliminate it.

FY data lag. We use annual fiscal year data. There's a gap between the fiscal year end and when filings become available. July rebalancing gives companies time to file, but some data may still be stale.

No dividend cut prediction. The screen finds stocks with rising yield trajectories. It can't predict if the next announcement is a cut. Payout ratio and ROE filters reduce this risk.

Survivorship bias. Exchange membership uses current profiles, not historical. IPOs and delistings aren't tracked over time.

Recent underperformance. The strategy trailed the S&P 500 in 8 of the last 14 years (2011-2024). Factor cyclicality is real.


Takeaway

Rising dividend yield works as a US stock selection signal. 9.56% CAGR, +1.71% annual alpha, zero cash periods, 27 stocks per rebalance. The driver classification is what makes it work: filtering for DPS growth removes the falling-knife stocks that would otherwise pollute the signal.

The cost is clear. You'll lag during growth-driven markets. 2018-2019 was a combined -24% gap vs the benchmark. The strategy requires patience through these cycles. Over 25 years, the math works. Over any given 3-year stretch, it might not.


Part of a Series

This analysis is part of our rising dividend yield global exchange comparison. We tested the same signal on 16 exchanges worldwide: - Rising Yield on Indian Stocks (BSE + NSE) - 13.54% CAGR, the standout performer - Rising Yield on German Stocks (XETRA) - 9.23% CAGR, +4.19% vs DAX - Rising Yield on Canadian Stocks (TSX) - 8.86% CAGR, zero cash periods - Rising Yield on Japanese Stocks (JPX) - 8.38% CAGR, highest Sharpe of all markets - Rising Yield on UK Stocks (LSE) - 6.86% CAGR, +5.63% vs FTSE 100 - Rising Yield: 16-Exchange Global Comparison - full comparison table


References

  • Campbell, John Y., and Robert J. Shiller. "The Dividend-Price Ratio and Expectations of Future Dividends and Discount Factors." Review of Financial Studies 1, no. 3 (1988): 195-228.
  • Cochrane, John H. "The Dog That Did Not Bark: A Defense of Return Predictability." Review of Financial Studies 21, no. 4 (2008): 1533-1575.

Run This Screen Yourself

Via web UI: Run the Rising Yield screen on Ceta Research. The query is pre-loaded. Hit "Run" and see what passes today.

Via Python:

import requests, time

API_KEY = "your_api_key"  # get one at cetaresearch.com
BASE = "https://tradingstudio.finance/api/v1"

resp = requests.post(f"{BASE}/data-explorer/execute", headers={
    "X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={
    "query": """
        WITH yearly_yield AS (
            SELECT r.symbol, r.date, r.fiscalYear AS yr,
                r.dividendYield, r.dividendPerShare, r.dividendPayoutRatio,
                LAG(r.dividendYield, 1) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS yield_1yr,
                LAG(r.dividendYield, 2) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS yield_2yr,
                LAG(r.dividendPerShare, 1) OVER (PARTITION BY r.symbol ORDER BY r.fiscalYear) AS dps_1yr
            FROM financial_ratios r
            WHERE r.period = 'FY' AND r.dividendYield > 0
        )
        SELECT y.symbol,
            ROUND(y.dividendYield * 100, 2) AS yield_pct,
            ROUND((y.dividendYield - y.yield_2yr) * 100, 2) AS expansion_pct
        FROM yearly_yield y
        JOIN key_metrics_ttm k ON y.symbol = k.symbol
        JOIN profile p ON y.symbol = p.symbol
        WHERE y.yield_2yr IS NOT NULL
            AND y.dividendYield > y.yield_1yr AND y.yield_1yr > y.yield_2yr
            AND y.dividendPerShare > y.dps_1yr
            AND k.returnOnEquityTTM > 0.10 AND k.marketCap > 1e9
            AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
        QUALIFY ROW_NUMBER() OVER (PARTITION BY y.symbol ORDER BY y.date DESC) = 1
        ORDER BY (y.dividendYield - y.yield_2yr) DESC LIMIT 30
    """,
    "options": {"format": "json", "limit": 100}
})
task_id = resp.json()["taskId"]

while True:
    result = requests.get(f"{BASE}/tasks/data-query/{task_id}",
                          headers={"X-API-Key": API_KEY}).json()
    if result["status"] in ("completed", "failed"):
        break
    time.sleep(2)

for r in result["result"]["rows"][:10]:
    print(f"{r['symbol']:8s} Yield={r['yield_pct']}% Expansion={r['expansion_pct']}%")

Get your API key at cetaresearch.com. The full backtest code (Python + DuckDB) is on GitHub.


Data: Ceta Research, FMP financial data warehouse. Universe: NYSE + NASDAQ + AMEX. Annual rebalance (July), equal weight top 30, 2000-2025.