Price return e total return: il divario reale
Price return e total return: l’indice S&P 500 esclude i dividendi. Scopri il divario composto su vent’anni e gli usi di ciascuna versione.
Il price return rispetto al total return misura la differenza tra ciò che mostra un grafico di mercato e ciò che ha effettivamente guadagnato chi ha mantenuto la stessa posizione. Il price return considera soltanto la variazione del prezzo. Il total return reintegra ogni dividendo, reinvestendolo al prezzo del titolo nella data ex-dividend. In questo modo ogni pagamento può capitalizzarsi insieme alle azioni che lo hanno generato.
Il livello dell’S&P 500 riportato nelle notizie è un indice di prezzo. Il suo omologo total return detiene le stesse società e reinveste i dividendi. Su un singolo anno i due indici appaiono quasi identici. Su un periodo di vent’anni descrivono risultati molto diversi, e il divario tra loro è maggiore di quanto suggerirebbe il rendimento annuo.
Qual è la differenza tra price return e total return?
Il price return è il prezzo finale diviso per il prezzo iniziale, meno uno. Ogni livello di indice mostrato in televisione e ogni grafico dei prezzi che abbiate mai consultato rappresentano questo valore.
Il total return esegue lo stesso calcolo, utilizzando ogni dividendo in contanti per acquistare ulteriori quote al prezzo della data ex-dividend. Le tabelle sulla performance dei fondi e gli indici benchmark rispetto ai quali questi fondi vengono valutati utilizzano questa versione.
Un esempio ipotetico rende concreti i meccanismi. Si acquista un’azione a 100 dollari che paga 2 dollari all’anno e la si vende un anno dopo a 105 dollari. Il price return è del 5%. Il total return è di circa il 7%. Il primo anno non presenta nulla di particolare. È la capitalizzazione a giustificare una sezione dedicata: i 2 dollari reinvestiti acquistano una frazione di un’altra azione, che a sua volta incassa il proprio dividendo l’anno successivo, e le due serie divergono a un ritmo crescente.
Prima di passare ai dati, è necessaria una precisazione. Un total return swap è un contratto derivato con cui una parte trasferisce all’altra l’intera esposizione economica a un’attività in cambio di un tasso di finanziamento. Condivide il nome, ma non altro, con la convenzione sugli indici descritta di seguito. Il resto di questa pagina riguarda indici e fondi.
Quanto è ampio il divario sull’S&P 500?
10.000 $ investiti nel principale tracker dell’S&P 500 alla fine del 2005 e mantenuti fino al 31 luglio 2026. La prima linea spende ogni dividendo il giorno in cui viene accreditato. La seconda reinveste ogni dividendo al prezzo di chiusura di quella giornata.
L'esatto SQL dietro ogni numero
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 yearLa linea basata esclusivamente sul prezzo termina a $59956. La linea con i dividendi reinvestiti termina a $85775. I dividendi rappresentano 30.1% di quel saldo finale e non compaiono in alcun grafico dei prezzi.
È il margine sinistro del grafico a trarre in inganno. Alla fine di 2007, le due linee si trovavano rispettivamente a $11755 e $11971, mentre i dividendi valevano 1.8% del saldo. Un divario così ridotto nel primo anno può facilmente sembrare un dettaglio di arrotondamento. Vent’anni dello stesso dettaglio di arrotondamento, con ogni effetto che si capitalizza sul precedente, producono lo spread visibile sul margine destro.
Il divario continua ad ampliarsi nel tempo?
Stesso fondo, stessa data finale, cinque diverse date di inizio.
L'esatto SQL dietro ogni numero
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.yearsNell’orizzonte di 1-year, il price return è stato pari a 18.2%, contro un total return di 19.5%: una differenza di 1.3 punti percentuali. L’orizzonte di 10-year separa 244.3% da 304.5%, per un divario di 60.2 punti. Nell’orizzonte di 20-year, i due valori sono 485% e 736.9%: una differenza di 251.9 punti percentuali.
La curva non sale in linea retta. Cresce come il saldo, perché ogni dividendo reinvestito si aggiunge alla base su cui matura il dividendo successivo.
Perché un anno di dividendi sembra irrilevante
Ecco ogni anno solare della stessa finestra, suddiviso tra variazione del prezzo e contributo dei dividendi.
L'esatto SQL dietro ogni numero
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 yearOsserva le due serie insieme. La linea del prezzo è quella più evidente e oscilla bruscamente in entrambe le direzioni. La linea dei dividendi è più discreta: 1.9 punti in 2007, 0.58 punti nell’anno parziale fino a luglio 2026, e non diventa mai il dato principale negli anni intermedi. Nessuna singola riga di quel pannello cambierebbe l’opinione di qualcuno. Sommati e capitalizzati su 20 righe, quegli stessi piccoli numeri rappresentano l’intera distanza tra le due linee nel primo grafico. Reinvestire un dividendo significa anche acquistare automaticamente al prezzo prevalente quel giorno, un meccanismo strettamente affine al piano di acquisto periodico. È per la stessa ragione che il dividend yield dell’S&P 500 appare modesto, pur incidendo molto di più su orizzonti lunghi di quanto la sua entità lasci pensare.
Quali azioni mostrano il divario più ampio?
Il divario segue il rendimento: una società che restituisce di più per ogni dollaro di prezzo offre al titolare una somma maggiore da reinvestire. Sette nomi noti nei dieci anni fino al 31 luglio 2026, annualizzati per rendere comparabili gli orizzonti temporali.
L'esatto SQL dietro ogni numero
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 presenta il divario annuo più ampio tra i 7, pari a 5.46 punti percentuali all’anno: -1.51% annualizzato considerando solo il prezzo, contro 3.96% con i dividendi reinvestiti. MSFT si colloca all’estremo opposto, con un divario di 1.53 punti. Per chi confronta i grafici, ne derivano due considerazioni. Un grafico dei prezzi sottostima molto più un titolo ad alto rendimento rispetto a uno a basso rendimento, e qualsiasi screener che classifichi i nomi in base alla performance del prezzo penalizza implicitamente i titoli che distribuiscono dividendi. Il rendimento da dividendo alla base di ciascuno di questi nomi determina l’ampiezza del divario.
Dove viene utilizzata ciascuna versione
- I benchmark e le schede informative dei fondi riportano il total return. La dicitura “Total Return Index”, il suffisso “TR” o una nota in caratteri piccoli come “net dividends reinvested” indicano tutti che i dividendi sono inclusi.
- I media finanziari e le schermate delle quotazioni utilizzano il price return. “L’S&P 500 ha chiuso in rialzo dello 0,4%” descrive un movimento di prezzo.
- Le schede della performance nei conti di brokeraggio mostrano di norma il total return del conto, perché la liquidità è stata effettivamente accreditata. La colonna relativa al guadagno di una singola posizione spesso mostra la variazione di prezzo rispetto al cost basis, che è un dato diverso.
- I backtest e le analisi delle strategie utilizzano la versione fornita dal data feed dell’autore. È questa l’origine di molti track record silenziosamente gonfiati.
L’incongruenza più importante si verifica quando si confronta il total return di un fondo con un indice price return. Al fondo vengono riconosciuti i propri dividendi, mentre all’indice non viene riconosciuto nulla dei suoi. In questo modo il fondo parte con un vantaggio pari all’intero flusso di dividendi dell’indice. Nella finestra di 20-year indicata sopra, questo errore di misurazione vale 251.9 punti percentuali, e nessuno di questi deriva dal gestore. Il confronto omogeneo mette a confronto total return con total return. Come si misurano i rendimenti mensili ripercorre gli stessi calcoli su base mensile, mentre perdere le giornate migliori mostra cosa accade alla linea dei prezzi quando se ne escludono alcune sedute.
Come vengono calcolati questi numeri
- I prezzi sono le chiusure giornaliere della seduta ordinaria. I dividendi sono distribuzioni cash dichiarate, ciascuna reinvestita al prezzo di chiusura della relativa data ex-dividend. Questa è la convenzione standard per costruire una serie di total return.
- La finestra va da dicembre 2005 al 31 luglio 2026, l’intervallo coperto dalla storia dei prezzi intraday alla base di questi pannelli. Un intervallo più lungo amplierebbe ulteriormente il divario.
- Un fondo che replica l’indice viene utilizzato come proxy dell’indice stesso, quindi commissioni e cash drag sono inclusi in questi dati. Il price return dell’anno solare è misurato dalla prima chiusura dell’anno all’ultima, escludendo così il movimento della prima seduta.
FAQ su rendimento di prezzo e rendimento totale
L’S&P 500 è un indice di prezzo o un indice di rendimento totale?
Il dato principale è un indice di prezzo: misura il valore di mercato dei componenti e non considera i dividendi. Esiste anche una versione dello stesso indice a rendimento totale, che reinveste i dividendi. I benchmark dei fondi usano generalmente la versione a rendimento totale, mentre le notizie riportano di norma la versione di prezzo.
Quanto incidono i dividendi sui rendimenti dell’S&P 500?
Nel periodo di 10-year terminato il 31 luglio 2026, il tracker utilizzato qui ha registrato un rendimento di 244.3% considerando solo il prezzo, contro 304.5% con i dividendi reinvestiti. All’interno di un singolo anno solare, il contributo è molto più contenuto: circa 1.9 punti in 2007.
Il mio conto di intermediazione mostra il rendimento di prezzo o il rendimento totale?
I dividendi in contanti vengono accreditati sul conto, quindi il saldo li include già. La colonna relativa al guadagno della posizione spesso confronta soltanto il prezzo corrente con il cost basis, quindi mostra un rendimento di prezzo. I due valori differiscono esattamente per i dividendi ricevuti, salvo che un piano di reinvestimento non abbia acquistato ulteriori azioni nel frattempo.
Un total return swap è la stessa cosa del rendimento totale?
No. Un total return swap è un contratto derivato bilaterale che scambia l’intera componente economica di un asset con un tasso di finanziamento. Il rendimento totale, nel senso in cui viene usato per gli indici, è una convenzione per misurare la performance. La formulazione comune richiama la stessa idea di prezzo più reddito, ma i due concetti non sono collegati come strumenti.
Perché un fondo sembra migliore quando viene confrontato con un indice di prezzo?
Il dato pubblicato dal fondo include i suoi dividendi, mentre un indice di prezzo esclude i propri. Il confronto attribuisce al fondo un vantaggio iniziale pari al flusso di dividendi del benchmark: 251.9 punti percentuali nel periodo di 20-year indicato sopra.
Ogni dato qui riportato proviene da una query archiviata e versionata, eseguita sulle chiusure giornaliere e sui dividendi dichiarati nei filing. Apri un pannello per leggere il codice SQL oppure esegui lo stesso confronto tra rendimento di prezzo e rendimento totale su un ticker che segui sul terminale Strasmore.