Strasmore Research
Tổng hợp thị trường Matt ConnorBởi Matt Connor · Cập nhật 2026-07-23

Tổng kết thị trường ngày 29 tháng 6 năm 2026

Điểm tin ngày 29 tháng 6 năm 2026: chỉ số tăng trưởng mạnh, sector spread bốn điểm, biến động cổ phiếu memory và dữ liệu 0DTE cùng lãi suất.

Thứ Hai, ngày 29 tháng 6 năm 2026 là một ngày tăng điểm nhờ động lực tăng trưởng với nhóm dẫn dắt hẹp: QQQ tăng 2.57%, SPY tăng 1.62%, 3968 cổ phiếu thanh khoản cao tăng trong khi 2327 cổ phiếu giảm giá — tuy nhiên gần một nửa các rổ ngành đóng cửa ở sắc đỏ. Mọi con số đều được đọc từ truy vấn đã lưu; hãy mở rộng bất kỳ bảng nào để xem SQL. Dữ liệu chi tiết từng tick của phiên này: phân tích chuyên sâu về cấu trúc vi mô ngày 29 tháng 6.

Bảng điểm

Mọi thay đổi đều được so sánh giữa phút cuối của phiên giao dịch thường nhật ngày 29 tháng 6 với ngày 26 tháng 6 (thứ Sáu).

Truy vấnSPY / QQQ / DIA / IWM — 29/06 so với đóng cửa 26/06, giờ giao dịch chính thức
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH friday AS (
    SELECT ticker, argMax(close, window_start) AS friday_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00'
    GROUP BY ticker
),
monday AS (
    SELECT ticker,
           argMin(open, window_start) AS monday_open,
           argMax(close, window_start) AS monday_close,
           max(high) AS day_high,
           min(low) AS day_low,
           round(toFloat64(sum(volume)) / 1e6, 1) AS shares_traded_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
)
SELECT
    m.ticker AS ticker,
    toFloat64(f.friday_close) AS jun26_close,
    toFloat64(m.monday_open) AS jun29_open,
    toFloat64(m.monday_close) AS jun29_close,
    round((toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) * 100, 2) AS pct_change,
    round(100 * (toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) / max(toFloat64(m.monday_close) / toFloat64(f.friday_close) - 1) OVER (), 1) AS pct_of_best_change,
    toFloat64(m.day_high) AS day_high,
    toFloat64(m.day_low) AS day_low,
    m.shares_traded_m AS shares_traded_m
FROM monday m
JOIN friday f ON m.ticker = f.ticker
ORDER BY m.ticker

SPY mở cửa ở mức $736.525 so với mức đóng cửa $729.09 của thứ Sáu và kết thúc ở mức $740.88, thấp hơn mức cao nhất $741.56. Mức tăng +2.57% của QQQ so với mức tăng +0.81% của DIA cho thấy một ngày tăng trưởng mạnh ở nhóm cổ phiếu công nghệ; nhóm vốn hóa nhỏ IWM tăng thêm 0.45%.

Ngày hôm nay có bất thường không?

Biến động theo tỷ lệ phần trăm sẽ không có nhiều ý nghĩa nếu thiếu một thước đo so sánh. Bảng này xếp hạng ngày 29 tháng 6 so với tháng trước đó dựa trên giá trị tuyệt đối của mức chênh lệch giá đóng cửa.

