Nửa đầu năm 2026 là sự kết hợp của hai thị trường khác biệt: quý đầu tiên chứng kiến mọi ETF chỉ số lớn đều giảm hoặc đi ngang, và quý thứ hai đã bù đắp hoàn toàn mức giảm đó. SPY kết thúc nửa đầu năm với mức tăng 8.8%; QQQ tăng 18.7%; và 21.3% của IWM là nửa đầu năm tốt nhất mà ETF vốn hóa nhỏ này từng ghi nhận trong dữ liệu chúng tôi có — kết quả chi tiết được liệt kê dưới đây, đã được tính toán lại so với mọi năm trước đó trong một truy vấn. Thị trường lãi suất cũng cho thấy xu hướng riêng: 2s10s spread đã thu hẹp từ 72 điểm cơ bản xuống 30 trong suốt nửa năm mà không hề đảo ngược. Trang này là sổ cái đầy đủ của nửa đầu năm — bao gồm bảng điểm, xếp hạng lịch sử, biểu đồ tăng trưởng hàng tháng, toàn bộ đường cong lợi suất theo từng kỳ hạn, mười một nhóm ngành, diễn biến hàng tháng của thị trường options, và các mã cổ phiếu riêng lẻ đáng chú ý. Mọi con số ở đây đều là kết quả từ truy vấn đã lưu; bạn có thể mở rộng bất kỳ bảng nào để xem mã SQL.
Kết quả nửa đầu năm
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS h1_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerSự phân hóa giữa hai quý là đặc điểm chính của nửa đầu năm: SPY -5.2% sau đó là 14.1%; QQQ -6.9% sau đó là 26.5%. IWM là cổ phiếu dẫn dắt thầm lặng của nửa đầu năm tại 21.3% — nhóm vốn hóa nhỏ (small caps) đã vượt qua mọi chỉ số vốn hóa lớn trong sáu tháng qua. Chi tiết từng quý nằm trong tổng kết Q2. Một lưu ý về tính toán cho nửa đầu năm: tỷ lệ 8.8% của SPY trong sáu tháng thấp hơn nhiều so với riêng Q2, do nửa đầu năm bao gồm cả một đợt sụt giảm và một đợt hồi phục — sự cộng dồn của -5.2% và 14.1% dẫn đến kết quả như trong bảng, và bất kỳ tiêu đề nào về 'lợi nhuận nửa đầu năm' đều ngầm bao hàm cả chu kỳ biến động đó.
Hiệu suất nửa đầu năm so với tất cả các nửa đầu năm khác
Một nửa 8.8% có bất thường không? Các bảng dưới đây tính toán lại CÙNG một mức lợi nhuận nửa đầu năm — từ giá mở cửa đến giá đóng cửa trong giờ giao dịch chính thức, từ tháng Một đến tháng Sáu — cho mọi năm có dữ liệu theo phút. Mỗi cặp ETF được thực hiện trong một truy vấn với cùng một phép tính cho mọi năm, sau đó xếp hạng nửa đầu năm này so với các năm còn lại. Ngày sớm nhất của dữ liệu phút đã được xác minh trong phần phương pháp luận bên dưới; nửa đầu năm hoàn chỉnh đầu tiên có trong hồ sơ là năm được ghi trong biên lai.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASCCâu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASCMức 8.8% của SPY xếp hạng thứ 6 trong số 23 nửa đầu năm kể từ 2004 (hạng 1 là tốt nhất) — thuộc nhóm một phần ba trên, không phải là một kỷ lục. Mức 18.7% của QQQ xếp hạng thứ 3 trong số 16 nửa đầu năm tương đương — chuỗi dữ liệu của QQQ ngắn hơn — quỹ này từng giao dịch dưới một mã gốc khác trong một số năm — và bất kỳ năm nào có ít hơn một trăm phiên nửa đầu năm cho một ticker đều bị loại trừ bởi bộ lọc số lượng phiên được hiển thị trong bảng, do đó các trường hợp bị loại trừ sẽ hiển thị rõ ràng thay vì bị bỏ qua âm thầm.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASCCâu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASCDòng vốn vốn hóa nhỏ là điểm nhấn của nửa đầu năm này: IWM xếp hạng thứ 1 trong số 23 nửa đầu năm kể từ 2004 — đây là mức tốt nhất được ghi nhận của quỹ, vượt qua mọi nửa đầu năm phục hồi trong bảng. Mức 8.4% của DIA xếp hạng thứ 4 trong số 23. Cơ sở tính toán được nêu rõ: giá mở cửa đến đóng cửa trong giờ giao dịch chính thức trong mỗi nửa đầu năm dương lịch, cùng một phép tính cho mọi năm, giới hạn trên được cố định tại thời điểm kết thúc giai đoạn này để tập hợp so sánh không thể tự tăng lên khi các năm sau được nạp vào dữ liệu.
Từng tháng một
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start, ticker
ORDER BY period_start, tickerBiểu đồ biến động theo hình bậc thang: tăng nhẹ, giảm, giảm, tăng mạnh, tăng, rồi giảm nhẹ: tháng Tư là điểm xoay chiều của nửa đầu năm (SPY 9.9%, QQQ 14.8% — tháng tốt nhất của QQQ trong sáu tháng), và tháng Sáu kết thúc nửa đầu năm một cách ổn định ở mức -1.2% đối với SPY. Bản tóm tắt riêng cho tháng Sáu, với sự phân hóa về độ rộng thị trường đằng sau con số khiêm tốn đó, có tại đây. Xem xét bảng dữ liệu theo từng tháng: năm bắt đầu gần như đi ngang (SPY 0.9% vào tháng Một), giảm dần trong tháng Hai (-0.5%) và tháng Ba (-4.2%), sau đó tháng Tư đã đảo ngược xu hướng chỉ trong một tháng, tháng Năm tiếp tục đà tăng (4.9%), và tháng Sáu giảm nhẹ. Ba trong số sáu tháng có kết quả âm — tỷ lệ này tương đương với việc tung đồng xu cho một nửa năm kết thúc với mức tăng trưởng dương vững chắc. Đây là hình thái thường thấy của các nửa năm trên thị trường cổ phiếu và cần lưu ý khi chỉ dựa vào một tháng duy nhất để đưa ra kết luận.
Lãi suất: toàn bộ đường cong, theo từng kỳ hạn
Đường cong lợi suất trái phiếu Chính phủ trong nửa kỳ đã biến động theo dạng xoắn (twisting) thay vì dịch chuyển song song (shifting). Nhóm kỳ hạn ngắn nhất — những kỳ hạn bám sát chính sách nhất — hầu như không thay đổi; kỳ hạn hai năm tăng hai phần ba điểm phần trăm; trong khi kỳ hạn ba mươi năm gần như không biến động. Bảng dưới đây trình bày toàn bộ đường cong, so sánh giữa đầu và cuối kỳ.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT maturity, start_pct, end_pct, round((end_pct - start_pct) * 100, 0) AS change_bp FROM (
SELECT '1-month' AS maturity, (SELECT round(argMin(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS start_pct, (SELECT round(argMax(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS end_pct, 1 AS o
UNION ALL SELECT '3-month', (SELECT round(argMin(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), (SELECT round(argMax(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), 2
UNION ALL SELECT '1-year', (SELECT round(argMin(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), (SELECT round(argMax(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), 3
UNION ALL SELECT '2-year', (SELECT round(argMin(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), (SELECT round(argMax(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), 4
UNION ALL SELECT '5-year', (SELECT round(argMin(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), (SELECT round(argMax(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), 5
UNION ALL SELECT '10-year', (SELECT round(argMin(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), (SELECT round(argMax(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), 6
UNION ALL SELECT '30-year', (SELECT round(argMin(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), (SELECT round(argMax(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), 7
) ORDER BY oĐọc cột thay đổi từ trên xuống dưới, bạn sẽ thấy sự xoắn rõ rệt: kỳ hạn 1-tháng biến động -2 điểm cơ bản trong sáu tháng, trong khi kỳ hạn 2-năm tăng 67 và kỳ hạn 30-năm chỉ tăng 5. Một sự dịch chuyển song song sẽ làm tất cả các kỳ hạn cùng di chuyển; nhưng nửa kỳ này đã làm biến động phần giữa của đường cong và giữ cố định cả hai đầu — lãi suất ngắn hạn neo gần mức lãi suất điều hành, trong khi lãi suất dài hạn hầu như không được định giá lại.
Tác động đến độ dốc
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
round((argMin(yield_10_year - yield_2_year, date)) * 100, 0) AS start_bp,
round((argMax(yield_10_year - yield_2_year, date)) * 100, 0) AS end_bp,
round(min((yield_10_year - yield_2_year)) * 100, 0) AS min_bp,
count() AS prints
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)Đường cong lãi suất phẳng đi khi phần kỳ hạn ngắn tăng nhanh hơn phần kỳ hạn dài: 2s10s spread đã giảm từ 72 xuống 30 basis points trong suốt các kỳ báo cáo của 124 — và mức thấp nhất trong nửa năm là 27, do đó đường cong đã phẳng đi mà không hề bị đảo ngược. Việc đường cong phẳng hơn "có ý nghĩa" gì về diễn biến tiếp theo chỉ là dự báo, và bảng này không đưa ra các dự báo.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toString(date) AS d, round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)
ORDER BY dateChuỗi dữ liệu hàng ngày cho thấy quá trình phẳng đi không phải là một sự kiện đơn lẻ mà là một sự sụt giảm dần dần — các kỳ báo cáo của 124 giảm dần trong nửa năm, với spread bắt đầu năm ở mức 72 basis points và kết thúc ở mức 30.
Các nhóm ngành: sự phân hóa mà chỉ số đã che lấp
Những phần nào của thị trường thực sự tạo ra lợi nhuận trong nửa đầu năm? Mười một ETF ngành của SPDR, chia theo nửa năm và quý, một truy vấn.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerSự phân hóa là điểm mấu chốt: nhóm công nghệ (XLK) kết thúc nửa đầu năm tăng 30.8% — với một 42% trong quý hai — trong khi nhóm dịch vụ truyền thông (XLC) kết thúc -9.3%, tạo ra một spread khoảng bốn mươi điểm phần trăm giữa nhóm ngành tốt nhất và tệ nhất trong sáu tháng. Sở hữu "thị trường" đồng nghĩa với việc sở hữu cả hai đầu của khoảng cách đó. Năng lượng (XLE) là bài học cảnh báo về các chu kỳ dài: XLE cho thấy mức tăng trưởng 18.8% lành mạnh trong nửa đầu năm — được xây dựng từ một 36.9% trong quý một theo sau là một -11% trong quý hai. Đây là nhóm ngành vốn hóa lớn mạnh nhất thị trường trong quý mà các chỉ số sụt giảm, và nằm trong nhóm yếu nhất khi các chỉ số phục hồi. Nhóm tài chính (XLF) diễn biến ngược lại: -9.9% trong quý một, sau đó là 7.7% trong quý hai. Một con số duy nhất cho nửa đầu năm sẽ làm phẳng cả hai chu kỳ biến động; việc chia theo quý mới là cái nhìn trung thực nhất.
Chi phí giao dịch của từng nhóm ngành
Các bảng tỷ suất lợi nhuận xuất hiện ở khắp mọi nơi; nhưng các dải giá niêm yết thì không. Bảng này đo lường mức spread bid-ask trung vị của mỗi ETF nhóm ngành qua một phiên giao dịch đại diện đầy đủ — gồm 123 phiên trong nửa kỳ, và ngày 29 tháng 6 là phiên được đo lường ở đây, được dán nhãn tương ứng — từ mọi cập nhật NBBO trong ngày đó.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bpsMỗi một trong mười một mức giá chỉ chênh lệch vài điểm cơ bản hoặc ít hơn — thấp nhất là 0.62 bps (XLV), cao nhất là 2.23 bps (XLRE) — đây chính là ý nghĩa thực tế của cụm từ "các ETF nhóm ngành có tính thanh khoản cao": chi phí để mở một vị thế ở bất kỳ nhóm ngành nào đều được tính bằng phần trăm của một phần trăm. Để so sánh với các cổ phiếu riêng lẻ, phân tích chuyên sâu ngày 29 tháng 6 cho thấy spread của một mã cổ phiếu có thanh khoản thấp cao gấp hàng trăm lần các mức này trong cùng một phiên.
Độ rộng thị trường trong nửa kỳ
Độ rộng thị trường ở quy mô nửa kỳ được chia thành hai mức độ. Mức độ bao quát: SPY ghi nhận 64 phiên tăng so với 59 phiên giảm trong tổng số 123 của nửa kỳ — tỷ lệ gần như tương đương giữa các ngày tăng và giảm trong một nửa kỳ tăng trưởng ổn định, đây là biểu hiện của một xu hướng tăng chậm từ biểu đồ ngày. Mức độ chi tiết — tính trên mọi ticker — nằm ở quy mô tháng: tỷ lệ mã tăng/giảm của tháng 6 có trong bản tóm tắt tháng 6 (nhiều mã giảm hơn mã tăng), và số lượng mã theo ranh giới quý có trong bản tóm tắt Q2. Việc quét toàn bộ các mã tăng của cả sáu tháng vượt quá ngân sách truy vấn mà trang này có thể tạo ra; giới hạn đó được công bố tại đây thay vì tự ý thu hẹp phạm vi.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT countIf(day_ret > 0) AS up_sessions,
countIf(day_ret < 0) AS down_sessions,
countIf(day_ret = 0) AS flat_sessions,
count() AS sessions_total
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS day_ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
)Diễn biến thị trường options qua từng tháng
Dữ liệu nửa năm qua cho thấy sự thay đổi của thị trường options. Mỗi biểu đồ dưới đây là một bản quét toàn bộ thị trường trong một tháng — bao gồm tổng khối lượng hợp đồng và tỷ lệ giao dịch trong ngày đáo hạn (0DTE). Kết quả cho thấy: khối lượng giao dịch tăng từ 1316.1 triệu hợp đồng vào tháng Một lên 1477.9 triệu vào tháng Sáu — tháng bận rộn nhất trong nửa đầu năm. Tỷ lệ các hợp đồng đáo hạn trong ngày cũng tăng từ 26.5% vào tháng Một lên 34.3% vào tháng Sáu, mức cao nhất trong nửa đầu năm. Một phần ba khối lượng options của tháng Sáu được giao dịch ở các hợp đồng đáo hạn ngay trong ngày đó.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-02-01 00:00:00')Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-02-01 00:00:00')
AND window_start < toDateTime('2026-03-01 00:00:00')Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-03-01 00:00:00')
AND window_start < toDateTime('2026-04-01 00:00:00')Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-05-01 00:00:00')Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-05-01 00:00:00')
AND window_start < toDateTime('2026-06-01 00:00:00')Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')Chi phí giao dịch, lấy mẫu hàng tháng
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND ((sip_timestamp >= toDateTime64('2026-01-14 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-01-14 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-02-11 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-02-11 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-03-11 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-03-11 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))
GROUP BY session
ORDER BY session ASCMức spread trung vị được niêm yết của SPY vào ngày thứ Tư tuần thứ hai mỗi tháng: 0.145 bps trong mẫu tháng Một, 0.144 trong tháng Hai, xấp xỉ gấp đôi mức đó trong các mẫu mùa xuân, và 0.409 bps trong mẫu tháng Sáu — mức rộng nhất trong sáu tháng. Lưu ý về basis: đây là các phiên lấy mẫu đơn lẻ (ngày thứ Tư tuần thứ hai của mỗi tháng), không phải mức trung vị của cả tháng — việc quét toàn bộ bảng báo giá trong sáu tháng sẽ vượt quá ngân sách truy vấn của trang này. Các ngày lấy mẫu được hiển thị trong bảng, và các báo giá không hợp lệ được tính vào đó chứ không bị loại bỏ âm thầm.
Những cái tên nổi bật trong nửa đầu năm
Đây là các tên tuổi được đo lường dựa trên mức độ nổi bật, không phải do biên tập viên lựa chọn: danh sách dưới đây gồm các mã có khối lượng giao dịch tính theo USD cao nhất trong quý, được tính toán lại tại đây để đảm bảo tính minh bạch, và mỗi tên tuổi có phân tích chuyên sâu đều được liên kết trực tiếp.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8MU có khối lượng giao dịch vượt qua SPY trong quý hai ($2047.5 tỷ so với $2032 tỷ) — kết quả tương tự như trong bản tóm tắt Q2. Đối với sáu mã đơn lẻ trong nhóm dẫn đầu đó, kết quả nửa đầu năm là:
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'NVDA', 'TSLA', 'SNDK', 'AMD', 'INTC')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerNhóm ngành bộ nhớ và bán dẫn chiếm ưu thế trong nửa đầu năm: SNDK đạt lợi nhuận 830.1% trong sáu tháng, MU đạt 290% — phân tích chi tiết từng tick của mã này trong tháng 6 tại đây — và INTC đạt 269.3%. NVDA, mã có khối lượng giao dịch lớn nhất nhóm với doanh số nửa năm đạt $3287.9 tỷ, đạt lợi nhuận 5.2% — chỉ ở mức một chữ số trong khi các mã bộ nhớ tăng trưởng gấp nhiều lần; phân tích chuyên sâu tháng 6 của mã này trình bày sự phân kỳ đó theo từng phiên giao dịch. TSLA là mã duy nhất trong nhóm sụt giảm với mức -8.2%. Mã vốn hóa lớn niêm yết trong tháng 6 đang giao dịch dưới một ticker được tái sử dụng và bị loại khỏi các đợt quét dẫn đầu để chờ xác minh thực thể — tháng đầu tiên của mã này có bài viết chi tiết riêng. Cơ sở: nhóm dẫn đầu được chọn dựa trên khối lượng giao dịch tính theo USD trong giờ giao dịch chính thức của Q2 (theo kết quả quét ở trên); các cột lợi nhuận là kết quả của nửa đầu năm, tính từ giá mở cửa chính thức đầu tiên đến giá đóng cửa chính thức cuối cùng.
Làn sóng IPO của nửa đầu năm, theo từng tháng
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT toString(toStartOfMonth(listing_date)) AS m, count() AS listings
FROM global_markets.stocks_ipos
WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')
GROUP BY m
ORDER BY mLàn sóng niêm yết diễn ra tập trung vào đầu kỳ và không đồng đều: tháng Hai là tháng bận rộn nhất với 47 đợt niêm yết, trong khi tháng Ba là tháng ít hoạt động nhất với 17 đợt — đợt niêm yết lớn nổi tiếng vào tháng Sáu diễn ra trong một tháng có khối lượng giao dịch bình thường (35 đợt niêm yết).
Lịch trình nửa đầu năm
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-01-01') AND ex_dividend_date <= toDate('2026-06-30')) AS ex_div_events,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-01-01') AND execution_date <= toDate('2026-06-30')) AS splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')) AS ipos,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= toDate('2026-01-01') AND filing_date <= toDate('2026-06-30')) AS h1_filings,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')) AS filings_mar31,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS filings_apr30,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30205 công ty đã lên sàn trong nửa đầu năm — một làn sóng niêm yết mà đợt ra mắt lớn nhất vào tháng Sáu đã có bài viết chi tiết từng biên nhận riêng — cùng với 830 đợt chia tách cổ phiếu và 28356 sự kiện chia cổ tức. Để dễ hình dung, con số này tương đương với hơn một đợt niêm yết mới trong mỗi phiên giao dịch suốt nửa đầu năm. Tổng số hồ sơ đăng ký bao gồm một sự thiếu hụt dữ liệu cần lưu ý: chỉ số SEC gần như trống rỗng vào mỗi ngày cuối tháng của nửa đầu năm nếu ngày đó là ngày trong tuần (55 hồ sơ vào ngày 31 tháng 3, 34 vào ngày 30 tháng 4, và 31 vào ngày 30 tháng 6, so với hàng nghìn hồ sơ vào các ngày lân cận), do đó số lượng hồ sơ nửa đầu năm đang bị thấp hơn thực tế cho đến khi dữ liệu được cập nhật đầy đủ — khoảng trống cuối tháng có ghi chú chẩn đoán riêng.
Biên bản phiên giao dịch
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS h1_sessionsGhi chú dữ liệu
Ghi chú dữ liệu đầy đủ
- Short interest kết thúc vào ngày quyết toán 15 tháng 6 tính đến thời điểm tạo dữ liệu (đang chờ kết quả cuối tháng 6 — thông tin chi tiết trong bản tóm tắt tháng 6; bài viết này sẽ được cập nhật lại khi có dữ liệu mới).
- Ba ngày nộp hồ sơ cuối tháng của năm 2026 gần như trống rỗng (ngày 31 tháng 3, 30 tháng 4, 30 tháng 6 — tất cả các ngày cuối tháng của nửa đầu năm có ngày cuối cùng là ngày trong tuần); thông tin được công bố cùng với các số liệu thống kê, được phân tích trong ghi chú về khoảng trống cuối tháng. Các ngày cuối tháng của năm trước có hàng nghìn hồ sơ được nộp, vì vậy đây là lỗi thiếu dữ liệu truyền tải, không phải là ngày nghỉ nộp hồ sơ.
- Bảng xếp hạng ở quy mô nửa năm bị giới hạn: một đợt quét toàn thị trường trong sáu tháng vượt quá ngân sách truy vấn mà trang này có thể tạo ra, vì vậy tập hợp các tên tuổi đáng chú ý được chọn dựa trên đợt quét xếp hạng quy mô quý được hiển thị trực tiếp, và lợi nhuận nửa năm được tính toán cho tập hợp cố định đó — cơ sở tính toán được nêu rõ tại nơi sử dụng. Các bản tóm tắt Q2 và tháng 6 chứa đầy đủ các bảng xếp hạng theo quy mô tương ứng.
- Độ rộng toàn thị trường ở quy mô nửa năm cũng bị giới hạn — phân tách theo dữ liệu ngày được hiển thị; số lượng theo ticker nằm ở quy mô tháng và quý, được liên kết trong phần độ rộng.
- Chuỗi lịch sử QQQ ngắn hơn SPY: quỹ này đã giao dịch dưới một mã gốc khác trong một khoảng thời gian nhiều năm; bộ lọc số phiên loại trừ các năm đó một cách rõ ràng (số phiên theo từng năm nằm trong bảng).
- Sáu bảng options là các đợt quét hàng tháng trên toàn bộ tape và mẫu xu hướng spread chỉ lấy một phiên được dán nhãn mỗi tháng — cả hai đều chạy trên đường dẫn xử lý theo lô; cơ sở mẫu được nêu trực tiếp.
- Cấu trúc vi mô (microstructure) nằm trong phân tích chuyên sâu ngày 29 tháng 6.
Phương pháp luận
- Giai đoạn từ ngày 01 tháng 01 đến ngày 30 tháng 06 năm 2026 — 123 phiên, được xác minh từ các thanh nến quan sát được. Lợi nhuận được tính từ giá mở cửa phiên thường đầu tiên đến giá đóng cửa phiên thường cuối cùng trong mỗi khung thời gian, tất cả được tính toán theo các truy vấn tương tự như hiển thị.
- Các so sánh lịch sử được tính toán TRỰC TIẾP dựa trên toàn bộ dữ liệu phút tại thời điểm tạo — không bao giờ đọc từ các giá trị đã lưu trữ. Xác minh độ sâu: ngày của thanh nến phút sớm nhất trong chế độ xem trễ được sử dụng ở đây khớp với bảng cơ sở (tháng 9 năm 2003), đã được kiểm tra khi soạn thảo, do đó nửa đầu năm đầu tiên đầy đủ có trong hồ sơ là của năm 2004. Mọi truy vấn lịch sử đều chốt giới hạn trên tại thời điểm kết thúc giai đoạn này (tập hợp so sánh không thể tăng lên khi các năm sau được nạp vào) và áp dụng quy tắc bảo vệ số phiên tối thiểu với số phiên theo từng năm được hiển thị.
- Dấu thời gian được lưu trữ theo UTC với các giới hạn UTC thô. Các khối lịch sử nhiều năm lọc theo giờ giao dịch thường theo giờ Eastern (9:30–15:59, được chuyển đổi theo từng dòng — quy ước duy nhất an toàn với DST qua nhiều thập kỷ); các khối đơn khung thời gian trong phạm vi chỉ có EDT sử dụng dải UTC thô tương đương. Cả hai quy ước đều được nêu ở đây.
- Quá trình tạo dữ liệu chạy qua đường dẫn chỉ đọc được kiểm soát; trang công khai không bao giờ truy vấn trực tiếp. Trạng thái kho dữ liệu tính đến ngày 05 tháng 07 năm 2026.
Đây là ấn bản đầu tiên của bản tóm tắt bán niên định kỳ; ấn bản cả năm sẽ được phát hành vào tháng Giêng. Chi tiết quý: Quý 2 2026. Các dữ liệu macro mà nửa năm này được giao dịch đối chiếu nằm trong bức tranh macro.