Strasmore Research
Học tập Matt ConnorBởi Matt Connor

Price Return và Total Return: Khoảng Cách Thực

Price return chỉ tính biến động giá, còn total return gồm cả cổ tức tái đầu tư. Xem khoảng cách kép qua hai mươi năm và cách dùng từng phiên bản.

Lợi nhuận theo giá (price return) và tổng lợi nhuận (total return) khác nhau ở chỗ một bên phản ánh những gì biểu đồ thị trường hiển thị, còn bên kia phản ánh số tiền nhà đầu tư thực sự kiếm được khi nắm giữ cùng một vị thế. Lợi nhuận theo giá chỉ tính mức thay đổi của giá. Tổng lợi nhuận cộng lại toàn bộ cổ tức, với giả định cổ tức được tái đầu tư tại mức giá vào ngày giao dịch không hưởng quyền (ex-dividend date). Nhờ đó, mỗi khoản chi trả tiếp tục tích lũy cùng số cổ phiếu đã tạo ra khoản chi trả đó.

Mức S&P 500 thường được đưa tin là một chỉ số giá. Phiên bản tổng lợi nhuận của chỉ số này nắm giữ cùng các công ty và tái đầu tư cổ tức. Trong một năm, hai chỉ số gần như giống nhau. Trong hai mươi năm, chúng cho thấy những kết quả rất khác biệt. Khoảng cách giữa hai chỉ số cũng lớn hơn mức yield hằng năm có thể gợi ý.

Đâu là khác biệt giữa price return và total return?

Price return là giá cuối kỳ chia cho giá đầu kỳ, rồi trừ đi một. Mọi mức chỉ số được công bố trên truyền hình và mọi biểu đồ giá bạn từng xem đều thể hiện chỉ số này.

Total return thực hiện phép tính tương tự, nhưng giả định mỗi khoản cổ tức tiền mặt được dùng để mua thêm cổ phiếu tại mức giá vào ngày giao dịch không hưởng quyền (ex-dividend date). Các bảng hiệu quả của quỹ và các chỉ số benchmark mà quỹ dùng để so sánh đều áp dụng cách tính này.

Một ví dụ giả định giúp làm rõ cơ chế. Bạn mua một cổ phiếu với giá $100, cổ phiếu trả cổ tức $2 mỗi năm, rồi bán sau một năm với giá $105. Price return là 5%. Total return xấp xỉ 7%. Năm đầu tiên không có gì đặc biệt. Lãi kép mới là lý do hai cách tính này cần được phân biệt: khoản $2 được tái đầu tư sẽ mua thêm một phần cổ phiếu, phần cổ phiếu đó tiếp tục nhận cổ tức vào năm sau, và hai chuỗi kết quả sẽ tách xa nhau với tốc độ ngày càng tăng.

Cần làm rõ một điểm trước khi xem dữ liệu. Total return swap là một hợp đồng phái sinh, trong đó một bên chuyển toàn bộ hiệu quả kinh tế của một tài sản cho bên kia để đổi lấy một mức lãi suất tài trợ. Công cụ này chỉ có tên gọi giống với quy ước chỉ số được nêu dưới đây, không có điểm chung nào khác. Phần còn lại của trang này chỉ đề cập đến các chỉ số và quỹ.

Khoảng cách trên S&P 500 lớn đến mức nào?

10.000 USD đầu tư vào quỹ theo dõi S&P 500 lớn nhất vào cuối năm 2005 và được nắm giữ đến ngày 31/7/2026. Dòng thứ nhất chi toàn bộ cổ tức ngay khi nhận được. Dòng thứ hai tái đầu tư từng khoản cổ tức theo giá đóng cửa của ngày nhận.

Truy vấn10.000 USD vào ETF theo dõi S&P 500: chỉ giá so với tái đầu tư cổ tức, cuối năm 2006 đến tháng 7/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Dòng chỉ tính giá kết thúc ở mức $59956. Dòng tái đầu tư kết thúc ở mức $85775. Cổ tức chiếm 30.1% số dư cuối kỳ, nhưng không khoản nào trong đó xuất hiện trên biểu đồ giá.

Điểm đầu bên trái của biểu đồ là nơi nhiều người dễ bỏ sót. Cuối 2007, hai dòng lần lượt ở mức $11755 và $11971, trong đó cổ tức chiếm 1.8% số dư. Khoảng cách trong năm đầu nhỏ đến mức dễ bị xem là chi tiết do làm tròn. Sau hai mươi năm, cùng một chi tiết làm tròn như vậy tiếp tục được cộng gộp trên nền kết quả trước đó, tạo ra spread ở điểm cuối bên phải.

Khoảng cách có tiếp tục nới rộng theo thời gian không?

Cùng một quỹ, cùng ngày kết thúc, nhưng năm ngày bắt đầu khác nhau.