Truy vấnQQQ và SPY: Xếp hạng ngày 29/06 so với tháng trước (rank 1 = biến động tuyệt đối lớn nhất)
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-06-29'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ') AS qqq_sessions_compared,
    round(max(if(ticker = 'QQQ', abs(cc_pct), 0)), 2) AS qqq_biggest_move_of_month_pct,
    countIf(ticker = 'QQQ' AND cc_pct > 0) AS qqq_up_sessions,
    round(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'SPY' AND d = toDate('2026-06-29'))), groupArrayIf(abs(cc_pct), ticker = 'SPY' AND d != toDate('2026-06-29'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-06-29')), 2) AS spy_open_to_close_pct,
    concat(monthName(min(d)), ' ', toString(toDayOfMonth(min(d))), ', ', toString(toYear(min(d)))) AS first_session
FROM (
    SELECT ticker, d,
           (close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct,
           oc_pct
    FROM (
        SELECT ticker,
               toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS close_px,
               (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'QQQ')
          AND window_start >= toDateTime('2026-05-28 00:00:00')
          AND window_start < toDateTime('2026-06-30 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, d
    )
)
WHERE isFinite(cc_pct)

Biến động lớn nhưng không phải kỷ lục: mức tăng 2.57% của QQQ xếp hạng thứ 5 trong số 21 phiên kể từ May 29, 2026, trong một tháng mà biến động đơn lẻ lớn nhất đạt 4.76%; mức tăng 1.62% của SPY xếp hạng thứ 4 trong số 21. Nguồn gốc của biến động rất quan trọng: mức tăng từ giá mở cửa đến giá đóng cửa của SPY chỉ đạt 0.59%, vì vậy phần lớn mức tăng đến từ khoảng trống gap qua đêm, trước khi có bất kỳ thanh nến nào trong giờ giao dịch chính thức được hình thành. QQQ đóng cửa cao hơn trong 10 số phiên đó: một tháng có kết quả tương đương với việc tung đồng xu.

Độ rộng thị trường: đà tăng mạnh đến mức nào?

Một mã advancer là ticker có giá đóng cửa thứ Hai cao hơn thứ Sáu, trong số các mã có khối lượng giao dịch ít nhất 1 triệu USD — bộ lọc này loại bỏ 5,108 của 11,475 ticker giao dịch trong cả hai phiên.

Truy vấnSố mã tăng so với số mã giảm trong các ticker có khối lượng giao dịch ít nhất $1M vào 29/06
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') AS monday_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
       OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000) AS advancers,
    countIf(monday_close < friday_close AND monday_dollar_volume >= 1000000) AS decliners,
    countIf(monday_close = friday_close AND monday_dollar_volume >= 1000000) AS unchanged,
    countIf(monday_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_label,
    count() - countIf(monday_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(monday_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_label,
    round(100.0 * countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000)
        / countIf(monday_dollar_volume >= 1000000), 1) AS advancer_pct
FROM per_ticker
WHERE friday_close > 0 AND monday_close > 0

3968 mã tăng, 2327 mã giảm, 72 mã không đổi: 62.3% các mã có thanh khoản tăng — tính toán từng mã một, một ngày giao dịch với độ rộng lớn.

Từng nhóm ngành: đà tăng trưởng hẹp hơn so với vẻ ngoài

Có hai cách nhìn nhận: tính toán dựa trên số lượng cổ phiếu hoặc tính theo quy mô vốn hóa của từng công ty. Mười một ETF theo nhóm ngành của SPDR là đại diện cho cách thứ hai — mỗi nhóm ngành là một rổ cổ phiếu được tính trọng số theo giá trị thị trường của S&P 500. Kết quả này khác biệt rõ rệt so với cách tính theo số lượng cổ phiếu.

Truy vấn11 nhóm ngành: 29/06 so với đóng cửa 26/06, giờ giao dịch chính thức
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') / 1e6, 0) AS dollar_volume_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
        OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    GROUP BY ticker
)
SELECT
    sector,
    ticker,
    round((monday_close / friday_close - 1) * 100, 2) AS pct_change,
    round((day_high / day_low - 1) * 100, 2) AS range_pct,
    dollar_volume_m,
    round((monday_close / friday_close - 1) * 100 - min((monday_close / friday_close - 1) * 100) OVER (), 2) AS pct_above_worst_sector
FROM (
    SELECT *,
        multiIf(ticker = 'XLB', 'Materials',
                ticker = 'XLC', 'Communication services',
                ticker = 'XLE', 'Energy',
                ticker = 'XLF', 'Financials',
                ticker = 'XLI', 'Industrials',
                ticker = 'XLK', 'Technology',
                ticker = 'XLP', 'Consumer staples',
                ticker = 'XLRE', 'Real estate',
                ticker = 'XLU', 'Utilities',
                ticker = 'XLV', 'Health care',
                'Consumer discretionary') AS sector
    FROM per_etf
)
ORDER BY pct_change DESC

Nhóm Technology dẫn đầu ở mức 2.52%, tiếp theo là consumer discretionary ở mức 2.37%; nhóm materials đóng cửa ở mức -1.82% và real estate ở mức -0.64%. Chênh lệch giữa nhóm tăng mạnh nhất và giảm mạnh nhất — mức độ phân tán của các nhóm ngành trong ngày — đạt 4.34 điểm phần trăm, với các nhóm utilities, staples, energy, real estate và materials đều giảm trong ngày mà chỉ số chung tăng điểm. Sự gia tăng của một quỹ chỉ số có thể che giấu thực tế: số lượng cổ phiếu tăng rộng nhưng trọng số thực tế lại hẹp.

Điểm nhấn trong ngày: bộ nhớ và lưu trữ

Bốn mã cổ phiếu cùng giao dịch theo một chủ đề nhưng có kết quả rất khác nhau — chỉ có sự biến động cùng chiều và biên độ; dữ liệu không cho biết lý do tại sao.

Truy vấnNhóm ngành bộ nhớ/lưu trữ: thay đổi so với đóng cửa thứ Sáu và biên độ intraday
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,
        maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-06-29 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-29 00:00:00') AS high_bar
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
        OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(friday_close, 2) AS jun26_close,
    round(monday_close, 2) AS jun29_close,
    round((monday_close / friday_close - 1) * 100, 2) AS pct_chg,
    round(day_high, 2) AS day_high,
    formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
    round(day_low, 2) AS day_low,
    formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
    round((day_high / day_low - 1) * 100, 2) AS range_pct
FROM per_name
ORDER BY ticker

MU là ví dụ điển hình về sự khác biệt giữa biên độ dao động và mức thay đổi thuần: biên độ trong ngày là 12.22% — mức thấp $1023.65 lúc 10:18 ET, mức cao $1148.79 lúc 15:59 — nhưng giá đóng cửa lại cao hơn 1.97% so với thứ Sáu. Western Digital tăng 11.15% và Seagate tăng 8.17%; SanDisk đóng cửa tại mức -1.9% trong biên độ 10.33% — là mã duy nhất trong nhóm giảm giá. Giá đóng cửa không phản ánh hết những biến động mà nhà đầu tư đã trải qua.

Dòng tiền giao dịch tập trung ở đâu

Xét về giá trị giao dịch tính bằng USD, Micron (MU) vượt xa tất cả, kể cả các quỹ chỉ số: 58.47 tỷ USD so với 33.97 tỷ USD của SPY. Nếu xét theo số lượng cổ phiếu, kết quả lại khác.

Truy vấnDẫn đầu về volume theo hai cách: top 6 theo giá trị giao dịch, top 4 theo số lượng cổ phiếu
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
    round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
        / max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
    ORDER BY dollar_volume_bn DESC
    LIMIT 6
    UNION ALL
    SELECT
        'by shares traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESC

Bảng thống kê số lượng cổ phiếu có thể gây nhầm lẫn: các mã dẫn đầu về số lượng là SOXS, một ETF nghịch đảo đòn bẩy 3x ngành bán dẫn (695.3 triệu cổ phiếu), và INLF, một cổ phiếu penny có 353.8 triệu cổ phiếu với tổng giá trị khoảng 23 triệu USD trong cả ngày. Khối lượng giao dịch theo USD cho thấy dòng tiền di chuyển ở đâu; khối lượng tương đối cho biết hoạt động của một mã có bất thường so với chính nó hay không.

Trong các khung thời gian 30 phút tại New York, ngày 29 tháng 6 thể hiện mô hình khối lượng hình "nụ cười" điển hình:

Truy vấnSố lượng cổ phiếu giao dịch mỗi khung 30 phút, giờ giao dịch chính thức (tỷ)
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
    round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket,
    round(100 * (sum(toFloat64(volume)) / min(sum(toFloat64(volume))) OVER () - 1), 1) AS pct_above_trough
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.3 tỷ cổ phiếu trong nửa giờ mở cửa, mức thấp nhất 0.77 tỷ tại 13:30, và khung giờ lớn nhất — 2.39 tỷ — vào nửa giờ đóng cửa, nơi tập trung các phiên đấu giá đóng cửa và dòng tiền theo chỉ số.

Thị trường options

66.33 triệu hợp đồng options đã được giao dịch qua 11.04 triệu lệnh khớp.

Truy vấnDữ liệu options trong ngày: volume, 0DTE, tuần điều chỉnh theo ngày lễ
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH
    (
        SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
                any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
                sum(size), count(), round(avg(toFloat64(price)), 3))
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
        GROUP BY ticker
        ORDER BY sum(size) DESC
        LIMIT 1
    ) AS top_contract,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    ) AS spy_regular_close
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260629') / sum(size), 1) AS same_day_expiry_pct,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,
    countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,
    countIf(sip_timestamp < '2026-06-29 13:30:00') AS premarket_prints,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(sip_timestamp < '2026-06-29 13:30:00'))), '[0-9]{1,3}'), ',')) AS premarket_prints_label,
    countIf(sip_timestamp < '2026-06-29 13:30:00'
        AND underlying_symbol NOT IN ('SPX', 'SPXW', 'XSP', 'RUTW', 'VIX', 'VIXW')) AS premarket_non_index_prints,
    arrayStringConcat(arraySort(groupUniqArrayIf(underlying_symbol, sip_timestamp < '2026-06-29 13:30:00')), ', ') AS premarket_underlyings,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
    top_contract.1 AS top_contract_underlying,
    top_contract.2 AS top_contract_strike,
    top_contract.3 AS top_contract_type,
    top_contract.4 AS top_contract_expiry,
    top_contract.5 AS top_contract_volume,
    reverse(arrayStringConcat(extractAll(reverse(toString(assumeNotNull(top_contract.5))), '[0-9]{1,3}'), ',')) AS top_contract_volume_label,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'

