Strasmore Research
Marktoverzichten Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-02

Marktoverzicht 29 juli 2026: de dag in cijfers

Marktoverzicht van 29 juli 2026 met indexscorebord, breedte, sector spread, options flow, rates en calendar. Bekijk alle query-onderbouwde cijfers.

Deze marktterugblik voor woensdag 29 juli 2026 leest de volledige sessie uit opgeslagen queries: de verandering van SPY ten opzichte van de vorige slotkoers kwam uit op -1.52%, het aandeel stijgers in de liquide markt op 27.2% en op de options tape werden 66.84 miljoen contracten uitgevoerd. Elk hieronder weergegeven tijdvenster is aan beide kanten aan expliciete datums gekoppeld. Bij het opnieuw uitvoeren van de SQL-query van een paneel komen dezelfde cijfers terug.

Het scorebord

Elke verandering vergelijkt de laatste minuutbar van de reguliere sessie op 29 juli met die van dinsdag 28 juli, dus twee opeenvolgende handelssessies. De rijen staan alfabetisch, zodat elke ETF een vaste positie behoudt.

QuerySPY / QQQ / DIA / IWM: 29 juli versus slotkoers van 28 juli, reguliere handelsuren
De exacte SQL achter elk getal
WITH prior AS (
    SELECT ticker, argMax(close, window_start) AS prior_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00'
    GROUP BY ticker
),
sess AS (
    SELECT ticker,
           argMin(open, window_start) AS day_open,
           argMax(close, window_start) AS day_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-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
    GROUP BY ticker
)
SELECT
    s.ticker AS ticker,
    round(toFloat64(p.prior_close), 2) AS prior_close,
    round(toFloat64(s.day_open), 2) AS day_open,
    round(toFloat64(s.day_close), 2) AS day_close,
    round((toFloat64(s.day_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
    round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
    round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
    round(toFloat64(s.day_high), 2) AS day_high,
    round(toFloat64(s.day_low), 2) AS day_low,
    s.shares_traded_m
FROM sess s LEFT JOIN prior p ON s.ticker = p.ticker
ORDER BY ticker
Run this yourself

DIA bewoog -2.19%, IWM -1.63%, QQQ -2.07% en SPY -1.52% naar een slot op $729.51. Elke rij splitst de beweging op in twee delen: SPY opende -0.11% ten opzichte van het slot van dinsdag en bewoog van opening tot slot -1.41%. De overnight-leg en de intraday-leg hoeven niet overeen te komen. De verdeling ertussen vormt de eerste vingerafdruk van een sessie.

Was de dag uitzonderlijk?

Het cijfer van één sessie zegt weinig zonder de onderliggende verdeling. Daarom wordt de dag volgens dezelfde methode gerangschikt binnen de eigen voorafgaande maand.

QueryDagbeweging SPY in voortschrijdende context (open-to-close, 29 juni tot en met 29 juli)
De exacte SQL achter elk getal
SELECT
    round(anyIf(oc_pct, d = toDate('2026-07-29')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-29'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-29'))) + 1 AS spy_abs_move_rank,
    count() AS spy_sessions_compared,
    toString(min(d)) AS first_session
FROM (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-06-29 13:30:00')
      AND window_start < toDateTime('2026-07-30 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY d
)
Run this yourself

De beweging van SPY van opening tot sluiting van -1.41% stond op plaats 1 van 22 voorafgaande sessies, gemeten naar absolute omvang, in een periode die teruggaat tot 2026-06-29. De rangorde telt hoeveel andere sessies in die periode een grotere beweging lieten zien, plus één. De eerste plaats zou dus de grootste beweging van de voorafgaande maand zijn.

Marktbreedte

Een indexniveau is één getal. De marktbreedte laat zien hoeveel aandelen zich in dezelfde richting bewogen.

QueryBreadth van liquide tape: slotkoers 29 juli versus slotkoers 28 juli, $1M-traded filter
De exacte SQL achter elk getal
SELECT
    countIf(c29 > c28 AND liquid) AS advancers,
    countIf(c29 < c28 AND liquid) AS decliners,
    countIf(c29 = c28 AND liquid) AS unchanged,
    countIf(liquid) AS liquid_tickers,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(c29 > c28 AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, c28, c29, dv29 >= 1000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv29
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0
    )
)
Run this yourself

Van de 6066 aandelen die tijdens de reguliere handelsuren een omzetdrempel van één miljoen dollar overschreden, sloten 1652 boven de slotstand van dinsdag en 4342 daaronder. Het aandeel stijgers bedroeg 27.2%. De filter liet 5363 minder liquide aandelen buiten beschouwing; deze zijn hier meegeteld en niet stilzwijgend verwijderd.

De mega-caplijst

Dezelfde acht mega-capnamen verschijnen elke sessie, alfabetisch gerangschikt zodat elke naam zijn eigen rij behoudt. Een vaste basket is het uitgangspunt: de lezer leert de rijen kennen en geen enkele naam wordt achteraf op redactionele gronden als winnaar aangewezen.

QueryAcht mega-caps: verandering versus 28 juli en dollars tijdens reguliere handelsuren, 29 juli
De exacte SQL achter elk getal
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-29 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-29 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'AMZN', 'AVGO', 'GOOGL', 'META', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
        OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close, 2) AS prior_close,
    round(day_close, 2) AS day_close,
    round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
    day_dollar_bn
FROM per_name
ORDER BY ticker
Run this yourself

AAPL bewoog -0.63%, META -1.12%, MSFT -0.27% en NVDA -3.51% bij een omzet in de reguliere handelsuren van 22.26 miljard dollar, met TSLA op -2.97%. De dollarkolom laat zien welk deel van de tape deze acht namen zelfstandig voor hun rekening nemen. Het breadth-panel hierboven laat zien in hoeverre de rest van de markt met hen meebewoog.

De movers van de dag

Voor beide boards is een omzet van vijf miljoen dollar tijdens reguliere handelsuren vereist. Daarnaast wordt elk aandeel uitgesloten waarvan de stock split is uitgevoerd tussen de twee slotkoersen die zij meten. Ook wordt één hergebruikt symbool uitgesloten op basis van de in de notities beschreven interne ambiguïteitsregel.

QueryGrootste stijgers en dalers: slotkoers 29 juli versus slotkoers 28 juli, $5M+ traded, splits uitgesloten
De exacte SQL achter elk getal
SELECT ticker, board, day_pct, day_dollar_m
FROM (
    SELECT 'gainers' AS board, ticker, round((c29 / c28 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-28' AND execution_date <= '2026-07-29')
          AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct DESC
    LIMIT 8
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((c29 / c28 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-28' AND execution_date <= '2026-07-29')
          AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct ASC
    LIMIT 8
)
ORDER BY board DESC, abs(day_pct) DESC
Run this yourself

De grootste stijger op het board, DFNS, steeg 119.8% bij een verhandeld bedrag van 544.9 miljoen dollar. De sterkste daler, YYAI, noteerde -68.1% bij een verhandeld bedrag van 8.5 miljoen dollar. Deze pagina registreert de omvang en de receipts, maar verbindt daar geen verklaring aan.

Sectorale spreiding

De elf SPDR-select-sectorfondsen, de slotkoers van 29 juli ten opzichte van die van 28 juli, gerangschikt van best naar slechtst. De mand is vooraf vastgesteld en niet gebaseerd op een classificatie van een dataleverancier.

QuerySector-ETF's, slotkoers 29 juli versus slotkoers 28 juli, gerangschikt
De exacte SQL achter elk getal
SELECT sector, day_pct, round(max(day_pct) OVER () - day_pct, 2) AS points_behind_best
FROM (
    SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
                   ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
                   ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
                   ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
           round((c29 / c28 - 1) * 100, 2) AS day_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-29 00:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 00:00:00') AS c29
        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-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
            OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'))
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0
    )
)
ORDER BY day_pct DESC
Run this yourself

Energy stond bovenaan met 1.89%, terwijl Industrials onderaan stond met -3.21%, 5.1 procentpunt lager. Die spread vormt de sectorale spreiding van de dag. Een markt waarin alle elf fondsen binnen één punt eindigen, ziet er heel anders uit dan een markt waarin de verschillen meerdere punten bedragen.

Waar de dollars werden verhandeld

QueryTop 6 naar traded dollars, top 4 naar traded shares: reguliere handelsuren 29 juli
De exacte SQL achter elk getal
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
    round(1000 * dollar_volume_bn / shares_m, 2) AS implied_avg_price
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
      AND ticker NOT IN ('SPCX')
    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(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard, if(leaderboard = 'by shares traded', shares_m, dollar_volume_bn) DESC
Run this yourself

MU voerde het dollaroverzicht aan met een omzet van 44.99 miljard tijdens de reguliere handelstijden. SPY volgde met 42.29 miljard. Het aandelenoverzicht beantwoordt een andere vraag: SNXX stond bovenaan met 173.4 miljoen aandelen, tegen een impliciete gemiddelde prijs van $7.32. Het dollarvolume laat zien waar de aandacht van de markt ligt, terwijl het aandelenvolume de handelsactiviteit weergeeft. De maatstaf per naam is relatieve volume.

De options tape

QueryOptions tape: contracten, call-aandeel, same-day-aandeel versus dinsdag, drukst verhandelde SPY-contract
De exacte SQL achter elk getal
WITH
    (
        SELECT (strike, typ, vol_m, is_0dte)
        FROM (
            SELECT toFloat64(any(strike_price)) AS strike, any(option_type) AS typ,
                   round(toFloat64(sum(size)) / 1e6, 2) AS vol_m,
                   if(substring(ticker, length(ticker) - 14, 6) = '260729', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
              AND underlying_symbol = 'SPY'
            GROUP BY ticker
            ORDER BY vol_m DESC, strike ASC
            LIMIT 1
        )
    ) AS top_spy,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
    ) AS jul28_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260728') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
    ) AS jul28_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul28_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) = '260729') / sum(size), 1) AS pct_0dte,
    jul28_pct_0dte,
    spy_regular_close,
    top_spy.1 AS top_spy_strike,
    top_spy.2 AS top_spy_type,
    top_spy.3 AS top_spy_contracts_m,
    top_spy.4 AS top_spy_is_0dte,
    round(top_spy.1 - spy_regular_close, 2) AS top_spy_strike_minus_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

De options tape registreerde 11.03 miljoen transacties voor 66.84 miljoen contracten, tegenover 59.28 miljoen op dinsdag. Calls waren goed voor 53.6% van het contractvolume. Contracten die tijdens dezelfde sessie afliepen, de groep met zero days to expiry, waren goed voor 33.1%, tegenover 29% op dinsdag. Dit ritme werd bepaald door het tijdstip van expiratie. Het drukst verhandelde SPY-contract was de 735 P, met 0.36 miljoen contracten. De strike lag 5.49 dollar van de reguliere slotkoers van SPY op $729.51, berekend als strike minus slotkoers.

De quote-tape

De quotegegevens zijn de meest schaarse dataset van deze desk en worden elke sessie gemeten. Ook gewone dagen worden geregistreerd.

QueryAantal NBBO-updates voor aandelen: 29 juli versus 28 juli, met updates van genoemde tickers (miljoenen)
De exacte SQL achter elk getal
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / 1e6, 2) AS jul29_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / 1e6, 2) AS jul28_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / countIf(toDate(sip_timestamp) = toDate('2026-07-28')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'SPY') / 1e6, 2) AS jul29_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'QQQ') / 1e6, 2) AS jul29_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'NVDA') / 1e6, 2) AS jul29_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

