価格リターンとトータルリターンの違いとは
S&P 500の価格指数は配当を含みません。価格リターンとトータルリターンの複利差を二十年で比較し、それぞれの用途を解説します。
価格リターンとトータルリターンの違いは、市場チャートが示すものと、同じポジションを保有した投資家が実際に得た収益の違いです。価格リターンは価格の変化だけを捉えます。トータルリターンは、すべての配当を権利落ち日の価格で再投資したものとして加算します。これにより、各配当金は、それを生み出した株式とともに複利で運用されます。
ニュースで報じられるS&P 500の水準は、価格指数です。これに対応するトータルリターン指数は同じ企業を組み入れ、配当を再投資します。一年だけで見ると、両者はほぼ同じに見えます。二十年では、示す結果は大きく異なります。両者の差は、年間利回りから想定される水準を上回ります。
価格リターンとトータルリターンの違いとは
価格リターンは、期末価格を期初価格で割り、そこから一を引いた値です。テレビで表示されるすべての指数水準や、これまでに見てきたすべての株価チャートは、この数値を示しています。
トータルリターンは、各現金配当を権利落ち日の価格で追加の株式購入に充てたものとして、同じ計算を行います。ファンドの運用成績表や、ファンドが運用成果を比較するベンチマーク指数では、この方式が使われます。
具体例で考えてみます。年間2ドルの配当を支払う株式を100ドルで一株購入し、一年後に105ドルで売却したとします。価格リターンは5%です。トータルリターンはおよそ7%になります。初年度の差は目立ちません。重要なのは複利効果です。再投資した2ドルで株式の一部を追加購入でき、その持分も翌年に配当を生みます。このため、両者の差は次第に拡大し、その速度も上がります。
データを見る前に、一点整理しておきます。トータルリターンスワップは、一方の当事者が資産の経済的効果をすべて相手方に移転し、その対価として金融コストを受け取るデリバティブ契約です。以下で説明する指数の計算方法とは、名称が共通しているだけで、それ以外の共通点はありません。このページでは引き続き、指数とファンドを扱います。
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%を占めていた。初年度のこの程度の差は、単なる丸め誤差として片付けられやすい。同じ小さな差が20年間積み重なり、その都度、前回の差を基に複利で拡大すると、右端に見られる開きになる。
時間がたつほど差は広がるのか?
同じファンド、同じ終了日で、開始日だけを五通りに変えています。
| 期間 | 価格リターン(%) | トータルリターン(%) | 配当寄与(%) |
|---|---|---|---|
| 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パーセントポイントでした。
この曲線は直線的には上昇しません。残高と同じように上昇します。再投資された配当が元本に加わり、次の配当がその元本を基に複利で増えるためです。
1年分の配当が取るに足らないように見える理由
同じ期間について、各暦年の数値を価格変動と配当寄与に分けて示しています。
| 年 | 価格リターン(%) | 配当寄与(%) |
|---|---|---|
| 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 year二つの系列を合わせて確認してください。価格の系列は値動きが大きく、上下に激しく振れます。配当の系列は目立ちません。1.9ポイントを2007年に、0.58ポイントを7月までの部分期間である2026年に示し、その間の各年では主役になっていません。このパネルのどの行を単独で見ても、見方が変わるほどの材料にはならないでしょう。しかし、20行にわたって積み上げ、複利で運用すると、こうした小さな数値の積み重ねが、最初のチャートにある二つの線の距離をすべて生み出します。配当の再投資は、その日の価格で自動的に買い付けることでもあり、ドルコスト平均法に近い仕組みです。S&P 500の配当利回りが控えめな数値でありながら、数値の印象以上に長期では大きな意味を持つのも同じ理由です。
乖離幅が最も大きい銘柄はどれか
この乖離幅は利回りに連動します。価格一ドル当たりの還元額が大きい企業ほど、保有者が再投資できる金額も大きくなります。対象は、2026年7月31日までの十年間について年率換算した、知名度の高い七銘柄です。これにより、比較する期間をそろえています。
| ティッカー | 価格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%でした。暦年一期間内の寄与ははるかに小さく、1.9ポイント前後の2007です。
証券口座には価格リターンとトータルリターンのどちらが表示されますか?
現金配当は口座に入金されるため、口座残高にはすでに反映されています。一方、ポジションの損益欄は、現在価格とコストベースだけを比較していることが多く、これは価格リターンです。再投資プランによって途中で追加購入していない限り、両者の差は受け取った配当金と一致します。
トータルリターンスワップはトータルリターンと同じものですか?
いいえ。トータルリターンスワップは、資産から生じる経済的価値の全体と調達金利を交換する、相対契約のデリバティブです。指数におけるトータルリターンは、パフォーマンスを表す方法です。共通する表現は、価格とインカムを合わせた同じ考え方を示しますが、両者は金融商品として無関係です。
価格指数と比較すると、なぜファンドの成績が良く見えるのですか?
ファンドが公表する数値には配当が含まれますが、価格指数には配当が含まれません。この比較では、ベンチマークの配当の流れに相当する251.9ポイントを、20-yearの期間にわたってファンドに先に与えることになります。
ここに示す数値はすべて、日次終値と提出済みの配当記録を用いた、保存・バージョン管理済みのクエリから取得しています。各パネルを開くとSQLを確認できます。また、Strasmoreターミナルでフォローしている銘柄について、同じ価格リターンとトータルリターンの比較を実行できます。