Các hợp đồng Call chiếm 55.7% khối lượng hợp đồng, và 35.8% tổng khối lượng giao dịch đã đáo hạn vào thứ Hai cùng ngày — cổ phiếu zero-days-to-expiry (0DTE). Hợp đồng đơn lẻ giao dịch nhiều nhất là lệnh call SPY $741 đáo hạn trong ngày: 788,133 hợp đồng với mức phí trung bình là $0.474, trong khi giá đóng cửa của SPY thấp hơn mức strike 0.12 đô la — quyền chọn giao dịch nhiều nhất trong ngày đã kết thúc ở trạng thái out of the money. SPY giao dịch 12.01 triệu hợp đồng dưới dạng tài sản cơ sở; QQQ là 7.32 triệu.

Bảng dữ liệu cũng ghi nhận 40,621 lệnh khớp option trước giờ mở cửa chứng khoán lúc 9:30 — tất cả đều là các lệnh trên chỉ số thanh toán bằng tiền mặt (RUTW, SPX, SPXW, VIX, VIXW, XSP), với 0 lệnh khớp option cổ phiếu hoặc ETF trong cùng khung giờ đó. Đây là quy định chứ không phải ngẫu nhiên: các quyền chọn chỉ số kéo dài theo phiên giao dịch toàn cầu, trong khi quyền chọn cổ phiếu và ETF mở cửa cùng lúc với thị trường chứng khoán. Cổ phiếu được giao dịch sớm — xem giao dịch premarket và after-hours — còn quyền chọn của chúng thì không.

