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.
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
- Method
- The Concept
- The Screens
- Rising Yield Screen (SQL)
- What We Found
- 25 years of data. +1.71% annual alpha over the S&P 500.
- Year-by-year returns
- The early 2000s: the strategy's best stretch
- The 2018-2019 gap
- Pre/Post-GFC split
- Backtest Methodology
- Historical Research
- When It Works
- When It Struggles
- Limitations
- Takeaway
- Part of a Series
- References
- 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

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

| 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.