Price ReturnとTotal Returnの違いと複利差
S&P 500の見出し指数は配当を含みません。Price returnとtotal returnの違いを、二十年間の複利差と用途から解説します。
Price returnとtotal returnの違いは、市場チャートが示す内容と、同じポジションを保有した投資家が実際に得た収益の違いです。Price returnは価格の変化だけを計測します。Total returnは、すべての配当を権利落ち日の価格で再投資したものとして加算します。これにより、各配当は、それを生み出した株式とともに複利で積み上がります。
ニュースで報じられるS&P 500の見出し水準は、価格指数です。そのtotal return版は同じ企業を組み入れ、配当を再投資します。一年だけで見れば、両者はほぼ同じに見えます。しかし二十年では、示す結果は大きく異なります。その差は、年間利回りから想定される以上に広がります。
価格リターンとトータルリターンの違いとは
価格リターンとは、期末価格を期初価格で割り、そこから一を引いたものです。テレビで表示されるすべての指数水準や、これまでに見てきたすべての価格チャートが示しているのは、この数値です。
トータルリターンでは、同じ計算に加えて、各現金配当を権利落ち日の価格で追加の株式購入に充てます。ファンドの運用実績表や、ファンドの比較対象となるベンチマーク指数には、この方式が使われます。
仮定の例で仕組みを確認できます。年間二ドルの配当を支払う株式を一株、一〇〇ドルで購入し、一年後に一〇五ドルで売却するとします。価格リターンは五%です。トータルリターンはおよそ七%になります。初年度の差は目立ちません。違いを大きくするのは複利効果です。再投資した二ドルで株式の一部を購入し、その一部も翌年に配当を生みます。こうして、二つの数値は加速度的に乖離していきます。
データを見る前に、用語を一つ区別しておきます。トータルリターンスワップは、一方の当事者が資産の経済的な収益をすべて相手に渡し、その対価として融資金利を受け取るデリバティブ契約です。以下で説明する指数の算定方法とは、名称が共通するだけで、それ以外に共通点はありません。このページでは、引き続き指数とファンドを扱います。
S&P 500の差はどれほど大きいのか?
2005年末に最大のS&P 500連動商品へ10,000ドルを投資し、2026年7月31日まで保有した場合。1本目の線は、配当を受け取るたびにその日に使い切る。2本目は、各配当をその日の終値で再投資する。
| 年 | 価格のみ($) | 再投資($) | 配当比率(%) |
|---|---|---|---|
| 2007 | 11755 | 11971 | 1.8 |
| 2008 | 7247 | 7556 | 4.1 |
| 2009 | 8947 | 9545 | 6.3 |
| 2010 | 10100 | 10986 | 8.1 |
| 2011 | 10083 | 11197 | 10 |
| 2012 | 11437 | 12983 | 11.9 |
| 2013 | 14816 | 17158 | 13.7 |
| 2014 | 16500 | 19482 | 15.3 |
| 2015 | 16372 | 19733 | 17 |
| 2016 | 17947 | 22096 | 18.8 |
| 2017 | 21426 | 26891 | 20.3 |
| 2018 | 20080 | 25684 | 21.8 |
| 2019 | 25842 | 33679 | 23.3 |
| 2020 | 30014 | 39860 | 24.7 |
| 2021 | 38125 | 51313 | 25.7 |
| 2022 | 30703 | 41997 | 26.9 |
| 2023 | 38162 | 52999 | 28 |
| 2024 | 47046 | 66175 | 28.9 |
| 2025 | 54740 | 77898 | 29.7 |
| 2026 | 59956 | 85775 | 30.1 |
各数値の背後にある正確な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末時点で、2本の線はそれぞれ$11755と$11971に位置し、配当は残高の1.8%に相当した。1年目の差は小さく、単なる丸め誤差として簡単に片付けられる。だが、同じ小さな差が20年間続き、そのたびに前回の差へ複利で積み上がることで、右端の開きが生じる。
時間がたつほど差は拡大するのか
同じファンド、同じ終了日で、開始日だけを5通りに変えています。
| 期間 | 価格リターン(%) | トータルリターン(%) | 配当寄与(%ポイント) |
|---|---|---|---|
| 1-year | 18.2 | 19.5 | 1.3 |
| 3-year | 63.1 | 69.3 | 6.2 |
| 5-year | 70.7 | 82.6 | 12 |
| 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-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.years1-yearの期間では、価格リターンが18.2%、トータルリターンが19.5%で、差は1.3ポイントでした。10-yearの期間では、244.3%と304.5%の差が60.2ポイントあります。20-yearの期間では、両者は485%と736.9%で、差は251.9ポイントです。
この曲線は直線的には上昇しません。複利で増える残高と同じ動きをします。再投資された配当が元本に加わり、次の配当がその元本を基に複利で増えるためです。
Why one year of dividends looks trivial
Here is every calendar year of the same window, split into the price move and the dividend contribution.
| 年 | 価格リターン(%) | 配当寄与(%ポイント) |
|---|---|---|
| 2007 | 3.5 | 1.9 |
| 2008 | -37.6 | 1.49 |
| 2009 | 19.9 | 2.79 |
| 2010 | 11 | 2.18 |
| 2011 | -1.1 | 2.07 |
| 2012 | 11.7 | 2.48 |
| 2013 | 26.3 | 2.55 |
| 2014 | 12.3 | 2.19 |
| 2015 | -0.7 | 2.07 |
| 2016 | 11.2 | 2.39 |
| 2017 | 18.5 | 2.3 |
| 2018 | -6.9 | 1.78 |
| 2019 | 28.6 | 2.43 |
| 2020 | 15.1 | 2.19 |
| 2021 | 28.7 | 1.73 |
| 2022 | -20 | 1.3 |
| 2023 | 24.8 | 1.91 |
| 2024 | 24 | 1.59 |
| 2025 | 16.6 | 1.37 |
| 2026 | 9.3 | 0.58 |
各数値の背後にある正確な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 yearRead the two series together. The price line is the loud one, swinging hard in both directions. The dividend line is the quiet one: 1.9 points in 2007, 0.58 points in the partial year to July 2026, and never the headline in between. No single row of that panel would change anyone's mind about anything. Stacked and compounded across 20 rows, those same small numbers are the entire distance between the two lines in the first chart. Reinvesting a dividend is also automatic buying at whatever price prevails that day, a close cousin of dollar cost averaging. It is the same reason the S&P 500 dividend yield reads as a modest number while mattering far more over long windows than its size suggests.
最も乖離幅が大きい銘柄はどれか
乖離幅は利回りに連動する。価格1ドル当たりの還元額が大きい企業ほど、保有者が再投資に回せる金額も多くなる。比較可能にするため、2026年7月31日までの10年間について、よく知られた7銘柄を年率換算した。
| ティッカー | 価格CAGR(%) | トータルCAGR(%) | 配当寄与(%ポイント) |
|---|---|---|---|
| VZ | -1.51 | 3.96 | 5.46 |
| XOM | 6.11 | 10.82 | 4.71 |
| KO | 7.26 | 10.66 | 3.4 |
| JNJ | 7.42 | 10.39 | 2.98 |
| PG | 5.28 | 8.19 | 2.91 |
| SPY | 13.16 | 15 | 1.84 |
| MSFT | 23.45 | 24.98 | 1.53 |
各数値の背後にある正確な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 Index」、「TR」のサフィックス、または細則にある「配当を再投資したネットリターン」という注記は、いずれも配当を含むことを示します。
- 金融メディアや株価画面では、プライスリターンが使われます。「S&P 500は0.4%高で引けた」という表現は、価格の変動を示しています。
- 証券会社のパフォーマンス画面では、口座全体について通常、トータルリターンが表示されます。実際に現金が口座へ入金されるためです。一方、個別ポジションの損益欄では、取得原価に対する価格変化が表示されることが多く、同じ数値ではありません。
- バックテストや戦略の解説では、執筆者が利用したデータフィードに応じて、いずれかのバージョンが使われます。ひそかに水増しされた運用実績の多くは、これが原因です。
重要なのは、ファンドのトータルリターンをプライスインデックスと並べて比較する場合です。ファンドには自身の配当が加算される一方、ベンチマークには自身の配当が一切加算されません。その結果、ファンドは指数の配当総額に相当する分だけ、最初から有利になります。上記の20-yearの期間では、この比較ミスによる差は251.9パーセントポイントに達します。そのどれも運用者の貢献ではありません。比較条件をそろえるには、トータルリターン同士を比較します。月次リターンの測定方法では、同じ計算を月次ベースで説明しています。また、最良の日を逃すでは、少数のセッションを除いた場合に価格推移がどう変わるかを示しています。
これらの数値の算出方法
- 株価は、通常取引時間の終値を日次で使用しています。配当は、届け出済みの現金配当を使用し、それぞれ権利落ち日にその終値で再投資しています。これはトータルリターン系列を作成する標準的な方法です。
- 期間は2005年12月から2026年7月31日までです。これらのパネルの基礎となる日中価格履歴がカバーする範囲です。より長い期間では差がさらに広がります。
- 指数に連動するファンドを指数そのものの代用としています。そのため、手数料と現金保有による収益押し下げが数値に含まれます。暦年のプライスリターンは、その年の最初の終値から最後の終値までで測定しているため、初回セッションの値動きは除外されます。
価格リターンとトータルリターンに関するFAQ
S&P 500は価格指数ですか、それともトータルリターン指数ですか?
見出しで示される数値は価格指数です。構成銘柄の市場価値を追跡し、配当は考慮しません。同じ指数には、配当を再投資するトータルリターン版もあります。ファンドのベンチマークは通常、トータルリターン版を使います。一方、ニュース報道では通常、価格指数版が引用されます。
配当はS&P 500のリターンをどの程度押し上げますか?
ここで使用したトラッカーでは、2026年7月31日までの10-yearの期間に、価格リターンは244.3%でした。配当を再投資した場合は304.5%でした。単一の暦年では寄与ははるかに小さく、2007のうち約1.9ポイントです。
証券口座には価格リターンとトータルリターンのどちらが表示されますか?
現金配当は口座に入金されるため、口座残高自体にはすでに反映されています。一方、保有ポジションの損益欄は、現在の価格とコストベースだけを比較している場合が多く、これは価格リターンです。再投資プランによって途中で追加購入していない限り、両者の差は受け取った配当額と一致します。
トータルリターンスワップはトータルリターンと同じものですか?
いいえ。トータルリターンスワップは、資産から生じる経済的価値の全体とファイナンス金利を交換する、相対のデリバティブ契約です。指数におけるトータルリターンは、パフォーマンスの算定方法です。共通する表現は価格とインカムを合わせた同じ考え方を示しますが、金融商品としては別物です。
価格指数と比較すると、なぜファンドの成績がよく見えるのですか?
ファンドの公表値には配当が含まれますが、価格指数には配当が含まれません。この比較では、ベンチマークの配当の流れに相当する251.9ポイントを、20-yearの期間にわたってファンドに先に与えることになります。
ここに示したすべての数値は、日次終値と提出済みの配当記録を基にした、保存・バージョン管理済みのクエリから取得しています。各パネルを開くとSQLを確認できます。Strasmore terminalで、フォローしている銘柄について同じ価格リターンとトータルリターンの比較を実行することもできます。