Không có hợp đồng nào có mã đáo hạn vào thứ Sáu, ngày 3 tháng 7 được khớp trong ngày (0 lệnh) — vì thị trường đóng cửa vào thứ Sáu đó — trong khi các hợp đồng đáo hạn vào thứ Năm, ngày 2 tháng 7 giao dịch 10.73 triệu.

Bảng giá: chi phí giao dịch trong ngày

Mọi mức giá trên trang này đều dựa trên dòng báo giá — National Best Bid and Offer (NBBO), được cập nhật liên tục cho mọi mã niêm yết. Khoảng cách giữa giá mua tốt nhất và giá bán tốt nhất, bid-ask spread, chính là chi phí mà một lệnh phải trả để khớp lệnh.

Truy vấnChi phí để khớp spread: cập nhật NBBO và median quoted width, giờ giao dịch chính thức
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
    ticker,
    round(count() / 1e6, 2) AS nbbo_updates_m,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00'), 2) AS open_30min_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS midday_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 14:00:00')
        - quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-06-29 17:00:00' AND sip_timestamp < '2026-06-29 17:30:00'), 2) AS open_minus_midday_bps,
    countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid_quotes
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'MU', 'WDC')
  AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY ticker
ORDER BY ticker

Độ rộng báo giá trung vị của SPY là 0.41 điểm cơ bản so với mức giá trung bình, so với 0.84 của QQQ, 4.6 của Micron và 8.2 của Western Digital — mã có độ rộng lớn nhất trong bốn mã. Một điểm cơ bản của lệnh 10.000 USD là một USD, vì vậy việc mua và bán ngay lập tức 10.000 USD SPY theo giá báo sẽ tốn khoảng $0.41; cùng một giao dịch khứ hồi như vậy với Western Digital tốn $8.2. Quy mô giao dịch không đổi; chỉ có mã chứng khoán thay đổi.