De quote-tape voor aandelen bevatte 722.65 miljoen NBBO-updates, tegenover 536.07 miljoen op dinsdag. Dat is een verandering van 34.8% op dagbasis. SPY noteerde 7.32 miljoen updates, QQQ 8.72 miljoen en NVDA 4.41 miljoen.

QueryZeven namen: mediane quoted spread tijdens RTH in basis points, met aantallen voor quote quality, 29 juli
De exacte SQL achter elk getal
SELECT ticker,
       round(quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
       round(count() / 1e6, 2) AS quote_updates_m,
       countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
       countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'DIA', 'IWM', 'NVDA', 'QQQ', 'SPY', 'TSLA')
  AND sip_timestamp >= '2026-07-29 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00'
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY ticker
Run this yourself

De mediane spread van de reguliere handelsuren voor SPY bedroeg 0.27 basis points van de mid. Voor QQQ was dat 0.75 en voor NVDA 1.55. De laatste twee kolommen vormen de disclosure: one-sided en crossed quotes worden per naam geteld en buiten de mediaan gehouden, in plaats van stilzwijgend te worden verwijderd. Een crossed quote, waarbij de bid boven de ask ligt, is een normaal bijproduct van een geconsolideerde feed die op nanoseconde-niveau uit meerdere handelsplatformen wordt samengesteld.