Truy vấnPrice return so với total return theo thời gian nắm giữ: ETF theo dõi S&P 500, kết thúc ngày 31/7/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Trong giai đoạn 1-year, price return đạt 18.2%, so với total return là 19.5%, chênh lệch 1.3 điểm phần trăm. Giai đoạn 10-year cho thấy 244.3% so với 304.5%, tương đương 60.2 điểm. Trong giai đoạn 20-year, hai chỉ số lần lượt là 485% và 736.9%, chênh lệch 251.9 điểm phần trăm.

Đường cong không tăng theo đường thẳng. Nó tăng giống như số dư tài khoản, vì mỗi khoản cổ tức được tái đầu tư sẽ bổ sung vào cơ sở để khoản tiếp theo tiếp tục tăng trưởng kép.

Vì sao cổ tức trong một năm trông không đáng kể

Dưới đây là từng năm dương lịch trong cùng khoảng thời gian, được tách thành biến động giá và phần đóng góp của cổ tức.

Truy vấnETF theo dõi S&P 500 theo năm dương lịch: price return so với số điểm cộng thêm từ tái đầu tư cổ tức
Câu lệnh SQL chính xác đằng sau mỗi con số
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
Run this yourself

Hãy đọc hai chuỗi dữ liệu này cùng nhau. Đường giá là phần nổi bật, dao động mạnh theo cả hai hướng. Đường cổ tức trầm lắng hơn: 1.9 điểm trong 2007, 0.58 điểm trong năm chưa trọn đến tháng Bảy 2026, và không có năm nào ở giữa trở thành điểm nhấn. Không một dòng riêng lẻ nào trong biểu đồ đó đủ sức thay đổi quan điểm của nhà đầu tư. Nhưng khi được cộng dồn và tái đầu tư qua 20 dòng, những con số nhỏ đó tạo nên toàn bộ khoảng cách giữa hai đường trong biểu đồ đầu tiên. Tái đầu tư cổ tức cũng đồng nghĩa với việc tự động mua thêm ở bất kỳ mức giá nào tại thời điểm đó, gần giống với bình quân giá vốn. Đây cũng là lý do lợi suất cổ tức của S&P 500 trông khá khiêm tốn nhưng lại có ý nghĩa lớn hơn nhiều trong các khoảng thời gian dài so với mức tỷ lệ thể hiện ban đầu.

Những cổ phiếu nào có khoảng chênh lớn nhất?

Khoảng chênh biến động theo yield: công ty hoàn trả nhiều hơn trên mỗi đô la giá cổ phiếu sẽ mang lại cho người nắm giữ nhiều tiền hơn để tái đầu tư. Bảy cái tên quen thuộc trong mười năm tính đến ngày 31 tháng 7 năm 2026, với kết quả được quy đổi theo năm để các khoảng thời gian có thể so sánh được.

Truy vấnPrice return thường niên so với total return trong 10 năm: bảy tên tuổi quen thuộc, đến ngày 31/7/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESC
Run this yourself

VZ có khoảng chênh hằng năm lớn nhất trong số 7, ở mức 5.46 điểm phần trăm mỗi năm: -1.51% quy đổi theo năm nếu chỉ xét giá, so với 3.96% khi tái đầu tư cổ tức. MSFT nằm ở đầu có khoảng chênh hẹp nhất, ở mức 1.53 điểm. Điều này dẫn đến hai hệ quả khi so sánh các biểu đồ. Biểu đồ giá đánh giá thấp một cổ phiếu có mức chi trả cao nhiều hơn so với một cổ phiếu có mức chi trả thấp. Ngoài ra, mọi công cụ sàng lọc xếp hạng các mã theo hiệu suất giá đều âm thầm hạ thứ hạng của các cổ phiếu chi trả cổ tức. Mức cổ tức của từng mã là yếu tố quyết định quy mô khoảng chênh này.

Mỗi phiên bản được sử dụng ở đâu

  • Các chỉ số tham chiếu và tài liệu thông tin quỹ thường ghi nhận total return. Cụm “Total Return Index”, hậu tố “TR” hoặc ghi chú “net dividends reinvested” trong phần chữ nhỏ đều có nghĩa là cổ tức đã được tính vào.
  • Truyền thông tài chính và màn hình báo giá sử dụng price return. Câu “S&P 500 đóng cửa tăng 0,4%” mô tả biến động giá.
  • Các mục hiệu quả đầu tư trên công ty môi giới thường sử dụng total return cho toàn bộ tài khoản, vì tiền thực tế đã được ghi có vào tài khoản. Cột mức tăng của một vị thế riêng lẻ thường thể hiện biến động giá so với cost basis, nên không phải cùng một chỉ số.
  • Các bài backtest và phân tích chiến lược sử dụng phiên bản do nguồn dữ liệu của tác giả cung cấp. Đây là nguyên nhân của nhiều thành tích quá cao nhưng ít khi được nhận ra.