Cả bốn mã đều có độ rộng báo giá trong nửa giờ đầu phiên lớn hơn so với khung thời gian kiểm soát giữa ngày — SPY là 0.41 bps so với 0.27, Western Digital là 14.33 so với 7.55, mức chênh lệch mở phiên cao hơn 6.78 bp ở mã có độ rộng lớn nhất. Tần suất cập nhật là yếu tố còn lại: có 3.98 triệu cập nhật NBBO đối với SPY trong giờ giao dịch bình thường, và 4.42 triệu đối với QQQ.

Lãi suất: đường cong lợi suất gần như không biến động

Thị trường trái phiếu Chính phủ Mỹ có một ngày thứ Hai tĩnh lặng. Các mức lợi suất được tính theo giá đóng cửa hàng ngày, so với ngày 26 tháng 6.

Truy vấnĐường cong lợi suất Treasury, đóng cửa 29/06 so với 26/06 (chỉ các kỳ hạn có dữ liệu)
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jun29_yield_pct,
    round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(mon.yield_1_month),  toFloat64(fri.yield_1_month)),
        ('3 month',  toFloat64(mon.yield_3_month),  toFloat64(fri.yield_3_month)),
        ('1 year',   toFloat64(mon.yield_1_year),   toFloat64(fri.yield_1_year)),
        ('2 year',   toFloat64(mon.yield_2_year),   toFloat64(fri.yield_2_year)),
        ('5 year',   toFloat64(mon.yield_5_year),   toFloat64(fri.yield_5_year)),
        ('10 year',  toFloat64(mon.yield_10_year),  toFloat64(fri.yield_10_year)),
        ('30 year',  toFloat64(mon.yield_30_year),  toFloat64(fri.yield_30_year)),
        ('2s10s spread', toFloat64(mon.yield_10_year - mon.yield_2_year), toFloat64(fri.yield_10_year - fri.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS mon,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-26') AS fri
)

Lợi suất kỳ hạn 10 năm đóng cửa ở mức 4.38%, không đổi trong ngày (0 bp), trong khi kỳ hạn 3 tháng tăng thêm 4 bp lên mức 3.87%. 2s10s spread — chênh lệch giữa kỳ hạn 10 năm và 2 năm — đóng cửa ở mức 0.28 điểm phần trăm (-3 bp): vẫn ở mức dương, nhưng phẳng hơn một chút.

Lịch trình trong ngày

Truy vấnLịch sự kiện doanh nghiệp và dòng thông tin ngày 29/06, trong một dòng
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH
    (
        SELECT (argMax(d, n), max(n))
        FROM (
            SELECT ex_dividend_date AS d, count() AS n
            FROM global_markets.stocks_dividends
            WHERE ex_dividend_date BETWEEN '2026-06-22' AND '2026-07-02'
            GROUP BY d
        )
    ) AS peak_ex_div,
    (
        SELECT (countIf(form_type = '424B2'), countIf(form_type = '4'), countIf(form_type = '8-K'), count())
        FROM global_markets.stocks_sec_edgar_index
        WHERE filing_date = '2026-06-29'
    ) AS filings,
    (
        SELECT (count(), uniqExact(publisher), countIf(has(tickers, 'NVDA')))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-29'
    ) AS news,
    (
        SELECT max(n)
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-29'
            )
            WHERE t NOT IN ('NVDA', 'SPCX')
            GROUP BY t
        )
    ) AS runner_up_articles,
    (
        SELECT (any(split_from), any(split_to), count())
        FROM global_markets.stocks_splits
        WHERE ticker = 'HON' AND execution_date = '2026-06-29'
    ) AS hon_split,
    (
        SELECT (
            round(toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')), 2),
            round(toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')), 2)
        )
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'HON'
          AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')
            OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))
    ) AS hon_close
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29') AS ex_dividend_records_jun29,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-29'
        AND ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
                       'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
                       'SPY', 'QQQ', 'DIA', 'IWM', 'VTI')) AS household_name_ex_dividends,
    length(['AAPL', 'MSFT', 'NVDA', 'AMZN', 'GOOGL', 'GOOG', 'META', 'TSLA', 'JPM', 'JNJ',
            'XOM', 'KO', 'PG', 'V', 'MA', 'HD', 'WMT', 'CVX', 'MRK', 'PEP',
            'SPY', 'QQQ', 'DIA', 'IWM', 'VTI']) AS household_names_checked,
    concat(monthName(peak_ex_div.1), ' ', toString(toDayOfMonth(peak_ex_div.1))) AS busiest_ex_div_day_of_window,
    peak_ex_div.2 AS busiest_ex_div_day_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-29') AS splits_executed,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-29') AS ipos_listed_jun29,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM (
        SELECT ticker FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-01' ORDER BY ticker
    )) AS jul1_ipo_debuts,
    filings.4 AS sec_filings,
    filings.1 AS prospectus_424b2_filings,
    filings.2 AS insider_form4_filings,
    filings.3 AS filings_8k,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    news.3 AS nvda_articles,
    runner_up_articles AS next_most_covered_articles,
    news.3 - runner_up_articles AS nvda_minus_next_most_covered,
    hon_split.3 AS hon_split_records,
    hon_split.1 AS hon_split_from,
    hon_split.2 AS hon_split_to,
    hon_close.1 AS hon_close_jun26,
    hon_close.2 AS hon_close_jun29