QueryMediane spread van SPY gerangschikt tegenover elke julisessie, strakste eerst
De exacte SQL achter elk getal
SELECT round(anyIf(spread_bps, d = toDate('2026-07-29')), 2) AS jul29_median_spread_bps,
       arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-29')), groupArrayIf(spread_bps, d != toDate('2026-07-29'))) + 1 AS rank_tightest,
       count() AS sessions_compared,
       toString(min(d)) AS first_session
FROM (
    SELECT toDate(sip_timestamp) AS d,
           quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-07-01 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
    HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
)
Run this yourself

Vergeleken met elke julisessie op basis van dezelfde methode viel de mediane spread van SPY van 0.27 basis points op de dag op 20 van 20, gerekend vanaf de krapste spread, binnen een periode die begon op 2026-07-01. Op een rustige tape is dat precies de boodschap van dit panel: een gewone liquiditeitsdag is een bevinding die wordt gepubliceerd en afgebakend.

QueryOptions NBBO-tape: totale updates versus de aandelentape, plus het SPY-rootsegment, 29 juli
De exacte SQL achter elk getal
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_stock_quote_rows
SELECT
    round(jul29_options_rows / 1e9, 2) AS jul29_options_bn,
    round(jul29_options_rows / jul29_stock_quote_rows, 1) AS options_to_stock_ratio,
    round((SELECT count() FROM global_markets.cache_options_quotes WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27' AND sip_timestamp >= '2026-07-29 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00') / 1e6, 0) AS jul29_spy_options_m
Run this yourself

De NBBO-tape voor opties bevatte 13.55 miljard updates, 18.8 keer zoveel als de quote-tape voor aandelen. Alleen al de SPY-root noteerde 600 miljoen updates tijdens de reguliere handelsuren.

Rentes

QueryTreasury-curve prints in het bestand, 24 juli tot en met 29 juli
De exacte SQL achter elk getal
SELECT toString(date) AS date,
       round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
       round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
       round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
       round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-24' AND date <= '2026-07-29'
ORDER BY date
Run this yourself

Het bestand van Treasury loopt ongeveer één sessie achter op de tape. Dit paneel toont daarom de uitgevoerde trades die het bestand bevat: 4 gedateerde rijen in het venster. De meest recente rij, gedateerd 2026-07-29, zette de tweejaarsrente op 4.22%, de tienjaarsrente op 4.67% en de dertigjaarsrente op 5.2%. De spread tussen de tweejaars- en tienjaarsrente bedroeg 45 basis points.

De kalender achter de handelsdag

QueryEx-dividends, splits, listings, nieuws en de SEC filing-mix van 29 juli
De exacte SQL achter elk getal
WITH
    (
        SELECT (argMax(t, (n, t)), max(n))
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), uniqExact(cik), countIf(form_type = '4'), countIf(form_type = '8-K'), countIf(form_type = '424B2'), countIf(form_type = '10-Q'))
        FROM global_markets.stocks_sec_edgar_index
        WHERE filing_date = '2026-07-29'
    ) AS fil
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-29') AS ex_dividend_records,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-29') AS listings,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00') AS news_articles,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00') AS news_publishers,
    top_news.1 AS top_news_ticker,
    top_news.2 AS top_news_n,
    fil.1 AS fil_total,
    fil.2 AS fil_filers,
    fil.3 AS fil_form4,
    fil.4 AS fil_8k,
    fil.5 AS fil_424b2,
    fil.6 AS fil_10q
