Cách tính tỷ suất sinh lời cổ phiếu hàng tháng
Tìm hiểu cách tính tỷ suất sinh lời hàng tháng dựa trên giá đóng cửa, cổ tức và việc điều chỉnh sau chia tách để hiểu sự khác biệt giữa các nguồn dữ liệu.
Khi hỏi một cổ phiếu "đã biến động thế nào trong tháng 6", bạn sẽ nhận được các con số khác nhau từ các nguồn khác nhau — và tất cả chúng đều chính xác. Tỷ suất sinh lời hàng tháng của một cổ phiếu được xác định bởi những lựa chọn mà hầu hết mọi người không hề hay biết: hai mức giá nào đánh dấu điểm đầu và điểm cuối của tháng, có tính cổ tức hay không, và chuỗi giá có được điều chỉnh do chia tách hay không. Trang này chạy các quy ước đối lập nhau trên dữ liệu thực tế, đặt cạnh nhau, để giúp bạn hiểu rõ nguyên nhân của những sự khác biệt đó.
Close-to-close: quy ước tiêu chuẩn
Quy ước được các nhà cung cấp chỉ số, bảng thông tin quỹ và hầu hết các trang báo giá sử dụng: tỷ suất sinh lời của tháng được tính từ giá đóng cửa phiên giao dịch bình thường cuối cùng của tháng trước đến giá đóng cửa cuối cùng của tháng này. Giá đóng cửa cuối cùng của tháng 5 là điểm bắt đầu cho tháng 6. Phép tính rất đơn giản — giá kết thúc trừ giá bắt đầu, chia cho giá bắt đầu. Một ví dụ minh họa: một cổ phiếu kết thúc tháng 5 ở mức 50,00 USD và kết thúc tháng 6 ở mức 53,50 USD sẽ có tỷ suất sinh lời trong tháng là (53,50 − 50,00) ÷ 50,00 = 0,07, hay 7%. Mọi quy ước trên trang này đều đưa các dữ liệu đầu vào khác nhau vào cùng một công thức đó. Dưới đây là dữ liệu thực tế của tháng 6 năm 2026, đặt cạnh phương pháp thay thế chính:
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round(argMaxIf(cl, day, day <= '2026-05-31'), 2) AS may_final_close,
round(argMinIf(op, day, day >= '2026-06-01'), 2) AS june_first_open,
round(argMaxIf(cl, day, day <= '2026-06-30'), 2) AS june_final_close,
round(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMaxIf(cl, day, day <= '2026-05-31'))
/ argMaxIf(cl, day, day <= '2026-05-31'), 2) AS close_to_close_pct,
round(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMinIf(op, day, day >= '2026-06-01'))
/ argMinIf(op, day, day >= '2026-06-01'), 2) AS open_to_close_pct,
round(abs(100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMinIf(op, day, day >= '2026-06-01'))
/ argMinIf(op, day, day >= '2026-06-01')
- 100 * (argMaxIf(cl, day, day <= '2026-06-30') - argMaxIf(cl, day, day <= '2026-05-31'))
/ argMaxIf(cl, day, day <= '2026-05-31')), 2) AS convention_gap_points
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS day,
argMinIf(toFloat64(open), window_start, rth) AS op,
argMaxIf(toFloat64(close), window_start, rth) AS cl
FROM (
SELECT ticker, window_start, open, close,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York') AS rth
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('NVDA', 'SPY')
AND window_start >= '2026-05-28 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY ticker, day
)
GROUP BY ticker
ORDER BY tickerTháng 6 của NVDA là -5.39% theo kiểu close-to-close — nhưng -7.4% được tính từ giá mở cửa phiên giao dịch bình thường đầu tiên của tháng 6 đến giá đóng cửa cuối cùng. Cùng một cổ phiếu, cùng một tháng, có 2.01 điểm phần trăm chênh lệch giữa hai kết quả chính xác này. Toàn bộ sự khác biệt nằm ở khoảng thời gian qua đêm và cuối tuần: NVDA đóng cửa tháng 5 ở mức $211.15 và mở cửa tháng 6 ở mức $215.73 — mức tăng đó thuộc về "tháng 6" theo quy ước open-to-close và thuộc về ranh giới trong quy ước close-to-close. SPY cũng cho thấy cấu trúc tương tự nhưng với biên độ nhẹ hơn: -1.33% close-to-close so với -1.2% open-to-close.
Không có con số nào là sai. Close-to-close trả lời câu hỏi "người nắm giữ liên tục đã trải qua điều gì qua ranh giới giữa các tháng?". Open-to-close trả lời câu hỏi "giao dịch trong tháng đã mang lại kết quả gì cho người mua tại mức giá mở cửa tháng 6?". Chúng khác nhau bất cứ khi nào thị trường có khoảng trống giá (gap) qua ranh giới — và các khoảng trống qua đêm là chuyện thường xuyên, không phải hiếm gặp.
Cổ tức: price return so với total return
Lựa chọn thứ hai: liệu tiền mặt mà cổ phiếu chi trả trong tháng có được tính hay không? Price return sẽ bỏ qua khoản này; trong khi total return sẽ cộng nó vào. Trong hầu hết các tháng đơn lẻ, khoảng cách này rất nhỏ — một cổ phiếu trả cổ tức hàng quý thường chi trả khoảng một phần tư tỷ suất lợi nhuận mỗi quý — nhưng nó sẽ tích lũy thành một hố ngăn cách lớn qua nhiều năm, và tháng 6 năm 2026 tình cờ là tháng chi trả của SPY:
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH px AS (
SELECT argMaxIf(cl, day, day <= '2026-05-31') AS may_close,
argMaxIf(cl, day, day <= '2026-06-30') AS jun_close
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS day,
argMinIf(toFloat64(open), window_start, rth) AS op,
argMaxIf(toFloat64(close), window_start, rth) AS cl
FROM (
SELECT ticker, window_start, open, close,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York') AS rth
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('NVDA', 'SPY')
AND window_start >= '2026-05-28 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)
GROUP BY ticker, day
)
WHERE ticker = 'SPY'
),
dv AS (
SELECT sum(cash_amount) AS div_per_share
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= '2026-06-01'
AND ex_dividend_date <= '2026-06-30'
)
SELECT round(may_close, 2) AS may_final_close,
round(jun_close, 2) AS june_final_close,
round(div_per_share, 4) AS june_dividend_per_share,
round(100 * (jun_close - may_close) / may_close, 2) AS price_return_pct,
round(100 * div_per_share / may_close, 2) AS dividend_contribution_pct,
round(100 * ((jun_close + div_per_share) - may_close) / may_close, 2) AS total_return_pct
FROM px CROSS JOIN dvPrice return tháng 6 của SPY là -1.33%; nếu cộng thêm khoản phân phối 1.9035 mỗi cổ phiếu được thực hiện vào ngày ex-dividend trong tháng, total return sẽ tăng lên -1.08% — đóng góp 0.25% từ tiền mặt. Các họ chỉ số đều công bố cả hai loại (chỉ số "S&P 500" mà bạn thường thấy thường là price index), các trang hiệu suất quỹ bắt buộc phải hiển thị total return, và các bộ lọc cổ phiếu thường kết hợp cả hai một cách tự do. Khi hai nguồn dữ liệu chênh lệch vài phần mười trong một tháng của một cổ phiếu trả cổ tức, cổ tức chính là nguyên nhân đầu tiên cần nghi ngờ — ngày ex-dividend sẽ quyết định khoản thanh toán đó thuộc về tháng nào.
Một tháng 6 đơn lẻ chỉ chênh lệch vài phần mười phần trăm. Thời gian đầu tư chính là yếu tố phân tách hai quy ước này — dưới đây là cùng một phép tính được kéo dài trong năm năm:
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 day,
argMaxIf(toFloat64(close), window_start,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2021-06-28 04:00:00' AND window_start < '2021-07-01 08:00:00')
OR (window_start >= '2026-06-26 04:00:00' AND window_start < '2026-07-01 08:00:00'))
GROUP BY day
),
px AS (
SELECT argMaxIf(cl, day, day <= '2021-06-30') AS start_close,
argMaxIf(cl, day, day <= '2026-06-30') AS end_close
FROM daily
),
dv AS (
SELECT round(sum(cash_amount), 2) AS divs_per_share,
count() AS payments
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= '2021-07-01'
AND ex_dividend_date <= '2026-06-30'
)
SELECT round(start_close, 2) AS june_2021_close,
round(end_close, 2) AS june_2026_close,
divs_per_share AS dividends_paid_per_share,
payments AS dividend_payments,
round(100 * (end_close - start_close) / start_close, 2) AS five_year_price_return_pct,
round(100 * ((end_close + divs_per_share) - start_close) / start_close, 2) AS five_year_return_with_divs_pct,
round(100 * divs_per_share / start_close, 2) AS dividend_points_added
FROM px CROSS JOIN dvTừ mức đóng cửa tháng 6 năm 2021 là $428.07 đến mức đóng cửa tháng 6 năm 2026 là $746.32, price return năm của SPY đạt 74.35%. Trong cùng khoảng thời gian đó, SPY đã chi trả 20 đợt phân phối với tổng cộng $34.07 mỗi cổ phiếu; nếu tính cả khoản tiền mặt đó, con số sẽ tăng lên 82.3% — chênh lệch 7.96 điểm trước khi có bất kỳ khoản cổ tức đơn lẻ nào được tái đầu tư. Một chỉ số total-return thực thụ sẽ tái đầu tư mỗi khoản thanh toán vào ngày ex-date, và các cổ phiếu được tái đầu tư sẽ khiến khoảng cách này càng rộng hơn. Đối với một cổ phiếu trả cổ tức ổn định, "biên độ lớn" không phải là một cách nói ẩn dụ; đó là kết quả mặc định của nhiều năm nhận tiền mặt hàng quý.
Giá đóng cửa điều chỉnh so với giá đóng cửa thực tế: bẫy chia tách cổ phiếu
Hầu hết các công cụ biểu đồ — như Yahoo Finance, Google Finance hay các ứng dụng môi giới — đều trích dẫn giá đóng cửa điều chỉnh (adjusted close). Đây là chuỗi giá lịch sử đã được chia lại theo tỷ lệ chia tách cổ phiếu (và trên một số nền tảng, còn được điều chỉnh cả theo cổ tức) để đảm bảo tính so sánh giữa các thời điểm. Kho dữ liệu của chúng tôi lưu trữ dữ liệu theo đúng giá khớp lệnh thực tế. Trong một tháng bình thường, hai loại giá này khớp nhau. Tuy nhiên, trong một tháng có sự kiện chia tách cổ phiếu, chúng sẽ cho ra kết quả hoàn toàn khác biệt — ví dụ như đợt chia tách tỷ lệ 10-cho-1 của NVDA diễn ra vào ngày 10 tháng 6 năm 2024:
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH px AS (
SELECT argMaxIf(cl, day, day <= '2024-05-31') AS may_close,
argMaxIf(cl, day, day <= '2024-06-30') AS jun_close
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
argMaxIf(toFloat64(close), window_start,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'NVDA'
AND window_start >= '2024-05-29 04:00:00'
AND window_start < '2024-07-01 08:00:00'
GROUP BY day
)
),
sp AS (
SELECT split_to / split_from AS ratio
FROM global_markets.stocks_splits
WHERE ticker = 'NVDA'
AND execution_date >= '2024-06-01'
AND execution_date <= '2024-06-30'
)
SELECT round(may_close, 2) AS may_final_close_raw,
round(jun_close, 2) AS june_final_close_raw,
toInt32(ratio) AS shares_after_split_per_old_share,
round(100 * (jun_close - may_close) / may_close, 2) AS raw_price_change_pct,
round(may_close / ratio, 2) AS may_close_split_adjusted,
round(100 * (jun_close - may_close / ratio) / (may_close / ratio), 2) AS adjusted_return_pct
FROM px CROSS JOIN spNếu đọc theo giá thực tế, NVDA "giảm" từ $1097.46 xuống $123.41 trong tháng 6 đó — tương đương mức sụt giảm -88.75%. Thực tế không có sự việc nào như vậy xảy ra: vào ngày thực hiện chia tách, mỗi cổ phiếu cũ trở thành 10 cổ phiếu mới và giá được chia tương ứng, giúp tổng giá trị tài sản của người nắm giữ không đổi. Nếu lấy giá đóng cửa tháng 5 chia cho cùng tỷ lệ đó — đạt $109.75 trên cơ sở đã điều chỉnh — thì tháng 6 năm 2024 ghi nhận mức tăng 12.45%. Bất kỳ nguồn tin nào trích dẫn dữ liệu điều chỉnh sẽ báo cáo con số gần với kết quả thứ hai; trong khi việc tính toán sơ sài dựa trên giá thực tế sẽ cho ra con số thứ nhất. Giá đóng cửa điều chỉnh là lý do phổ biến nhất khiến hai nguồn tin có sự chênh lệch lớn về tỷ suất sinh lời hàng tháng trong quá khứ — khi thấy một con số lớn bất thường theo bất kỳ hướng nào, hãy kiểm tra lịch chia tách trước tiên.
"Giá đóng cửa" nào mới là giá đóng cửa?
Một ranh giới khác nằm trong các quy ước: chính là giá đóng cửa. Con số mà mọi bản cáo bạch sử dụng là mức giá đấu giá đóng cửa chính thức — mức giá duy nhất được thiết lập bởi closing auction vào lúc 4:00 PM ET. Tuy nhiên, giao dịch vẫn tiếp tục sau giờ chính thức, và mức giá cuối cùng của phiên kéo dài có thể khác biệt so với giá đóng cửa chính thức:
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(argMaxIf(toFloat64(close), window_start, rth), 2) AS regular_session_close,
round(argMax(toFloat64(close), window_start), 2) AS last_extended_print,
round(100 * (argMax(toFloat64(close), window_start) - argMaxIf(toFloat64(close), window_start, rth))
/ argMaxIf(toFloat64(close), window_start, rth), 3) AS after_hours_drift_pct
FROM (
SELECT window_start, close,
toTimeZone(window_start, 'America/New_York') >= toDateTime('2026-06-30 09:30:00', 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime('2026-06-30 16:00:00', 'America/New_York') AS rth
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-06-30 04:00:00'
AND window_start < '2026-07-01 08:00:00'
)Vào ngày 30 tháng 6, hai mức giá này chênh lệch -0.003% — con số nhỏ vào tối hôm đó, nhưng trong một đêm công bố báo cáo thu nhập của một cổ phiếu đơn lẻ, phiên kéo dài có thể biến động ở mức phần trăm mà tỷ suất sinh lời chính thức hàng tháng sẽ tính cho tháng kế tiếp. After-hours and premarket trading giải thích chi tiết về ranh giới đó. Một trường hợp đặc biệt liên quan: ranh giới tháng đôi khi rơi vào một phiên giao dịch rút ngắn do ngày lễ, khi phiên giao dịch bình thường kết thúc lúc 1:00 PM ET và giá đóng cửa chính thức được xác định trong một phiên đấu giá đóng cửa sớm — market holiday schedule có liệt kê các lịch trình này.
Lãi kép biến đổi mười hai tháng thành một năm
Tỷ suất sinh lời hàng năm không phải là tổng của mười hai tỷ suất sinh lời hàng tháng — mà là tích số của chúng. Công thức liên kết: chuyển đổi mỗi tháng thành một hệ số tăng trưởng (1 + tỷ suất sinh lời), nhân mười hai hệ số này với nhau, sau đó trừ đi 1. Một tháng giảm -5% theo sau bởi một tháng tăng +5% sẽ có tổng bằng không, nhưng lãi kép sẽ là 0.95 × 1.05 − 1 = −0.25%. Dưới đây là lộ trình hàng tháng thực tế của SPY trong mười hai tháng kết thúc vào tháng 6 năm 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 day,
argMaxIf(toFloat64(close), window_start,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2025-06-24 04:00:00'
AND window_start < '2026-07-01 08:00:00'
GROUP BY day
),
monthly AS (
SELECT toStartOfMonth(day) AS month_start,
argMax(cl, day) AS month_close
FROM daily
GROUP BY month_start
),
rets AS (
SELECT month_start,
formatDateTime(month_start, '%Y-%m') AS month,
round(month_close, 2) AS month_final_close,
100 * (month_close / lagInFrame(month_close) OVER (ORDER BY month_start) - 1) AS r
FROM monthly
)
SELECT month,
month_final_close,
round(r, 2) AS simple_return_pct,
round(100 * log(1 + r / 100), 2) AS log_return_pct
FROM rets
WHERE isFinite(r)
ORDER BY month_startMười hai tháng tính theo giá đóng cửa, từ 2.28% trong 2025-07 đến -1.33% trong 2026-06 — hàng cuối cùng là con số SPY tháng 6 năm 2026 tương tự như bảng đầu tiên đã đo lường. Hãy liên kết mười hai tháng một cách chính xác và so sánh với cách làm tắt là chỉ cộng các tỷ lệ phần trăm:
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 day,
argMaxIf(toFloat64(close), window_start,
toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')
AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2025-06-24 04:00:00'
AND window_start < '2026-07-01 08:00:00'
GROUP BY day
),
monthly AS (
SELECT toStartOfMonth(day) AS month_start,
argMax(cl, day) AS month_close
FROM daily
GROUP BY month_start
),
rets AS (
SELECT month_start,
100 * (month_close / lagInFrame(month_close) OVER (ORDER BY month_start) - 1) AS r
FROM monthly
),
ends AS (
SELECT argMin(month_close, month_start) AS base_close,
argMax(month_close, month_start) AS final_close
FROM monthly
)
SELECT count() AS months_linked,
round(sum(r), 2) AS simple_sum_pct,
round(100 * (exp(sum(log(1 + r / 100))) - 1), 2) AS geometric_compound_pct,
round(100 * (any(final_close) / any(base_close) - 1), 2) AS direct_twelve_month_pct,
round(100 * (exp(sum(log(1 + r / 100))) - 1) - sum(r), 2) AS compounding_gap_points,
round(sum(100 * log(1 + r / 100)), 2) AS sum_of_monthly_log_returns_pct,
round(100 * log(any(final_close) / any(base_close)), 2) AS twelve_month_log_return_pct
FROM rets CROSS JOIN ends
WHERE isFinite(r)Tổng mười hai tháng là 19.83% nhưng lãi kép là 20.79% — và tính toán trực tiếp từ giá đóng cửa tháng 6 năm 2025 đến tháng 6 năm 2026 cho kết quả 20.79%, khớp với con số lãi kép thay vì tổng số. Khoảng cách ở đây là 0.96 điểm trong một năm tương đối bình lặng; khoảng cách này sẽ nới rộng khi biến động và thời gian kéo dài tăng lên. Cộng các tỷ lệ phần trăm hàng tháng là một thói quen phổ biến khi dùng bảng tính, và nó sai một cách âm thầm.
Hai cột cuối cùng hiển thị quy ước được xây dựng để cộng dồn: log return, tức là logarit tự nhiên của hệ số tăng trưởng, ln(1 + return). Tổng các log return hàng tháng là 18.89% — trùng khớp với log return mười hai tháng là 18.89%, đó chính là lý do tại sao các nhà phân tích và mô hình rủi ro sử dụng chúng. Đối với các tháng có biến động nhỏ, hai quy ước này hầu như không khác biệt (2025-11: 0.21% đơn giản, 0.21% log); tháng có biến động càng lớn, khoảng cách giữa chúng càng rộng (2026-04: 10.49% đơn giản, 9.97% log). Các bản cáo bạch quỹ thường trích dẫn tỷ suất sinh lời đơn giản; trong khi log return được dùng trong các báo cáo nghiên cứu và toán học về biến động.
Danh sách kiểm tra để đối soát giữa hai nguồn dữ liệu
Khi hai con số lợi nhuận hàng tháng không khớp nhau, nguyên nhân hầu hết luôn nằm ở một trong bốn yếu tố sau:
- Endpoints — giá đóng cửa phiên trước đến đóng cửa phiên sau (tiêu chuẩn) hoặc giá mở cửa đến đóng cửa (giao dịch trong chính tháng đó). Kết quả sẽ khác nhau nếu có khoảng trống giá (gap) tại thời điểm chuyển giao.
- Dividends — lợi nhuận theo giá (price return) hoặc tổng lợi nhuận (total return). Kết quả sẽ khác nhau trong bất kỳ tháng nào có ngày giao dịch không hưởng quyền (ex-dividend date).
- Adjustment — dữ liệu thô (raw prints) hoặc chuỗi giá đóng cửa đã điều chỉnh (adjusted-close series). Kết quả sẽ khác biệt lớn trong bất kỳ tháng nào có chia tách cổ phiếu (split).
- The close itself — giá đóng cửa phiên đấu giá chính thức (tiêu chuẩn) so với giá giao dịch cuối cùng có thể bao gồm cả giờ giao dịch ngoài phiên (extended hours).
Hãy áp dụng cùng một thiết lập cho cả hai nguồn dữ liệu, sự sai lệch sẽ biến mất. Việc so sánh giữa quỹ và chỉ số (fund-versus-index) chỉ có giá trị khi cả hai con số đều sử dụng cùng một trong bốn thiết lập trên; nếu sai lệch một yếu tố, phép so sánh đó thực chất đang đo lường sự khác biệt của thiết lập thay vì đo lường hiệu suất. Bản tóm tắt tháng 6 năm 2026 của chúng tôi nêu rõ quy ước ngay từ đầu vì lý do này — mọi con số hàng tháng ở đó đều là close-to-close, dựa trên giá đóng cửa chính thức và là price return.
Câu hỏi thường gặp về lợi nhuận hàng tháng
Lợi nhuận close-to-close là gì?
Là tỷ lệ phần trăm thay đổi từ giá đóng cửa phiên giao dịch bình thường cuối cùng của kỳ trước đến giá đóng cửa cuối cùng của kỳ này. Đây là quy ước tiêu chuẩn cho lợi nhuận cổ phiếu hàng ngày, hàng tháng và hàng năm trên các bảng dữ liệu (fact sheets) và báo cáo chỉ số.
Tại sao hai website lại hiển thị lợi nhuận khác nhau cho cùng một cổ phiếu và cùng một tháng?
Hầu hết luôn do một trong bốn quy ước: các điểm mốc khác nhau (close-to-close so với open-to-close), có tính cổ tức hay không, giá chưa điều chỉnh so với giá đã điều chỉnh chia tách, hoặc nguồn giá đóng cửa khác nhau. Chỉ riêng việc chuyển đổi đầu tiên đã khiến số liệu tháng 6 năm 2026 của NVDA khác nhau giữa -5.39% và -7.4%.
Việc chia tách cổ phiếu có làm thay đổi cách tính lợi nhuận hàng tháng không?
Về lý thuyết thì không — việc chia tách làm thay đổi cả số lượng cổ phiếu và giá, giữ nguyên giá trị vị thế — nhưng nó sẽ làm sai lệch bất kỳ tính toán nào được thực hiện trên giá chưa điều chỉnh. Số liệu tháng 6 năm 2024 của NVDA trông giống như -88.75% nếu tính theo giá đóng cửa chưa điều chỉnh, và đạt mức 12.45% sau khi đã điều chỉnh cho đợt chia tách tỷ lệ 10-for-1.
Lợi nhuận cổ phiếu hàng tháng có bao gồm cổ tức không?
Chỉ có total return mới bao gồm cổ tức. Price return — bao gồm cả mức chỉ số S&P 500 chính — không bao gồm cổ tức. Trong tháng 6 năm 2026, cổ tức đã đóng góp 0.25% vào lợi nhuận tháng của SPY, tạo ra khoảng cách giữa price return và total return.
Lợi nhuận hàng tháng của danh mục đầu tư cá nhân tôi có được tính theo cách tương tự không?
Sẽ không giống nếu có dòng tiền nạp vào hoặc rút ra. Lợi nhuận của các chứng khoán riêng lẻ như trên trang này được tính theo phương pháp time-weighted; một tài khoản có nạp và rút tiền cần được tính theo phương pháp money-weighted (tỷ suất hoàn vốn nội bộ - IRR), nếu không dòng tiền sẽ làm sai lệch kết quả hiệu suất. Hầu hết các nhà môi giới báo cáo con số theo phương pháp time-weighted chính xác để loại bỏ các khoản nạp tiền của bạn ra khỏi con số đó.
Mọi số liệu trên đây đều là các truy vấn đã được lưu trữ và phân phiên từ dữ liệu thực tế — bạn có thể mở rộng SQL của bất kỳ bảng nào, hoặc đo lường bất kỳ ticker nào trong một tháng theo bất kỳ quy ước nào trên terminal Strasmore.