449 hồ sơ cổ tức đã đến ngày giao dịch không hưởng quyền vào ngày 29 tháng 6 — bạn cần sở hữu cổ phiếu trước ngày giao dịch không hưởng quyền để được nhận thanh toán — tuy nhiên trong số 25 thương hiệu gia đình mà chúng tôi đã kiểm tra, chỉ có 0 xuất hiện. Làn sóng cuối quý đạt đỉnh với 745 hồ sơ vào ngày July 1. 23 đợt chia tách cổ phiếu đã thực hiện và 0 IPO đã niêm yết, các đợ bản chào hàng mới vào thứ Tư (BSP, ITG, LIME) cũng đã có trên lịch trình.

SEC đã ghi nhận 6173 hồ sơ tính đến ngày 29 tháng 6: 1473 bản bổ sung định giá sản phẩm cấu trúc (mẫu 424B2) và 1277 báo cáo giao dịch nội bộ (Mẫu 4) áp đảo con số 231 báo cáo 8-K thường xuất hiện trên tiêu đề báo chí. Nguồn tin của chúng tôi đã đăng 170 bài viết từ 3 nhà xuất bản; ngoại trừ một mã chứng khoán được gắn thẻ không rõ ràng (đã bị loại khỏi truy vấn), cái tên được đề cập nhiều nhất là NVDA với 14 bài viết so với 12 của đối thủ đứng thứ hai.

Ghi chú dữ liệu