Run this yourself

85 dividendregistraties gingen op 29 juli ex-dividend, 2 omgekeerde en 1 gewone splits werden uitgevoerd en 1 nieuwe beursnoteringen kwamen op de tape. De nieuwsfeed bevatte 190 artikelen van 2 uitgevers. Daarvan betrof NVDA de ticker met de meeste berichtgeving in het venster van deze feed, met 13 artikelen. De dagelijkse EDGAR-index bevat voor deze datum 5742 filings van 3064 verschillende indieners: 712 insider-rapporten op Form 4, 440 actuele 8-K-rapporten, 884 prijsbijlagen op Form 424B2 en 174 kwartaalrapporten op Form 10-Q. Deze index verschijnt volgens een eigen schema. Dit paneel rapporteert de gegevens die op het moment van genereren beschikbaar zijn.

Op de agenda

Lees de rest van de week uit dezelfde tabellen en kijk daarbij bewust voorbij de periode.

Query30 en 31 juli op de kalender: sluitingen, ex-dividends, splits, de vrijdagexpiratie en de lag in short interest
De exacte SQL achter elk getal
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-30' AND date <= '2026-07-31' AND status != 'open') AS closures_rest_of_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-30' AND ex_dividend_date <= '2026-07-31') AS exdiv_records_rest_of_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-30' AND ex_dividend_date <= '2026-07-31') AS household_exdivs,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-30' AND execution_date <= '2026-07-31') AS splits_rest_of_week,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) AS jul31_expiry_pct_of_wed_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-29') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