Điểm chênh lệch quan trọng là đặt total return của một quỹ cạnh một chỉ số chỉ phản ánh giá. Quỹ được ghi nhận cổ tức của chính mình, còn benchmark không được ghi nhận cổ tức của nó. Điều này tạo cho quỹ lợi thế ban đầu tương đương toàn bộ dòng cổ tức của chỉ số. Trong giai đoạn 20-year nêu trên, sai lệch trong cách chấm điểm này tương đương 251.9 điểm phần trăm, và không điểm nào trong số đó đến từ nhà quản lý quỹ. So sánh tương đồng phải đặt total return cạnh total return. Cách đo lường lợi nhuận hàng tháng trình bày cùng phép tính ở cấp độ tháng, còn bỏ lỡ những ngày tăng mạnh nhất cho thấy đường giá thay đổi ra sao khi loại bỏ một số ít phiên giao dịch.

Cách xây dựng các con số này
  • Giá sử dụng giá đóng cửa hằng ngày của phiên giao dịch thông thường. Cổ tức là các khoản phân phối tiền mặt được công bố, mỗi khoản được tái đầu tư theo giá đóng cửa vào ngày giao dịch không hưởng quyền (ex-dividend date). Đây là quy ước tiêu chuẩn để xây dựng chuỗi total return.
  • Giai đoạn tính toán kéo dài từ tháng 12 năm 2005 đến ngày 31 tháng 7 năm 2026, tương ứng với khoảng thời gian được bao phủ bởi dữ liệu lịch sử giá trong ngày làm cơ sở cho các bảng này. Giai đoạn dài hơn sẽ làm khoảng cách nới rộng thêm.
  • Một quỹ mô phỏng chỉ số được dùng để đại diện cho chính chỉ số đó, nên phí quỹ và chi phí cơ hội của tiền mặt đã nằm trong các con số này. Price return theo năm dương lịch được tính từ giá đóng cửa đầu tiên của năm đến giá đóng cửa cuối cùng, qua đó không tính biến động của phiên đầu tiên.

Câu hỏi thường gặp về lợi nhuận giá và tổng lợi nhuận

S&P 500 là chỉ số giá hay chỉ số tổng lợi nhuận?

Con số được đưa lên tiêu đề là chỉ số giá: chỉ số theo dõi giá trị thị trường của các thành phần và không tính cổ tức. Phiên bản tổng lợi nhuận của cùng chỉ số cũng tồn tại và tái đầu tư cổ tức. Các benchmark của quỹ thường sử dụng phiên bản tổng lợi nhuận, trong khi tin tức thường dẫn số liệu của phiên bản giá.

Cổ tức đóng góp bao nhiêu vào lợi nhuận của S&P 500?

Trong khoảng thời gian 10-year kết thúc ngày 31 tháng 7 năm 2026, sản phẩm theo dõi được sử dụng ở đây đạt 244.3% nếu chỉ tính biến động giá, so với 304.5% khi tái đầu tư cổ tức. Trong một năm dương lịch, phần đóng góp này nhỏ hơn nhiều, khoảng 1.9 điểm phần trăm trong 2007.

Tài khoản môi giới của tôi thể hiện lợi nhuận giá hay tổng lợi nhuận?

Cổ tức tiền mặt được ghi có vào tài khoản, nên số dư đã bao gồm khoản này. Tuy nhiên, cột lợi nhuận của một vị thế thường chỉ so sánh giá hiện tại với cost basis, tức chỉ phản ánh lợi nhuận giá. Hai con số sẽ chênh nhau đúng bằng số cổ tức đã nhận, trừ khi chương trình tái đầu tư đã dùng khoản cổ tức đó để mua thêm cổ phiếu trong quá trình nắm giữ.

Total return swap có giống tổng lợi nhuận không?

Không. Total return swap là một hợp đồng phái sinh song phương, trong đó các bên trao đổi toàn bộ hiệu quả kinh tế của một tài sản lấy một mức lãi suất tài trợ. Tổng lợi nhuận theo nghĩa dùng trong chỉ số là một quy ước đo lường hiệu quả. Hai thuật ngữ này cùng đề cập đến ý tưởng giá cộng thu nhập, nhưng chúng không liên quan với nhau về mặt công cụ.

Vì sao một quỹ trông có hiệu quả tốt hơn khi được so sánh với chỉ số giá?

Số liệu công bố của quỹ bao gồm cổ tức, còn chỉ số giá thì không tính cổ tức của chính chỉ số. Cách so sánh này tạo cho quỹ lợi thế ban đầu tương đương dòng cổ tức của benchmark, ở mức 251.9 điểm phần trăm trong khoảng thời gian 20-year nêu trên.


Mọi con số ở đây đều được lấy từ một truy vấn đã lưu và lập phiên bản, sử dụng giá đóng cửa hằng ngày cùng dữ liệu cổ tức đã công bố. Mở bất kỳ bảng nào để xem SQL, hoặc thực hiện cùng phép so sánh lợi nhuận giá và tổng lợi nhuận trên ticker bạn theo dõi tại terminal Strasmore.

#total return#dividends#s&p 500#index funds#performance