Dữ liệu bất thường sẽ được ghi chú thay vì bị loại bỏ âm thầm — bốn điểm sau đây ảnh hưởng đến các con số tiêu đề.

  • Các rổ ngành (sector baskets) được xác định theo phương pháp cố định. "Sector" ở đây là mười một ETF ngành của SPDR, được tính theo trọng số vốn hóa thị trường — cùng một danh mục mỗi phiên, không phải phân loại theo từng ticker của nhà cung cấp.
  • Dollar volume là đại diện tính theo từng phút — là tổng của (giá đóng cửa × khối lượng) trong mỗi thanh nến phút, gần bằng nhưng không hoàn toàn trùng khớp với tổng giá trị khớp lệnh.
  • Quoted spreads loại bỏ các báo giá không hợp lệ (các bản ghi NBBO một chiều hoặc bị chéo); bảng thống kê ghi nhận số lượng đã loại bỏ (1544 trên SPY). Độ rộng báo giá trung vị là một thống kê báo giá, không phải chi phí trên mỗi giao dịch — các lệnh thường được thực hiện bên trong mức báo giá.
  • Một lệnh khớp đơn lẻ có thể làm sai lệch mức cao nhất hoặc thấp nhất của một thanh nến phút. Thanh nến lúc 11:07 ET của QQQ có mức thấp $709.58 trong khi không có thanh nến lân cận nào xuống dưới $715.09 — một lệnh khớp thấp hơn $5.51 so với thị trường tại thời điểm đó. Mọi mức cao và thấp trước đó đã được đối chiếu với các thanh nến liền kề; mức thấp nhất phiên $705.172 của QQQ đã được xác nhận.
Ghi chú dữ liệu đầy đủ
  • Phạm vi bao phủ trái phiếu kho bạc hẹp hơn so với sơ đồ. Bốn kỳ hạn được quảng cáo (6 tháng, 3 năm, 7 năm và 20 năm) chưa bao giờ được đổ dữ liệu; đường cong lãi suất hiển thị bảy kỳ hạn hiện có, cộng với dòng 2s10s.
  • Dữ liệu về "reverse split" của Honeywell mâu thuẫn với lịch sử giao dịch. Nguồn dữ liệu chứa bản ghi 1 của HON ngày 29 tháng 6: một đợt reverse split chuyển đổi 2 cổ phiếu cũ thành 1 cổ phiếu mới. HON đóng cửa ở mức $231.3 thứ Sáu và $227.71 thứ Hai — không có sự nhân đôi nào. Chúng tôi không áp dụng điều chỉnh này.
  • Số lượng tin tức đến từ nguồn của một nhà cung cấp, cụ thể là 3 nhà xuất bản mà chúng tôi sử dụng — không phải là "tất cả tin tức thị trường".
  • Các ghi nhận ở cấp độ tick — báo giá chéo, hiệu chỉnh khối lượng ảo, tệp khối lượng bán khống bị cắt ngắn của FINRA (và lý do tại sao short volume không phải là short interest) — nằm trong phân tích chuyên sâu.

Phiên giao dịch, đã xác thực

