Dividend Yield Trap: How to Spot Am Early
Dividend yield trap na high yield from falling price. See wetin top yield decile do next, plus four checks wey fit flag the trap early.
Dividend yield trap na high dividend yield wey falling share price create, no be generous payout. Yield na annual dividends per share divide by price. So, if stock lose half of its value, the advertised yield go double even though company no add one cent to the check wey e dey write. The top of any yield screen dey full of names wey market don already mark down. A measurable portion of dem go reduce or stop the dividend within the next year. This page measure that portion and explain the four checks wey fit separate cheap payer from broken one.
Why highest dividend yields dey sit on the biggest price falls
Yield get two moving parts wey no dey behave the same way. The numerator na annual dividend rate. Board dey set am only a few times every year, and e dey remain flat between those decisions. The denominator na price, wey dey move every second wey market dey open. Na only one of the two fit change quickly. So, almost every sharp jump for yield na price story, no be payout story.
See how the two parts separate, using one fixed cohort. Every US-listed stock wey close above $5 on June 30, 2025 and pay regular quarterly cash dividend for the previous twelve months enter the analysis. Dem sort the stocks into bands based on the forward yield wey each one show that day: its latest quarterly payment multiplied by four, divided by its closing price. Then the panel look backward to see how each side of the fraction move during the twelve months before that date.
The exact SQL behind every number
WITH px_base AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2025-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price >= 5
),
px_prior AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2024-06-28')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price > 0
),
rate_base AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2024-06-30')
AND ex_dividend_date <= toDate('2025-06-30')
GROUP BY ticker
),
rate_prior AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2023-06-30')
AND ex_dividend_date <= toDate('2024-06-28')
GROUP BY ticker
)
SELECT multiIf(100 * rb.annual_rate / b.price >= 8, '8% and up',
100 * rb.annual_rate / b.price >= 6, '6-8%',
100 * rb.annual_rate / b.price >= 4, '4-6%',
100 * rb.annual_rate / b.price >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS names,
round(quantileDeterministic(0.5)(100 * rb.annual_rate / b.price, cityHash64(b.ticker)), 2) AS median_yield_pct,
round(quantileDeterministic(0.5)(100 * (b.price / p.price - 1), cityHash64(b.ticker)), 1) AS median_price_change_pct,
round(quantileDeterministic(0.5)(100 * (rb.annual_rate / rp.annual_rate - 1), cityHash64(b.ticker)), 1) AS median_dividend_change_pct
FROM px_base AS b
INNER JOIN px_prior AS p ON b.ticker = p.ticker
INNER JOIN rate_base AS rb ON b.ticker = rb.ticker
INNER JOIN rate_prior AS rp ON b.ticker = rp.ticker
GROUP BY yield_band
ORDER BY median_yield_pctThe ladder dey move in one direction. Names inside the 8% and up band reach median yield of 9.69%, with median price change of -2.4% over the previous year. The under 2% band record 11.9% for the same period. The payout side barely separate the two groups: median annualized dividend rate change by 0% for the top band, compared with 5.5% for the bottom band. To sort a list by yield na, roughly, to sort am by twelve-month price decline. The highest dividend yield stocks screen show the live version of that list. This page explain wetin dey underneath the first page.
Wetin happen to di highest yielders for di next twelve months
Na di same cohort and same date, but dis time we dey look forward. For each band, di panel dey compare di annualized rate for di last regular payment before June 30, 2025, with di last regular payment wey dem make for di twelve months after dat one. If di rate drop by more than 1%, we count am as reduction. If no regular cash dividend at all enter for dose twelve months, we count am as stopped. If payer change payment schedule, we compare di annualized rate, so change from quarterly to monthly no go count wrong.
The exact SQL behind every number
WITH px_base AS (
SELECT ticker,
argMax(toFloat64(close), window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2025-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING price >= 5
),
rate_before AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date > toDate('2024-06-30')
AND ex_dividend_date <= toDate('2025-06-30')
GROUP BY ticker
),
rate_after AS (
SELECT ticker,
argMax(toFloat64(cash_amount) * frequency, ex_dividend_date) AS annual_rate
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND frequency > 0
AND cash_amount > 0
AND ex_dividend_date > toDate('2025-06-30')
AND ex_dividend_date <= toDate('2026-06-30')
GROUP BY ticker
)
SELECT multiIf(100 * b.annual_rate / p.price >= 8, '8% and up',
100 * b.annual_rate / p.price >= 6, '6-8%',
100 * b.annual_rate / p.price >= 4, '4-6%',
100 * b.annual_rate / p.price >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS payers,
round(quantileDeterministic(0.5)(100 * b.annual_rate / p.price, cityHash64(p.ticker)), 2) AS median_yield_pct,
round(100 * countIf(ifNull(a.annual_rate, 0) = 0) / count(), 1) AS pct_stopped_paying,
round(100 * countIf(ifNull(a.annual_rate, 0) > 0 AND a.annual_rate < b.annual_rate * 0.99) / count(), 1) AS pct_reduced_rate,
round(100 * countIf(ifNull(a.annual_rate, 0) = 0 OR a.annual_rate < b.annual_rate * 0.99) / count(), 1) AS pct_reduced_or_stopped,
round(100 * countIf(ifNull(a.annual_rate, 0) >= b.annual_rate * 0.99) / count(), 1) AS pct_maintained_or_raised
FROM px_base AS p
INNER JOIN rate_before AS b ON p.ticker = b.ticker
LEFT JOIN rate_after AS a ON p.ticker = a.ticker
GROUP BY yield_band
ORDER BY median_yield_pctOut of di 330 names wey dey inside di 8% and up band on June 30, 2025, 36.4% either cut di annualized rate or no make any regular payment at all for di next twelve months. Among dem, 28.8% reduce di rate, while 7.6% stop payment. Di under 2% band, wey get 1369 names, come out at 23.4%. Across all 5 bands, di figure dey rise as yield rise.
Before you draw conclusion, read di other side of di same panel: 63.6% of di top band keep di rate flat or increase am. High yield na hit rate, e no be final judgment on any one company. Wetin di cohort show na di base rate wey reader dey face when dem buy from di top of a screen, plus how much di outcomes spread wider for dat level. Di mechanics of wetin board actually dey do when cash tighten dey covered for dividend cuts.
Check one: payout ratio leave any room?
Payout ratio na dividend per share divided by earnings per share. If e dey below 100%, reported profit cover the dividend and still leave something. If e pass 100%, company dey distribute more than wetin e earn. E fit fund am with cash wey e get, asset sales, or borrowing. When we sort today’s payers by yield band, we see say the two dey move closely together.
The exact SQL behind every number
SELECT multiIf(dividend_yield * 100 >= 8, '8% and up',
dividend_yield * 100 >= 6, '6-8%',
dividend_yield * 100 >= 4, '4-6%',
dividend_yield * 100 >= 2, '2-4%',
'under 2%') AS yield_band,
count() AS payers,
round(quantileDeterministic(0.5)(dividend_yield * 100, cityHash64(ticker)), 2) AS median_yield_pct,
round(quantileDeterministicIf(0.5)(dividend_yield * price / earnings_per_share * 100,
cityHash64(ticker), earnings_per_share > 0), 1) AS median_payout_ratio_pct,
round(100 * countIf(earnings_per_share > 0 AND dividend_yield * price > earnings_per_share)
/ countIf(earnings_per_share > 0), 1) AS pct_paying_over_earnings,
round(100 * countIf(earnings_per_share <= 0) / count(), 1) AS pct_no_positive_eps
FROM global_markets.stocks_ratios
WHERE date = (SELECT max(date) FROM global_markets.stocks_ratios)
AND price >= 5
AND market_cap >= 1000000000
AND dividend_yield > 0
AND earnings_per_share IS NOT NULL
GROUP BY yield_band
HAVING countIf(earnings_per_share > 0) > 0
ORDER BY median_yield_pctMedian payout ratio dey increase for every band, from 21.5% for the under 2% group reach 160.6% for the 8% and up group. The share of companies wey dey distribute more than wetin dem earn follow the same pattern: 2.6% for the bottom against 80.4% for the top. Another 23.3% of companies for the highest band no report any positive earnings per share at all, compared with 9.6% for the lowest. The complete calculation, including cases where ratio above 100% dey normal, dey for payout ratio guide.
Check two: yield dey far pass the company own range?
Yield only get meaning when you compare am with reference point. Market median answers one question, wey we cover for wetin count as good dividend yield, while the company own five-year range answers sharper question: this stock don ever pay this much before? Conagra Brands, the packaged food company, dey follow the pattern month by month for the last five years.
The exact SQL behind every number
WITH px AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMax(toFloat64(close), window_start) AS price,
max(toDate(toTimeZone(window_start, 'America/New_York'))) AS last_day
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'CAG'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY month_start
),
dv AS (
SELECT ex_dividend_date, toFloat64(cash_amount) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'CAG'
AND distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date >= toDate('2021-01-01')
)
SELECT formatDateTime(px.month_start, '%Y-%m') AS month,
formatDateTimeInJodaSyntax(px.month_start, 'MMMM yyyy') AS month_label,
round(any(px.price), 2) AS price_usd,
round(argMax(dv.cash_amount, dv.ex_dividend_date) * 4, 2) AS annual_dividend_usd,
round(argMax(dv.cash_amount, dv.ex_dividend_date) * 4 / any(px.price) * 100, 2) AS dividend_yield_pct
FROM px, dv
WHERE dv.ex_dividend_date <= px.last_day
GROUP BY px.month_start
ORDER BY px.month_startRead the three columns together across the 60 months. Annualized dividend rate rise from $1.25 per share for August 2021 to $0.7 for July 2026. Price move from $33.11 to $14.52 for the same period. Yield, wey be the first figure divided by the second, move from 3.78% to 4.82%. Nothing for the payout schedule explain movement of that size. Screener wey sort by yield only show the effect of the denominator and no show how the figures take work.
Na the whole diagnostic dey inside this one chart. When yield dey at multiples of the stock own normal five-year level, the question wey make sense na wetin change for the business wey market dey price, no be how attractive the ratio look today.
Check two more things before you start the screen
Check three na cash. Companies dey pay dividends with cash, while earnings na accounting figure after non-cash charges. Payout ratio wey dey below 100% of earnings fit still pass 100% of the free cash flow wey the business actually generate. Payout wey balance sheet fund get shorter runway than payout wey operations fund. Compare the yearly dividend bill with operating cash flow minus capital spending, across several years instead of just one.
Check four na the peer median. Yields dey group by industry. Regulated utilities, real estate trusts, and pass-through partnerships dey pay several times wetin software company dey pay, and the structure explain the level. REIT must distribute most of its taxable income to keep its tax status. But inside one industry, yield wey be double the peer median na real outlier. The peer group na the only fair benchmark for am. One last detail you need know: screen wey quote trailing yield dey add payments wey dem don already make, so e fit advertise dividend wey dem cut months ago. The difference dey explained for trailing versus forward dividend yield, and the underlying arithmetic dey for wetin dividend yield dey measure.
Dividend yield trap FAQ
Dividend yield trap na wetin?
Na high dividend yield wey falling share price create, no be rising payout. The clue dey inside the fraction: for the twelve months before June 30, 2025, the 8% and up band show median price change of -2.4%, while the median dividend rate change 0%.
High dividend yield mean say cut dey come?
No single yield fit predict anything, but the base rates dey differ sharply by band. For the twelve months after June 30, 2025, 36.4% of the 8% and up cohort reduce or stop the payment, compared with 23.4% of the under 2% cohort. The remaining 63.6% of the top band hold or raise am.
Which payout ratio too high?
For ordinary operating company, anything above 100% mean say dividend pass reported earnings. For the latest snapshot wey dey on file, the median payer for the 8% and up band run 160.6%, and 80.4% of that band pay out pass wetin e earn. REITs and partnerships dey often pass 100% based on earnings, so dem dey judge dem with cash flow instead.
How you fit check dividend before you trust the yield?
Four readings cover most of the matter: payout ratio against earnings, dividend bill against free cash flow, current yield against the company own multi-year range, and yield against the peer median for the industry. Each one na comparison, and headline yield alone no provide any of dem.
Every figure above come from stored, versioned query wey use filed dividend records and real closing prices. Open any panel SQL, or run the same screen yourself for the Strasmore terminal.
Method and data notes
- The cohort fixed for June 30, 2025: every US-listed stock wey close above $5 that day and get at least one regular quarterly cash dividend for the previous twelve months. Special and one-off distributions no dey included throughout.
- Yield for the cohort panels na the forward rate: latest regular quarterly payment times four, divide by the closing price that day. The payout ratio panel use the ratios table trailing yield instead, wey add the last twelve months of payments.
- Reduced mean say annualized rate for the next regular payment come more than 1% below the rate wey dey active on the cohort date. Stopped mean say no regular cash dividend get ex-dividend date for the following twelve months.
- Band sizes range from 1369 names for the under 2% band reach 330 for the 8% and up band, so the top band percentages dey move based on far fewer companies than the bottom band percentages.
- Medians use deterministic quantiles keyed on the ticker, so two renderings of the same statistic no fit drift apart.