De feestdagentabel toont 0 sluitingen op donderdag 30 juli en vrijdag 31 juli. Voor 611 dividendregistraties valt de ex-dividend date op een van die twee sessies. 0 daarvan betreft tien gecontroleerde bekende huishoudnamen. Er staan 12 stock splits gepland. Van het option volume van woensdag had 19.7% al betrekking op contracten die op vrijdag 31 juli expireren. De meest recente settlement van de short interest in het bestand is 2026-07-15. Dit bestand wordt met zoveel vertraging gepubliceerd dat het een eigen toelichting heeft.

De sessie, geverifieerd

QuerySessie-verificatie: eerste/laatste SPY-bar ET, aantal reguliere bars, holiday receipts, volgende sluiting
De exacte SQL achter elk getal
SELECT
    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,
    countIf(window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-29') AS jul29_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-29' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-29' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-29 00:00:00' AND window_start < '2026-07-30 00:00:00'
Run this yourself

Een volledige reguliere sessie: de eerste SPY-bar om 04:00 ET, de laatste om 19:59 ET, 390 bars tijdens reguliere handelsuren, 1 sessie in het venster en 0 feestdagrijen voor de datum. De eerstvolgende geplande sluiting is Labor Day op 2026-09-07.

Veelgestelde vragen

Hoe presteerde de aandelenmarkt op woensdag 29 juli 2026?

SPY veranderde -1.52% van slotkoers tot slotkoers naar $729.51, met QQQ op -2.07%, DIA op -2.19% en IWM op -1.63%. Onder liquide namen steeg 1652 en daalde 4342.

Welke sector stond op 29 juli 2026 bovenaan?

Energy, op 1.89%, gemeten over de elf SPDR-select-sectorfondsen. Het zwakste van de elf, Industrials, noteerde -3.21%.

Hoe actief was de optiemarkt op 29 juli 2026?

Er werden 66.84 miljoen contracten verhandeld, tegenover 59.28 miljoen in de vorige sessie. Contracten met dezelfde expiratiedatum namen 33.1% van het volume voor hun rekening en calls 53.6%.

Welk aandeel had op 29 juli 2026 het hoogste dollarhandelsvolume?

MU, met 44.99 miljard aan dollarvolume tijdens reguliere handelsuren, vóór SPY met 42.29 miljard.

Datatoelichting

Deze editie hervat de dagelijkse reeks. De vorige dagelijkse editie is 10 juli 2026 en het wekelijkse overzicht behandelt de week ervoor. Panelen met genoemde tickers staan alfabetisch gerangschikt, zodat verwijzingen in de tekst naar vaste rijen wijzen. Ranglijsten en overzichten van movers zijn op waarde gerangschikt. Elke positionele claim daarin is vastgelegd als een sanity bound. De mega-cap-basket en de sectorbasket met elf fondsen zijn vaste, vooraf bepaalde sets en geen classificaties van een leverancier. Voor de overzichten van movers geldt een turnoverdrempel van vijf miljoen dollar tijdens reguliere handelsuren. Namen waarvan de splitsing tussen de twee gemeten slotkoersen is uitgevoerd, worden uitgesloten. Ook één hergebruikt symbool wordt uitgesloten volgens de interne ambiguïteitscontrole. Daardoor verwijst elke toelichting altijd naar een verifieerbare naam. De quote-panelen tellen eenzijdige en crossed quotes per naam, in plaats van deze stilzwijgend te verwijderen. Het bestand van Treasury en de dagelijkse EDGAR-index worden volgens hun eigen schema aangeleverd. Daarom tonen die panelen wat zij bevatten, zonder ervan uit te gaan dat de gegevens al zijn binnengekomen. Hier wordt geen implied-volatility-index weergegeven. Deze series zijn niet gelicentieerd voor dit datawarehouse. Volatility wordt daarom uit de tape afgeleid via ranges, het aandeel opties op dezelfde dag en het gedrag van quotes.

Methodologie

  • Bron van marktdata: consolidated tape. delayed_stocks_minute_aggs voor prijzen en volumes, options_trades voor de options tape, cache_stocks_quotes en cache_options_quotes voor de NBBO-panelen.
  • Slotkoers: de laatste minuutbar van de reguliere sessie; nooit een veronderstelde print om 16:00 en nooit een print buiten de reguliere handelsuren.
  • Tijdzoneverwerking: alle opgeslagen timestamps zijn UTC; WHERE-clausules gebruiken onbewerkte UTC-literalen en toTimeZone verschijnt alleen in SELECT-lijsten voor ET-labels.
  • Sessiecontrole: op basis van de feestdagentabel en waargenomen bars, nooit uitsluitend op basis van de kalender.
  • Vergelijkingen met de vorige sessie: binnen de query berekend vanaf 28 juli, nooit overgenomen uit een eerder bericht.
  • Decimalen: prijs-, size- en volumekolommen worden vóór elke deling of elk product naar Float64 gecast.
  • Deterministische aggregaties: overal exacte quantiles en tie-breaks op basis van tuple-sleutels; elke ordering- of tekenclaim in de tekst is vastgelegd als sanity bound.
  • As-of-datum van het warehouse: 1 augustus 2026, drie dagen na de sessie en na de gebruikelijke ingest-lag van one-to-two dagen van de tape; de hierboven begrensde receipts houden het bericht in stand als bij het genereren een dataset ontbreekt.

Kruisverwijzingen: de vorige dagelijkse recap, de wekelijkse recap, wanneer options expireren, wat een bid-ask spread is en de two-to-ten-year spread.

Elke bovenstaande query draait ongewijzigd op de Strasmore-terminal als u een window naar een andere sessie wilt verplaatsen.