Price return і total return: різниця S&P 500
Price return S&P 500 не враховує дивіденди. Порівнюємо з total return, показуємо ефект реінвестування за двадцять років і сфери застосування.
Різниця між price return і total return показує відмінність між тим, що відображає ринковий графік, і фактичним результатом для інвестора, який утримував ту саму позицію. Price return враховує лише зміну ціни. Total return додає всі дивіденди, реінвестовані за ціною в день ex-dividend, завдяки чому кожна виплата капіталізується разом з акціями, які її забезпечили.
Зазначений у новинах рівень S&P 500 є значенням цінового індексу. Його аналог із повною дохідністю включає ті самі компанії та реінвестує дивіденди. За один рік ці два показники виглядають майже однаково. За двадцять років вони відображають дуже різні результати, а розрив між ними виявляється більшим, ніж можна було б припустити за річною dividend yield.
У чому різниця між price return і total return?
Price return — це кінцева ціна, поділена на початкову ціну, мінус одиниця. Саме це значення показують у котируваннях усіх індексів на телебаченні та на всіх цінових графіках.
Total return розраховується так само, але кожен грошовий дивіденд використовується для купівлі додаткових акцій за ціною на ex-dividend date. У таблицях результатів фондів і бенчмарк-індексах, з якими порівнюють ці фонди, застосовується саме цей показник.
Умовний приклад показує механіку. Інвестор купує акцію за $100. Вона виплачує $2 дивідендів на рік. Через рік інвестор продає її за $105. Price return становить 5%. Total return — приблизно 7%. Перший рік тут не має нічого незвичайного. Відмінність виникає через компаундинг. Реінвестовані $2 купують частину додаткової акції. Ця частина наступного року також приносить дивіденд. Тому два показники розходяться дедалі швидше.
Перед даними важливо уточнити один момент. Total return swap — це деривативний контракт, за яким одна сторона передає іншій повний економічний результат за активом в обмін на фінансову ставку. З наведеною нижче конвенцією для індексів його пов’язує лише назва. Далі на цій сторінці йдеться про індекси та фонди.
Наскільки великою є різниця на S&P 500?
$10 000 у найбільший ETF, що відстежує S&P 500, наприкінці 2005 року, з утриманням до 31 липня 2026 року. У першому варіанті кожен dividend витрачається в день його отримання. У другому — кожен dividend реінвестується за ціною закриття цього дня.
Точний SQL-код для кожного числа
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2005-12-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 d
),
base AS (
SELECT argMax(close, d) AS start_px
FROM daily
WHERE d <= toDate('2005-12-31')
),
year_end AS (
SELECT toYear(d) AS year,
argMax(close, d) AS close,
max(d) AS last_day
FROM daily
WHERE d >= toDate('2006-01-01')
GROUP BY year
),
reinvest AS (
SELECT dv.ex_dividend_date AS d,
log(1 + toFloat64(dv.cash_amount) / dl.close) AS log_growth
FROM global_markets.stocks_dividends AS dv
INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
WHERE dv.ticker = 'SPY'
AND dv.cash_amount > 0
AND dv.ex_dividend_date >= toDate('2006-01-01')
AND dv.ex_dividend_date <= toDate('2026-07-31')
)
SELECT ye.year AS year,
round(10000 * ye.close / any(b.start_px)) AS price_only_usd,
round(10000 * ye.close / any(b.start_px) * exp(sum(ri.log_growth))) AS reinvested_usd,
round(100 * (1 - exp(-sum(ri.log_growth))), 1) AS dividend_share_pct
FROM year_end AS ye, reinvest AS ri, base AS b
WHERE ri.d <= ye.last_day
GROUP BY ye.year, ye.close
ORDER BY yearВаріант без урахування дивідендів завершується на позначці $59956. Варіант із реінвестуванням завершується на позначці $85775. На дивіденди припадає 30.1% кінцевого балансу, і ця частина не відображається на ціновому графіку.
Саме ліва частина графіка часто вводить в оману. Наприкінці 2007 два показники становили $11755 і $11971, а на дивіденди припадало 1.8% балансу. Різницю в перший рік легко сприйняти як похибку округлення. Двадцять років такої самої різниці, кожна з яких капіталізується на основі попередньої, формують розрив у правій частині графіка.
Чи продовжує розрив збільшуватися з часом?
Один і той самий фонд, одна й та сама кінцева дата, п’ять різних початкових дат.
Точний SQL-код для кожного числа
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2006-07-31')
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 d
),
spans AS (
SELECT y AS years,
concat(toString(y), '-year') AS horizon,
subtractYears(toDate('2026-07-31'), y) AS start_date
FROM (SELECT arrayJoin([1, 3, 5, 10, 20]) AS y)
),
divs AS (
SELECT dv.ex_dividend_date AS d,
log(1 + toFloat64(dv.cash_amount) / dl.close) AS log_growth
FROM global_markets.stocks_dividends AS dv
INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
WHERE dv.ticker = 'SPY'
AND dv.cash_amount > 0
AND dv.ex_dividend_date <= toDate('2026-07-31')
),
endpoints AS (
SELECT s.horizon AS horizon,
s.years AS years,
argMin(dl.close, dl.d) AS start_px,
argMax(dl.close, dl.d) AS end_px
FROM spans AS s, daily AS dl
WHERE dl.d >= s.start_date
GROUP BY s.horizon, s.years
),
reinvest AS (
SELECT s.years AS years,
exp(sum(dvs.log_growth)) AS factor
FROM spans AS s, divs AS dvs
WHERE dvs.d > s.start_date
GROUP BY s.years
)
SELECT e.horizon AS horizon,
round(100 * (e.end_px / e.start_px - 1), 1) AS price_return_pct,
round(100 * (e.end_px / e.start_px * r.factor - 1), 1) AS total_return_pct,
round(100 * (e.end_px / e.start_px) * (r.factor - 1), 1) AS dividend_points_pct
FROM endpoints AS e
INNER JOIN reinvest AS r ON e.years = r.years
ORDER BY e.yearsЗа період 1-year price return становив 18.2%, тоді як total return — 19.5%. Різниця дорівнювала 1.3 процентного пункта. За період 10-year показники становили 244.3% і 304.5% відповідно. Різниця — 60.2 процентних пункта. За період 20-year ці два показники дорівнювали 485% і 736.9%. Різниця становила 251.9 процентного пункта.
Крива не зростає по прямій. Вона піднімається так само, як збільшується баланс: кожен реінвестований дивіденд додається до бази, на яку нараховується наступний.
Чому дивіденди за один рік здаються незначними
Нижче наведено кожен календарний рік за той самий період із розподілом на зміну ціни та внесок дивідендів.
Точний SQL-код для кожного числа
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2006-01-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 d
),
yearly AS (
SELECT toYear(d) AS year,
argMin(close, d) AS first_px,
argMax(close, d) AS last_px
FROM daily
GROUP BY year
),
divs AS (
SELECT toYear(dv.ex_dividend_date) AS year,
exp(sum(log(1 + toFloat64(dv.cash_amount) / dl.close))) AS factor
FROM global_markets.stocks_dividends AS dv
INNER JOIN daily AS dl ON dl.d = dv.ex_dividend_date
WHERE dv.ticker = 'SPY'
AND dv.cash_amount > 0
GROUP BY year
)
SELECT y.year AS year,
round(100 * (y.last_px / y.first_px - 1), 1) AS price_return_pct,
round(100 * (y.last_px / y.first_px) * (d.factor - 1), 2) AS dividend_points_pct
FROM yearly AS y
INNER JOIN divs AS d ON y.year = d.year
ORDER BY yearРозглядайте обидва ряди разом. Цінова лінія є більш помітною: вона різко рухається в обох напрямках. Дивідендна лінія тихіша: 1.9 пунктів у 2007, 0.58 пунктів за неповний рік до липня 2026 і в проміжні періоди вона ніколи не була головним чинником. Жоден окремий рядок цієї панелі не змінив би чиєїсь думки про що-небудь. Але якщо накопичити та врахувати складний ефект за 20 рядками, ті самі невеликі значення формують усю відстань між двома лініями на першому графіку. Реінвестування дивідендів також означає автоматичну купівлю за ціною, яка діє того дня, і є близьким аналогом усереднення вартості інвестицій. З тієї самої причини дивідендна дохідність S&P 500 має помірне значення, але на довгих періодах відіграє набагато важливішу роль, ніж можна припустити за її розміром.
У яких акцій найбільший розрив?
Розрив відповідає дохідності: компанія, яка повертає інвестору більше на кожен долар ціни, дає власнику більше коштів для реінвестування. Нижче наведено сім відомих назв за десять років до 31 липня 2026 року. Показники перераховано в річному вимірі, щоб періоди можна було порівнювати.
Точний SQL-код для кожного числа
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'JNJ', 'XOM', 'PG', 'VZ', 'MSFT')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-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 ticker, d
),
px AS (
SELECT ticker,
argMin(close, d) AS start_px,
argMax(close, d) AS end_px
FROM daily
GROUP BY ticker
),
divs AS (
SELECT dv.ticker AS ticker,
exp(sum(log(1 + toFloat64(dv.cash_amount) / dl.close))) AS factor
FROM global_markets.stocks_dividends AS dv
INNER JOIN daily AS dl ON dl.ticker = dv.ticker AND dl.d = dv.ex_dividend_date
WHERE dv.ticker IN ('SPY', 'KO', 'JNJ', 'XOM', 'PG', 'VZ', 'MSFT')
AND dv.cash_amount > 0
AND dv.ex_dividend_date >= toDate('2016-08-01')
AND dv.ex_dividend_date <= toDate('2026-07-31')
GROUP BY dv.ticker
)
SELECT px.ticker AS ticker,
round(100 * (pow(px.end_px / px.start_px, 0.1) - 1), 2) AS price_cagr_pct,
round(100 * (pow(px.end_px / px.start_px * divs.factor, 0.1) - 1), 2) AS total_cagr_pct,
round(100 * (pow(px.end_px / px.start_px * divs.factor, 0.1)
- pow(px.end_px / px.start_px, 0.1)), 2) AS dividend_points_pct
FROM px
INNER JOIN divs ON px.ticker = divs.ticker
ORDER BY dividend_points_pct DESCVZ має найбільший середньорічний розрив серед 7 — 5.46 процентного пункту на рік: -1.51% у річному вимірі лише за ціною проти 3.96% з реінвестуванням дивідендів. MSFT перебуває на протилежному кінці діапазону — 1.53 пунктів. Для тих, хто порівнює графіки, це має два наслідки. Ціновий графік значно сильніше занижує результат акцій із високою виплатою, ніж акцій із низькою. А будь-який скринер, який ранжує назви за динамікою ціни, фактично знижує позиції платників дивідендів. Саме дивідендна дохідність, що стоїть за кожною з цих назв, визначає розмір розриву.
Де використовується кожна версія
- У бенчмарках і документах із ключовими характеристиками фондів наводять total return. Позначення «Total Return Index», суфікс «TR» або примітка «net dividends reinvested» у дрібному шрифті означають, що дивіденди враховано.
- Фінансові медіа та котирувальні екрани використовують price return. Фраза «S&P 500 завершив сесію зростанням на 0,4%» описує зміну ціни.
- Вкладки брокерських платформ із показниками ефективності рахунку зазвичай відображають total return, оскільки дивіденди фактично надійшли на рахунок. Водночас колонка з прибутком за окремою позицією часто показує зміну ціни відносно cost basis, а це не той самий показник.
- У backtests і матеріалах про стратегії використовують ту версію, яку надало джерело даних автора. Саме це часто стає причиною непомітно завищених результатів.
Ключова проблема виникає, коли total return фонду порівнюють із price index. Фонд отримує зарахування за власними дивідендами, тоді як бенчмарку його дивіденди не враховують. У результаті фонд отримує фору, що дорівнює всьому потоку дивідендів індексу. За період 20-year, наведений вище, ця помилка в оцінці становить 251.9 процентного пункту, і жоден із них не є результатом роботи керуючого. Коректне порівняння зіставляє total return із total return. У матеріалі Як вимірюють місячну дохідність та сама арифметика розглядається на місячному рівні, а як пропуск найкращих днів показує, що відбувається з ціновою динамікою, коли з неї вилучають результати кількох торгових сесій.
Як розраховано ці показники
- Ціни — це щоденні ціни закриття регулярної торгової сесії. Дивіденди — це заявлені грошові distributions, кожна з яких реінвестується за ціною закриття в її ex-dividend date. Це стандартна методика побудови ряду total return.
- Період охоплює час від грудня 2005 року до 31 липня 2026 року — саме цей проміжок представлено в історії внутрішньоденних цін, що лежить в основі цих панелей. Довший період збільшить розрив.
- Фонд, що відстежує індекс, використовується як заміна самого індексу, тому комісії та cash drag уже враховані в цих показниках. Calendar-year price return вимірюється від першої ціни закриття року до останньої, тому рух під час першої сесії не враховується.
FAQ про дохідність за ціною та загальну дохідність
S&P 500 — це ціновий індекс чи індекс загальної дохідності?
Основний показник є ціновим індексом: він відстежує ринкову вартість компонентів і не враховує їхні дивіденди. Існує також версія цього індексу із загальною дохідністю, у якій дивіденди реінвестуються. Фондові бенчмарки зазвичай використовують версію із загальною дохідністю, тоді як у новинах зазвичай наводять значення цінової версії.
Наскільки дивіденди збільшують дохідність S&P 500?
За період у 10-year, що завершився 31 липня 2026 року, представлений тут трекер показав дохідність 244.3% за ціною проти 304.5% з реінвестуванням дивідендів. У межах одного календарного року внесок набагато менший — близько 1.9 пунктів у 2007.
Мій брокерський рахунок показує дохідність за ціною чи загальну дохідність?
Грошові дивіденди надходять на рахунок, тому його баланс уже враховує їх. Колонка з прибутком за позицією часто порівнює лише поточну ціну з вашим cost basis, тобто показує дохідність за ціною. Ці два показники відрізняються рівно на суму отриманих дивідендів, якщо тільки за програмою реінвестування на них не купувалися додаткові акції.
Total return swap — це те саме, що загальна дохідність?
Ні. Total return swap — це двосторонній деривативний контракт, за яким повна економічна віддача від активу обмінюється на ставку фінансування. Загальна дохідність у контексті індексу є способом розрахунку результативності. Спільне формулювання вказує на одну базову ідею — ціна плюс дохід, — але ці поняття не пов’язані між собою як інструменти.
Чому фонд виглядає краще в порівнянні з ціновим індексом?
Опублікований показник фонду включає його дивіденди, тоді як ціновий індекс не враховує власні дивіденди. У результаті фонд отримує перевагу на старті, що дорівнює дивідендному потоку бенчмарку — 251.9 процентного пункту за наведений вище період у 20-year.
Кожен показник тут отримано зі збереженого запиту з версіями, який використовує денні ціни закриття та дані про оголошені дивіденди. Відкрийте будь-яку панель, щоб переглянути SQL, або виконайте таке саме порівняння дохідності за ціною та загальної дохідності для тикера, за яким ви стежите, у терміналі Strasmore.