Trailing vs Forward Dividend Yield: Wetin E Mean
Trailing yield dey count dividend payouts for the last twelve months, while forward yield annualizes the latest declared one. Na why screeners fit disagree.
Trailing dividend yield and forward dividend yield na two answers to the same question. The main difference dey inside the numerator. Trailing yield, wey dem normally write as TTM for trailing twelve months, dey add all the dividends wey company actually pay for the past year. Forward yield dey take the latest dividend payment wey company declare and multiply am by the number of payments for one year. Both of dem divide by the same share price. Anytime payout change inside the last twelve months, the two methods go show different numbers for the same stock at the same time.
The arithmetic for the ratio dey inside how to calculate dividend yield. This page dey focus on the choice above the line: which dividend figure the source put inside the numerator, and why two screeners fit quote the same ticker at two different yields one afternoon.
Wetin be trailing twelve month dividend yield?
Trailing yield dey add all cash dividend wey get an ex-dividend date inside di last 365 days, then e divide di total by di current price. Ex-dividend date na di day wey stock start to trade without di upcoming payment attached. Na also di date wey most data providers dey use to place dividend for time.
Nothing for trailing figure na estimate. Na record of cash wey don already move, and na di correct measure of wetin owner collect. But di weakness na di other side of di strength: trailing yield dey describe payout wey fit don stop to exist. Company wey reset quarterly dividend last month still get three payments for di old rate inside im trailing window, and e go carry dem for another nine months.
Wetin be forward dividend yield?
Forward yield dey annualize the newest payment wey company don declare: multiply the latest check by how often dem dey pay am, then divide by the same price. If company dey pay quarterly and the newest declaration na $0.50 per share, e get $2.00 forward rate. If company dey pay monthly at $0.25, e get $3.00.
Na projection wey build on one observation, and e assume say the next payments go look like the last one. Wetin e give you na current information. When company raise the payment, the new rate enter the forward figure once the first bigger check land. But the trailing figure need four complete quarters before e fully reflect am.
Trailing versus forward dividend yield for eight household payers
Panel wey dey below run both calculations for eight big payers, using the same recent session price. Trailing column add the recurring cash dividends for the last twelve months. Forward column annualize the latest one, using the payment frequency wey dem file with am.
The exact SQL behind every number
WITH last_px AS (
SELECT ticker,
argMax(close, window_start) AS close_price
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('ABBV', 'CVX', 'JNJ', 'KO', 'MCD', 'MSFT', 'PEP', 'PG')
AND window_start >= now() - INTERVAL 10 DAY
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
),
paid AS (
SELECT ticker,
sum(cash_amount) AS ttm_cash,
count() AS checks_in_window,
argMax(cash_amount, ex_dividend_date) AS latest_cash,
argMax(frequency, ex_dividend_date) AS pay_frequency
FROM global_markets.stocks_dividends
WHERE ticker IN ('ABBV', 'CVX', 'JNJ', 'KO', 'MCD', 'MSFT', 'PEP', 'PG')
AND distribution_type = 'recurring'
AND cash_amount > 0
AND ex_dividend_date > today() - INTERVAL 1 YEAR
AND ex_dividend_date <= today()
GROUP BY ticker
)
SELECT p.ticker AS ticker,
round(toFloat64(d.ttm_cash) / toFloat64(p.close_price) * 100, 2) AS trailing_yield_pct,
round(toFloat64(d.latest_cash) * d.pay_frequency / toFloat64(p.close_price) * 100, 2) AS forward_yield_pct,
round((toFloat64(d.latest_cash) * d.pay_frequency - toFloat64(d.ttm_cash))
/ toFloat64(p.close_price) * 100, 2) AS forward_minus_trailing_pp,
d.checks_in_window AS checks_in_window,
round(toFloat64(p.close_price), 2) AS share_price
FROM last_px AS p
INNER JOIN paid AS d ON p.ticker = d.ticker
ORDER BY forward_minus_trailing_pp DESCRows dey arrange according to the gap between both methods. For top, PEP prints forward yield of 4.24% against trailing yield of 4.12%. For bottom, MSFT prints 0.78% forward against 0.77% trailing. Na the same companies and prices, but na two valid methods.
Checks column na the quieter reason for the difference. Rolling 365-day window no be the same as four quarters. Ex-dividend dates fit shift by some days every year. If the window catch a fifth check, e go raise the trailing figure even when the declared rate no change.
Wetin dividend reset dey do to the two readings
3M reset its quarterly dividend for 2024, together with the separation of its health care business. The 26 month ends below track both conventions from that point, with the declared quarterly payment beside dem.
The exact SQL behind every number
WITH px AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
max(toDate(toTimeZone(window_start, 'America/New_York'))) AS last_day,
argMax(close, window_start) AS close_price
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'MMM'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-06-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, cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'MMM'
AND distribution_type = 'recurring'
AND frequency = 4
AND cash_amount > 0
AND ex_dividend_date >= toDate('2023-05-01')
)
SELECT formatDateTime(px.month_start, '%Y-%m') AS month,
formatDateTimeInJodaSyntax(px.month_start, 'MMM yyyy') AS month_label,
round(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)), 2) AS declared_quarterly_usd,
round(sumIf(toFloat64(dv.cash_amount), dv.ex_dividend_date > px.last_day - INTERVAL 1 YEAR)
/ toFloat64(any(px.close_price)) * 100, 2) AS trailing_yield_pct,
round(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)) * 4
/ toFloat64(any(px.close_price)) * 100, 2) AS forward_yield_pct,
round(abs(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)) * 4
- sumIf(toFloat64(dv.cash_amount), dv.ex_dividend_date > px.last_day - INTERVAL 1 YEAR))
/ toFloat64(any(px.close_price)) * 100, 2) AS gap_abs_pp
FROM px, dv
WHERE dv.ex_dividend_date <= px.last_day
GROUP BY px.month_start, px.last_day
ORDER BY px.month_startFor Jun 2024 the declared payment na $0.7, while three checks for the old rate still dey inside the trailing window. Trailing yield read 5.1%. Forward yield read 2.74%. The two conventions stand 2.36 points apart for one stock, on one day, with the same price under both fractions. A screen wey sort by trailing yield that month rank 3M based on cash wey e don stop to pay at that rate. Neither number wrong; dem answer different questions.
The gap column then close across four quarters as the old checks roll out of the window. By Jul 2026, the readings be 1.71% trailing and 1.77% forward, with 0.06 points between dem. Convergence na the normal state. The wedge only open when the payout change, and dividend increases and cuts cover this across the market, while 3M dividend record track each payment.
Monthly payers, twelve checks and sometimes thirteen
Realty Income dey raise im monthly payment small-small several times for a year. This one dey keep im forward rate slightly above the rate from the previous year. The checks column dey count the payments wey the trailing window really get for each reading.
The exact SQL behind every number
WITH px AS (
SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
max(toDate(toTimeZone(window_start, 'America/New_York'))) AS last_day,
argMax(close, window_start) AS close_price
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'O'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-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, cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'O'
AND distribution_type = 'recurring'
AND frequency = 12
AND cash_amount > 0
AND ex_dividend_date >= toDate('2023-07-01')
)
SELECT formatDateTime(px.month_start, '%Y-%m') AS month,
formatDateTimeInJodaSyntax(px.month_start, 'MMM yyyy') AS month_label,
round(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)), 4) AS declared_monthly_usd,
countIf(dv.ex_dividend_date > px.last_day - INTERVAL 1 YEAR) AS checks_in_window,
round(sumIf(toFloat64(dv.cash_amount), dv.ex_dividend_date > px.last_day - INTERVAL 1 YEAR)
/ toFloat64(any(px.close_price)) * 100, 2) AS trailing_yield_pct,
round(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)) * 12
/ toFloat64(any(px.close_price)) * 100, 2) AS forward_yield_pct,
round(abs(toFloat64(argMax(dv.cash_amount, dv.ex_dividend_date)) * 12
- sumIf(toFloat64(dv.cash_amount), dv.ex_dividend_date > px.last_day - INTERVAL 1 YEAR))
/ toFloat64(any(px.close_price)) * 100, 2) AS gap_abs_pp
FROM px, dv
WHERE dv.ex_dividend_date <= px.last_day
GROUP BY px.month_start, px.last_day
ORDER BY px.month_startFor Aug 2024, the window get 11 payments. E show 4.57% trailing against 5.08% forward. For Jul 2026, e get 13 payments based on declared monthly rate of $0.271. E show 5.49% trailing against 5.09% forward, with 0.4 points between dem. When rolling year catch a thirteenth check, e fit increase the trailing figure by about one-twelfth, even though the dividend itself no change. Monthly dividend stocks dey explain the schedule, while Realty Income's payment record list every check.
How far apart do the conventions run across the market?
One stock na anecdote. The block below run both calculations for every US listed payer wey market value pass $1 billion, grouped by how often each one dey pay.
The exact SQL behind every number
WITH universe AS (
SELECT ticker,
argMax(price, date) AS last_price
FROM global_markets.stocks_ratios
WHERE date = (SELECT max(date) FROM global_markets.stocks_ratios)
AND price >= 5
AND market_cap >= 1000000000
GROUP BY ticker
),
paid AS (
SELECT ticker,
sum(cash_amount) AS ttm_cash,
argMax(cash_amount, ex_dividend_date) AS latest_cash,
argMax(frequency, ex_dividend_date) AS pay_frequency
FROM global_markets.stocks_dividends
WHERE distribution_type = 'recurring'
AND cash_amount > 0
AND frequency IN (1, 2, 4, 12)
AND ex_dividend_date > today() - INTERVAL 1 YEAR
AND ex_dividend_date <= today()
GROUP BY ticker
)
SELECT multiIf(d.pay_frequency = 12, 'monthly',
d.pay_frequency = 4, 'quarterly',
d.pay_frequency = 2, 'semi-annual',
'annual') AS schedule,
count() AS payers,
round(quantileDeterministic(0.5)(toFloat64(d.ttm_cash) / toFloat64(u.last_price) * 100,
cityHash64(u.ticker)), 2) AS median_trailing_pct,
round(quantileDeterministic(0.5)(toFloat64(d.latest_cash) * d.pay_frequency / toFloat64(u.last_price) * 100,
cityHash64(u.ticker)), 2) AS median_forward_pct,
round(quantileDeterministic(0.5)(abs(toFloat64(d.latest_cash) * d.pay_frequency - toFloat64(d.ttm_cash))
/ toFloat64(u.last_price) * 100,
cityHash64(u.ticker)), 3) AS median_gap_pp,
round(quantileDeterministic(0.9)(abs(toFloat64(d.latest_cash) * d.pay_frequency - toFloat64(d.ttm_cash))
/ toFloat64(u.last_price) * 100,
cityHash64(u.ticker)), 3) AS p90_gap_pp,
round(100 * countIf(abs(toFloat64(d.latest_cash) * d.pay_frequency - toFloat64(d.ttm_cash))
/ toFloat64(u.last_price) * 100 >= 0.5) / count(), 1) AS pct_gap_over_half_point
FROM universe AS u
INNER JOIN paid AS d ON u.ticker = d.ticker
GROUP BY schedule
ORDER BY payers DESCThe biggest group na quarterly payers, 1128 names, with median trailing yield of 1.93% compared with median forward yield of 2.03%. For the median, the two conventions dey differ by 0.03 points. The distribution get a tail: 8.7% of that group dey at least half percentage point apart, and the ninetieth percentile gap na 0.357 points. Half point on 3% yield na one-sixth of the number. Na the difference between a screen showing one name and skipping am. The monthly group, 21 names, get median gap of 0.484 points.
For the level, instead of the method, wetin count as good dividend yield puts the market distribution for one place, and wetin dividend yield mean starts from the ratio itself.
Why two screeners quote different dividend yields?
- Na di convention. One provider dey annualize the latest declaration, while another dey add the last twelve months together. Na this disagreement the rest of this page dey explain.
- Na where the window end. Rolling 365 days fit contain four or five payments for quarterly payer, and twelve or thirteen for monthly payer.
- Special dividends. One-time payment go remain inside the trailing window for one year. Some providers dey include am for the numerator, while some dey remove am. A big special dividend fit move the trailing figure far.
- Na the price wey dem use. Yield wey dem calculate with last night closing price go differ from one wey dem calculate at 2pm.
- The company own page. Investor relations sites almost always publish the declared annual rate. Na this be the forward numerator, often compared with price wey no dey live. Fund sheets dey quote 30-day SEC yield or distribution yield. These na two other conventions.
How dem dey build these numbers
Trailing yield for here dey add recurring cash dividends wey get ex-dividend date inside the 365 days ending at each reading, then divide am by the closing price for that session. Forward yield dey multiply the latest recurring payment by the payment frequency filed with am, then divide am by the same price. Dem exclude non-recurring distributions from both. Prices come from regular-session minute bars for New York time. Providers wey include specials, or wey annualize a different payment, go get different figures from the same underlying records.
Trailing vs forward dividend yield FAQ
TTM dividend yield na wetin?
TTM mean trailing twelve months. TTM dividend yield dey add all the dividends wey dem pay for the last year, then divide am by the current share price. E dey measure cash wey don already reach investor, no be rate wey dem expect.
Which one better, trailing or forward dividend yield?
None of dem be the correct one for every situation. Trailing dey measure wetin owner collect for the past year. Forward dey show the current declared rate wey dem annualize. Person wey dey compare income wey don already enter account need the trailing figure. Person wey dey price the rate wey company dey pay now need the forward figure.
Why my broker dey show dividend yield wey different from the company investor page?
Investor relations pages normally publish the declared annual rate. Na the forward numerator be that, and dem often compare am with price wey no dey live. Broker or screener fit dey add the last twelve months instead. Both numbers fit correct arithmetically for the same moment.
Dividend cut go show for trailing yield immediately?
No. Reset go enter the forward figure when the first smaller payment land. E go enter the trailing figure one payment at a time during the next year. For the 3M window above, the two conventions stand 2.36 points apart for Jun 2024 and 0.06 points apart by Jul 2026.
Every figure above na stored query from filed dividend records and real session prices. Open any panel to read the SQL, or run the same two calculations for ticker wey you dey follow on the Strasmore terminal.