Truy vấnKiểm tra phiên: biên độ minute-bar của SPY và giá đóng cửa thứ Sáu trên tape
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH
    (
        SELECT (
            round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '11:07')), 2),
            round(toFloat64(minIf(low, formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') IN ('11:04', '11:05', '11:06', '11:08', '11:09', '11:10'))), 2)
        )
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'QQQ' AND window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'
    ) AS qqq_lone
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-03 00:00:00' AND window_start < '2026-07-04 00:00:00') AS jul3_spy_bars,
    formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
    formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00') AS regular_session_bars,
    qqq_lone.1 AS qqq_1107_lone_low,
    qqq_lone.2 AS qqq_1107_adjacent_bars_low,
    round(qqq_lone.2 - qqq_lone.1, 2) AS qqq_lone_print_below_adjacent
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'

Các thanh nến của SPY chạy từ 04:00 đến 19:59 theo giờ New York với chính xác 390 thanh nến trong khung giờ giao dịch bình thường — một phiên giao dịch đầy đủ, đã được xác thực từ tape (dữ liệu lịch giao dịch của sàn chỉ bao gồm các ngày nghỉ sắp tới). Thứ Sáu, ngày 3 tháng 7 đó là một phiên giao dịch đầy đủ — 0 các thanh nến SPY xuất hiện suốt cả ngày, trong khi ngày 4 tháng 7 rơi vào thứ Bảy; tuần gồm bốn phiên giao dịch đã có bản tóm tắt riêng.

FAQ

Thị trường chứng khoán ngày 29 tháng 6 năm 2026 diễn biến thế nào?

Thị trường tăng điểm nhờ nhóm cổ phiếu tăng trưởng: QQQ đóng cửa cao hơn 2.57% so với thứ Sáu, SPY 1.62%, DIA 0.81% và IWM 0.45%, với 62.3% ticker giao dịch từ 1 triệu USD trở lên kết thúc ở mức cao hơn.

Ngày 29 tháng 6 năm 2026 có phải là một ngày lớn đối với Nasdaq không?

Có biến động lớn nhưng không quá đặc biệt: mức thay đổi đóng cửa so với đóng cửa của QQQ là 2.57%, xếp thứ 5 trong số 21 phiên của tháng trước xét về giá trị tuyệt đối, so với mức cao nhất trong tháng là 4.76%.

Những nhóm ngành nào dẫn dắt thị trường vào ngày 29 tháng 6 năm 2026?

Công nghệ (2.52%) và tiêu dùng không thiết yếu (2.37%) dẫn đầu trong mười một rổ ngành của SPDR; nhóm nguyên vật liệu đứng cuối với -1.82%, với spread là 4.34 điểm phần trăm. Các nhóm tiện ích, hàng tiêu dùng thiết yếu, năng lượng và bất động sản cũng đóng cửa ở mức thấp hơn.

Tỷ trọng khối lượng giao dịch options 0DTE vào ngày 29 tháng 6 năm 2026 là bao nhiêu?

Các hợp đồng đáo hạn trong ngày chiếm 35.8% trong tổng số 66.33 triệu hợp đồng được giao dịch; hợp đồng đơn lẻ bận rướ nhất là quyền chọn mua SPY giá $741 đáo hạn trong ngày (788,133 hợp đồng), kết thúc ở trạng thái out of the money.

Tại sao options được giao dịch trước khi thị trường chứng khoán mở cửa?

Chỉ có index options mới có đặc điểm này. Tất cả 40,621 lệnh khớp options trước 9:30 sáng ET ngày 29 tháng 6 đều thuộc các chỉ số thanh toán bằng tiền mặt (RUTW, SPX, SPXW, VIX, VIXW, XSP), vốn niêm yết các phiên giao dịch toàn cầu kéo dài; số lượng lệnh khớp cho stock và ETF options trong khung giờ đó là 0.

Phương pháp luận

  • Dấu thời gian được lưu trữ theo múi giờ UTC và được chuyển đổi sang giờ New York trong các truy vấn. "Close" là phút cuối cùng của phiên giao dịch chính thức, không phải giá khớp lệnh phiên đấu giá; các thay đổi ngày được so sánh giữa ngày 29 tháng 6 với ngày 26 tháng 6, và phiên giao dịch đã được xác minh dựa trên phạm vi thanh nến quan sát được.
  • Xếp hạng tháng trước đó sử dụng biến động đóng cửa so với đóng cửa trong giờ giao dịch chính thức, loại bỏ phiên đầu tiên (không có giá đóng cửa trước đó trong khung thời gian). Ngày đáo hạn quyền chọn được phân tích lại từ ticker của OCC (cột ngày đáo hạn trong bảng hiện đang bị lỗi).
  • Mỗi bảng được đọc một lần tại thời điểm tác giả thực hiện, thông qua đường dẫn chỉ đọc được kiểm soát. Trạng thái kho dữ liệu tính đến ngày 13 tháng 7 năm 2026.

Mỗi bảng là kết quả của một truy vấn đã lưu — bao gồm biểu đồ, bảng và SQL trong cùng một đối tượng. Bạn có thể dán bất kỳ bảng nào vào terminal Strasmore. Phiên tiếp theo: ngày 30 tháng 6.