Strasmore Research
Marktrückblicke Matt ConnorVon Matt Connor · Aktualisiert 2026-07-24

Marktrückblick 2. Juli 2026 Zahlen

Rotation vor dem Feiertag: Positive Marktbreite trotz fallendem Nasdaq. Tech-Sektor und Speicher-Werte schwächelten, während acht von elf Sektorfonds zulegten.

Donnerstag, der 2. Juli 2026 – die letzte Sitzung vor der Feiertagsunterbrechung zum Independence Day – war ein Rotationstag, der oberflächlich wie ein Ausverkauf wirkte. Der QQQ verzeichnete -1.71%, während der DIA um 1.04% stieg. Die Marktbreite war POSITIV: 3398 liquide Titel stiegen, während 2758 der Werte im Vergleich zum fallenden Wachstumskonzept bei 54.6% im Plus lagen. Acht von elf Sektorfonds schlossen höher; die Verkäufe konzentrierten sich auf den Tech-Sektor und das Speicher-Komplex, das am Vortag schwächelte.

Die Ergebnisliste

AbfrageSPY / QQQ / DIA / IWM — 2. Juli vs. Schlusskurs 1. Juli, reguläre Handelszeiten
Das exakte SQL hinter jeder Zahl
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-01 13:30:00' AND window_start < '2026-07-01 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-02 13:30:00' AND window_start < '2026-07-02 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_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 AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.ticker

Der Unterschied zwischen DIA bei 1.04% und QQQ bei -1.71% fasst den Tag zusammen: Industriewerte und Growth-Werte liegen bei der täglichen Rendite fast drei Punkte auseinander. SPY lag mit -0.12% genau in der Mitte; IWM schloss bei -0.59%.

Was the day unusual?

Two lenses in one panel: SPY's open-to-close move and QQQ's close-over-close move, each ranked against the trailing month by absolute size (rank 1 = biggest).

AbfrageRanking von SPY und QQQ im Vergleich zum vorangegangenen Monat (Rang 1 = größte absolute Bewegung)
Das exakte SQL hinter jeder Zahl
WITH per_day AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct,
           argMax(toFloat64(close), window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2026-06-02 00:00:00')
      AND window_start < toDateTime('2026-07-03 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY ticker, d
),
with_prev AS (
    SELECT ticker, d, oc_pct,
           lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) AS prev_close,
           (rth_close / lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct
    FROM per_day
)
SELECT
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-02'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-02') AND isFinite(cc_pct) AND prev_close > 0)) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ' AND isFinite(cc_pct) AND prev_close > 0) AS qqq_sessions_compared,
    toString(minIf(d, ticker = 'SPY')) AS first_session
FROM with_prev

At the index level, no. SPY's -0.35% open-to-close ranks 15 of 22 trailing sessions — the bottom half. QQQ was louder but still not extreme: its -1.71% close-over-close ranks 9 of 21 sessions with a defined prior close, back to 2026-06-02 — a mid-pack bad day for the growth index. The single-name tape is where July 2 was loud.

Marktdurchdringung: positive Tendenz, sinkender Wachstumskennwert

AbfrageAdvancers vs. Decliners bei Titeln mit mindestens 1 Mio. $ Handelsvolumen am 2. Juli
Das exakte SQL hinter jeder Zahl
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
       OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
    countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
    countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
    countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
        / countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close > prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS advancers_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close < prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS decliners_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_fmt
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

3,398 steigende, 2,758 fallende, 63 unveränderte Werte — 54.6% der liquiden Titel stiegen, während der QQQ fiel. Marktkapitalisierungsgewichtete Indizes und gleichgewichtete Indizes zeigten unterschiedliche Entwicklungen; solche Tage erklären, warum beide Kennzahlen wichtig sind. Der Filter schließt 5,317 von 11,536 Titeln mit einem Handelsvolumen unter einer Million US-Dollar über zwei Sitzungen hinweg aus.

Sektor für Sektor: Die Verteilung der Gewinner

Die Marktdurchdringung zählt die Anzahl der Titel, gibt aber keine Auskunft über deren Art. Die elf SPDR Sector-Fonds wurden nach Branchen analysiert. Die Differenz zwischen dem besten und dem schlechtesten Wert gibt die heutige Dispersion in einer Zahl an.

AbfrageDie elf SPDR Sector ETFs — Schlusskurs 2. Juli vs. Schlusskurs 1. Juli, reguläre Handelszeiten
Das exakte SQL hinter jeder Zahl
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_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 >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    round((day_close / prior_close - 1) * 100 - min((day_close / prior_close - 1) * 100) OVER (), 2) AS pts_above_worst_sector,
    day_dollar_bn
FROM per_etf
ORDER BY ticker

Gesundheit (XLV) führte die Liste mit 2.63% an, gefolgt von Versorgungsunternehmen 2.23%, Basiskonsumgütern 2% und Rohstoffen 1.94%. Technologie (XLK) schloss als letzter Sektor mit -2.71% ab und war der einzige Sektor mit einem Minus von mehr als einem Punkt. Zyklischer Konsum (-0.81%) und Kommunikationsdienste (-0.13%) waren die weiteren roten Fonds; die restlichen acht waren im Plus. Die Dispersion vom besten zum schlechtesten Wert betrug 5.34 Prozentpunkte. Die Divergenz zwischen steigenden DIA- und fallenden QQQ-Kursen zog sich durch den gesamten Markt und beschränkte sich nicht nur auf vier Megacaps. Daher ist eine steigende Advance-Decline-Linie bei einem fallenden Nasdaq kein Widerspruch.

Der Höhepunkt des Tages: Speicher-Abverkauf, Tag zwei

Der Komplex, der am Mittwoch einbrach, fiel am Donnerstag stärker – es ging um die Magnitude und die Korrelation, nicht um die Ursache.

AbfrageMemory- und Storage-Werte: Veränderung vs. Schlusskurs Mittwoch, Range-Timing und Dollar-Volumen
Das exakte SQL hinter jeder Zahl
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    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,
    day_dollar_bn
FROM per_name
ORDER BY ticker

SanDisk verzeichnete -14.32%, Seagate -10.38%, Western Digital -9.92%, MU -5.57% – bei einem MU-Umsatz von $51.4 Milliarden, was etwa dem anderthalbfachen des SPY-Umsatzes entspricht. MU und SanDisk erreichten ihre Tiefststände spät (15:26, 15:26 ET), Seagate und Western Digital früher (14:23, 13:59). Kontext: Mittwoch und die MU-Analyse.

Die andere Hälfte der Rotation bei den Megacaps:

AbfrageMegacap-Rotation: Veränderung vs. Schlusskurs Mittwoch, Range-Timing und Dollar-Volumen
Das exakte SQL hinter jeder Zahl
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    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,
    day_dollar_bn
FROM per_name
ORDER BY ticker

AAPL stieg in einer Einbahnstraße um 4.75% – Tiefstand bei 09:30 ET, Höchststand bei 15:57, drei Minuten vor Börsenschluss – während TSLA das Spiegelbild mit -7.65% zeigte. MSFT legte 1.41% zu; NVDA schloss mit -1.55%. Gleicher Index, entgegengesetzte Tage.

Handelsvolumen nach Werten

AbfrageVolumen-Leader in zwei Kategorien: Top 6 nach Handelsvolumen in $, Top 4 nach Anzahl der gehandelten Aktien (eine wiederverwendete Symbol-Listung zur Verifizierung ausgeschlossen)
Das exakte SQL hinter jeder Zahl
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-07-02 13:30:00' AND window_start < '2026-07-02 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(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-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
      AND ticker NOT IN ('SPCX')
    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

MU führte mit $51.4 Milliarden die Handelsaktivität zum vierten Sitzung in Folge an (Montag, Dienstag, Mittwoch), gegenüber $32.7 Milliarden bei SPY. SanDisk mit $26.57 Milliarden brachte einen zweiten Speicher-Wert unter die Top vier. SOXS – der 3x-inverse Halbleiter-ETF – stand mit 748.2 Millionen an der Spitze der Aktienliste: Günstige Aktien dominieren die Anzahl der gehandelten Stücke, teure Aktien den Dollar-Wert, und relatives Volumen setzt diesen Wert ins Verhältnis zum Durchschnittswert eines Titels. Basis: 2. Juli während der regulären Handelszeiten, eine Liste mit wiederverwendetem Symbol ausgeschlossen (Belege).

AbfrageGehandelte Aktien pro 30-Minuten-Intervall, reguläre Handelszeiten (Milliarden)
Das exakte SQL hinter jeder Zahl
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
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
GROUP BY et_time
ORDER BY et_time

2.13 Milliarden Aktien in der ersten halben Stunde, ein Tiefpunkt von 0.81 Milliarden um 14:30, 2.3 Milliarden bis zum Börsenschluss vor dem Feiertag – die letzte Phase war das größte Volumen, da die Schlussauktion ausstehende Orders in einem einzigen Kurs zusammenfasst.

Der Optionsmarkt: die verschobenen Weeklys

AbfrageEine Zeile für den gesamten Optionshandel: Volumen, Same-Day-Expiry, die durch Feiertage verschobene Woche und der Juli-Monat
Das exakte SQL hinter jeder Zahl
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-07-02 00:00:00' AND sip_timestamp < '2026-07-03 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-07-02 13:30:00' AND window_start < '2026-07-02 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) = '260702') / 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,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260710')) / 1e6, 2) AS jul10_weekly_contracts_m,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717')) / 1e6, 2) AS jul17_monthly_contracts_m,
    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_fmt,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close,
    round(spy_regular_close - top_contract.2, 2) AS spy_close_minus_strike
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Es wurden 80.96 Millionen Kontrakte über 13.15 Millionen Trades gehandelt, wobei 47.4% dieses Volumens am selben Donnerstag auslief. Kein Kontrakt mit einem Verfallsdatum vom 3. Juli wurde über den Tag gehandelt (0 Trades), sodass der Donnerstag sowohl den täglichen Verfall als auch das verschobene Weekly der Woche gleichzeitig beinhaltete. Der am stärksten gehandelte Kontrakt war der SPY $740 Put mit demselben Verfallsdatum — 540,403 Kontrakte bei einer durchschnittlichen Prämie von $0.499, während der SPY 4.8 Dollar über dem Strike schloss: out of the money. Dies war ein Put in einem Markt, in dem Dienstag und Mittwoch Calls aufwiesen. Calls machten immer noch 58.4% des Volumens aus; das nächste Weekly verzeichnete 9.64 Millionen Kontrakte, der monatliche July-Kontrakt 8.82 Millionen (Verfallsmechanik).

Das Quote-Tape: Die Kosten des Handels

Preise zeigen an, was passiert ist; Quotes zeigen an, was es kostet. Der bid-ask spread ist die Gebühr für jede Round-Trip-Transaktion, gemessen in Basispunkten des Mid-Preises (ein Basispunkt entspricht einem Hundertstel eines Prozents). Wir messen ihn in jeder Sitzung, ob gewöhnlich oder nicht – das macht die Aussage „Spreads sind explodiert“ überprüfbar.

AbfrageNBBO-Update-Anzahl der Aktien: 2. Juli vs. 1. Juli, mit Updates pro Ticker (Millionen)
Das exakte SQL hinter jeder Zahl
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / 1e6, 2) AS jul2_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-01')) / 1e6, 2) AS jul1_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / countIf(toDate(sip_timestamp) = toDate('2026-07-01')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'SPY') / 1e6, 2) AS jul2_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'QQQ') / 1e6, 2) AS jul2_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'MU') / 1e6, 2) AS jul2_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Das National Best Bid and Offer – das oberste Ende des konsolidierten Orderbuchs – wurde am 2. Juli 597.22 Millionen Mal aktualisiert im Vergleich zu 449.15 Millionen am 1. Juli: ein Anstieg um 33% zum Börsenschluss. QQQ verzeichnete 7.56 Millionen, über den 5.42 Millionen von SPY; MU 1.01 Millionen.

AbfrageMedian-Spread in Basispunkten, reguläre Handelszeiten — Index-ETFs, Megacaps und Memory-Werte
Das exakte SQL hinter jeder Zahl
SELECT
    ticker,
    round(med_bps, 2) AS median_spread_bps,
    round(med_dollars * 100, 1) AS median_spread_cents,
    round(med_bps / min(med_bps) OVER (), 1) AS times_the_spy_spread,
    round(quote_updates / 1e6, 2) AS rth_updates_m,
    invalid_quotes_dropped
FROM (
    SELECT
        ticker,
        quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000,
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_bps,
        quantileExactIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price),
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_dollars,
        count() AS quote_updates,
        countIf(NOT (toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price))) AS invalid_quotes_dropped
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'TSLA', 'NVDA', 'MU', 'SNDK', 'WDC')
      AND sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
    GROUP BY ticker
)
ORDER BY median_spread_bps ASC

SPY wies einen Median-Spread von 0.27 Basispunkten auf: etwa 2 Cent bei einem Preis von $744.8 pro ETF. QQQ lag bei 0.83 bps, NVDA bei 1.03. Die Titel mit den stärksten Kursverlusten waren auch die teuersten im Handel: MU 5.52 bps, SanDisk 10.4, Western Digital 10.7940x der Spread von SPY. Der Handel mit einem Korb von Speicher-Aktien kostete ein Vielfaches des Handels mit dem Index, noch bevor ein Price Impact eintrat. Ungültige Quotes (einseitig oder crossed) werden pro Titel gezählt und nicht ausgeklammert.

AbfrageWar die Liquidität ungewöhnlich? SPY Median-Spread der regulären Handelszeiten vs. vorangegangener Monat
Das exakte SQL hinter jeder Zahl
WITH per_day AS (
    SELECT toDate(sip_timestamp) AS d,
           quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000) AS med_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-06-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
      AND toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)
    GROUP BY d
)
SELECT
    round(anyIf(med_bps, d = toDate('2026-07-02')), 3) AS jul2_median_spread_bps,
    round(quantileExact(0.5)(med_bps), 3) AS trailing_median_bps,
    round(anyIf(med_bps, d = toDate('2026-07-02')) - quantileExact(0.5)(med_bps), 3) AS jul2_minus_trailing_bps,
    arrayCount(x -> x > anyIf(med_bps, d = toDate('2026-07-02')), groupArrayIf(med_bps, d != toDate('2026-07-02'))) + 1 AS wider_rank,
    count() AS sessions_compared,
    round(max(med_bps), 3) AS widest_session_bps
FROM per_day

Die Liquidität war an einem gewöhnlichen Tag stabil. Das Ergebnis zeigt: Der Median-Spread von SPY liegt bei 0.27 bps, was eine Abweichung von 0 bps zum Median des vorangegangenen Monats (0.27 bps) bedeutet. Damit liegt er im Bereich der 11 von 22 Sitzungen hinsichtlich der Breite – weit entfernt vom breitesten Wert des Monats von 0.409 bps. Ein konzentrierter Kurssturz bei gleichzeitigem steigenden Kursverlauf hat die Marktstruktur nicht belastet.

Zinsen: Die Daten vom 2. Juli liegen vor

AbfrageDer Receipt: Der Treasury-Print vom 2. Juli liegt vor
Das exakte SQL hinter jeder Zahl
SELECT
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS jul2_rows,
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS jul1_rows

Der Treasury-Feed hinkt dem Markt meist ein bis zwei Tage hinterher: Bei der Erstveröffentlichung waren für den Schlusskurs am 2. Juli keine Daten vorhanden, und diese Seite hat dies explizit angegeben, anstatt Schätzungen vorzunehmen. Die Daten liegen nun vor — 1 Zeilen für den 2. Juli, 1 für den 1. Juli — daher zeigt die folgende Tabelle die Kurve der jeweiligen Sitzung.

AbfrageDie Kurve der Sitzung: 2. Juli vs. 1. Juli (nur belegte Laufzeiten)
Das exakte SQL hinter jeder Zahl
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul2_yield_pct,
    round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(d.yield_1_month),  toFloat64(p.yield_1_month)),
        ('3 month',  toFloat64(d.yield_3_month),  toFloat64(p.yield_3_month)),
        ('1 year',   toFloat64(d.yield_1_year),   toFloat64(p.yield_1_year)),
        ('2 year',   toFloat64(d.yield_2_year),   toFloat64(p.yield_2_year)),
        ('5 year',   toFloat64(d.yield_5_year),   toFloat64(p.yield_5_year)),
        ('10 year',  toFloat64(d.yield_10_year),  toFloat64(p.yield_10_year)),
        ('30 year',  toFloat64(d.yield_30_year),  toFloat64(p.yield_30_year)),
        ('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS p
)

Zum Börsenschluss lag die 10-jährige Rendite bei 4.49%, der 2s10s spread betrug 0.35 Basispunkte.

Der Kalender des Tages

AbfrageUnternehmenskalender und Informationsfluss vom 2. Juli in einer Zeile (inklusive der acht Splits hinter einer Scheinbewegung im Screener)
Das exakte SQL hinter jeder Zahl
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-02'
    ) AS news,
    (
        SELECT (argMax(t, n), 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-07-02'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), countIf(split_to > split_from), countIf(split_to < split_from),
                arrayStringConcat(groupArray(concat(ticker, ' ', toString(split_to), '-for-', toString(split_from))), '; '))
        FROM global_markets.stocks_splits
        WHERE execution_date = '2026-07-02' AND ticker NOT IN ('SPCX')
    ) AS splits
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-02') AS ex_dividend_records,
    splits.1 AS splits_executed,
    splits.2 AS forward_splits,
    splits.3 AS reverse_splits,
    splits.4 AS split_records,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS filings_8k,
    (SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
        SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02' ORDER BY ticker
    )) AS ipo_names,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    top_news.1 AS most_covered_ticker,
    top_news.2 AS most_covered_articles,
    (SELECT any(split_from) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_from,
    (SELECT any(split_to) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_to,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00') AS crwd_prev_close,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_day_close,
    (SELECT round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_dollar_m,
    (SELECT count() FROM (
        SELECT ticker FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-02')
          AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
        GROUP BY ticker
    )) AS split_names_with_bars

319 Dividenden-Stichtage waren ex-dividend, 2 Neunotierungen kamen hinzu (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II), und der SEC-Index verzeichnete 5200 Einreichungen vor dem Feiertag — 2109 Form 4s, 258 8-Ks. Der Newsfeed enthielt 201 Artikel von 3 Herausgebern (NVDA am häufigsten abgedeckt, 18 davon).

Aktiensplits täuschen jeden, der unbereinigte Schlusskurse liest. CRWD vollzog einen 4-zu-1 Forward-Split, sodass das unbereinigte Protokoll am Mittwoch $772.45 und am Donnerstag $193.67 anzeigt — ein künstlicher Rückgang, bei dem es in Wahrheit um vier neue Aktien pro alte Aktie geht. CRWD war nicht allein: 8 Splits wurden durchgeführt, 5 Forward- und 3 Reverse-Splits (die Spalte split_records listet diese auf), und ein Reverse-Split erzeugt den gegenteiligen Effekt — einen Rohpreis, der über Nacht sprunghaft ansteigt. Nur 2 dieser Werte wurden in unserem Protokoll gehandelt; der Umsatz von CRWD in Höhe von $1473.51 Millionen ist groß genug, um eine Anzeige zu verfälschen, weshalb jede hier verwendete Mover-Liste diesen Wert ausschließt.

In Vorbereitung

Kalenderfakten statt Prognosen — das ergaben die Daten für die kommenden Sitzungen.

AbfrageNach dem Feiertag: Die nächste Sitzung, Ex-Dividenden und Splits, der nächste geplante Börsenschluss und der Short-Interest-Lag
Das exakte SQL hinter jeder Zahl
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS jul6_spy_regular_bars,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-06') AS exdiv_records_jul6,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM global_markets.stocks_dividends
     WHERE ex_dividend_date = '2026-07-06'
       AND ticker IN ('AAPL', 'MSFT', 'JPM', 'JNJ', 'XOM', 'KO', 'PG', 'WMT', 'CVX', 'HD')) AS household_exdivs_jul6,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS splits_jul6,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02') AS next_scheduled_closure,
    (SELECT any(name) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_name,
    (SELECT any(status) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_status,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS latest_si_settlement,
    (SELECT dateDiff('day', max(settlement_date), toDate('2026-07-02')) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS si_settlement_age_days

Der Montag, 6. Juli, begann mit einer Sitzung, die eine vollständige 390-Bar aufwies, was durch die eigenen Bars bestätigt wurde. Es gab 118 Ex-Dividende-Einträge — ein bekannter Name unter den zehn von uns untersuchten Titeln (JPM) — sowie 15 Split-Ausführungen. Nächster geplanter Börsenschluss: Labor Day, 2026-09-07 (closed). Die Short-Interest-Daten waren wie üblich keine Neuigkeit — die neueste Abrechnung liegt 2026-06-30, 2 Tage zurück; die Veröffentlichung erfolgt etwa zwei Wochen nach der Abrechnung (warum).

Die Sitzung, verifiziert — und der Freitag, der keiner war

AbfrageSitzungs-Check: Beobachtete Minute-Bar-Spanne von SPY und der 3. Juli Schlusskurs im Tape
Das exakte SQL hinter jeder Zahl
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,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS day_sessions,
    (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
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-02 00:00:00' AND window_start < '2026-07-03 00:00:00'

Der 2. Juli war eine vollständige Sitzung, kein früher Börsenschluss: Die SPY-Bars liefen von 04:00 bis 19:59 New York Zeit (Pre-Market und After-Hours Bars inklusive), mit genau 390 Bars während der regulären Handelszeiten. Der Freitag, 3. Juli, verzeichnete 0 SPY-Bars — ein vollständiger Abschluss, da der Independence Day am 4. Juli auf einen Samstag fiel. Die vier Sitzungen der Woche: Wochenrückblick.

FAQ

Warum stieg der Dow, während der Nasdaq am 2. Juli 2026 fiel?

Die beiden Indizes enthalten unterschiedliche Unternehmen: DIA schloss bei 1.04%, QQQ bei -1.71%. Die Sektorverteilung ist identisch — Gesundheitswesen, Versorger und Basiskonsumgüter führen die Liste an, Technologie liegt mit -2.71% am Ende, was einer Differenz von 5.34 Punkten vom besten zum schlechtesten Sektor entspricht.

War der Aktienmarkt am Freitag der Independence-Day-Woche geöffnet?

Nein. Der Independence Day fiel auf einen Samstag, weshalb die Börsen den Feiertag durch eine vollständige Schließung am Freitag nach dieser Sitzung begingen: Unsere Aufzeichnungen zeigen 0 SPY-Minutenbars für diesen Tag.

Welche Auswirkung hat ein künftiger Aktiensplit auf den Aktienkurs?

Die Anzahl der Aktien wird vervierfacht und der Preis wird durch vier geteilt; der Gesamtwert der Position bleibt unverändert. CRWD, 2. Juli: Ein unbereinigter Schlusskurs von $772.45 am Mittwoch und $193.67 am Donnerstag — dies ist ein fiktischer Rückgang in jedem Screener, der den Split nicht berücksichtigt.

Wie hoch waren die Bid-Ask-Spreads am 2. Juli 2026?

Der mediane angebotene Spread von SPY betrug 0.27 Basispunkte des Mid-Preises während der regulären Handelszeiten — dies entspricht 11 von 22 der vorangegangenen Sitzungen hinsichtlich der Breite, was einem normalen Handelstag entspricht. Einzelaktien wiesen größere Spreads auf: MU 5.52 bps, WDC 10.79.

Datenhinweise

  • Dollar-Volumen ist ein Proxy pro Minute — Schlusskurs × Volumen, summiert pro Bar.
  • Der US-2-Jahres-Treasury-Print erfolgte nach der Erstveröffentlichung — Die ursprüngliche Notiz wies das Fehlen durch eine Zeilenanzahl-Quittung aus; diese Revision enthält den Print, die Quittung ist beigefügt.
  • Die Rohänderung des Schlusskurses von CRWD ist ein Split-Artefakt — Aus den Mover-Screens ausgeschlossen.
Vollständige Datenhinweise
  • Das Sektor-Board umfasst die elf SPDR Select Sector ETFs (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY) — ein fester, offengelegter Korb, kein Sektorfeld des Anbieters.
  • Die Quote-Tape-Zählungen erfolgen nach dem UTC-Datum des SIP-Zeitstempels; eine Sommersitzung fällt in einen UTC-Tag.
  • Ein im Juni wiederverwendetes Symbol ist von den Leaderboards ausgeschlossen (Quittungen); die forensische Tick-Analyse findet in den Deep-Dives statt.

Methodik

  • Der Zeitraum umfasst eine Handelssitzung (1 Sitzung, verifiziert durch beobachtete Bars). Zeitstempel werden in UTC gespeichert und innerhalb der Abfragen in New Yorker Zeit umgerechnet; „close“ bezeichnet die letzte Minute der regulären Handelssitzung, und der Tageswechsel vergleicht den 2. Juli mit dem 1. Juli. Der Schlusskurs für den 3. Juli wurde anhand von Bars verifiziert und nicht nur angenommen.
  • Spreads werden als Differenz zwischen Ask und Bid in Basispunkten des Mid-Preises angegeben, berechnet als Median über die NBBO-Updates während der regulären Handelszeiten auf einem deterministischen Quantil. Dezimalzahlen werden vor der Verhältnisrechnung in Floats umgewandelt; Optionsverfallstermine werden aus dem OCC-Ticker neu eingelesen. Jedes Panel wird zum Zeitpunkt der Erstellung einmalig über den geschützten Read-only-Pfad ausgelesen.

Diagramm, Tabelle und SQL bilden ein Objekt. Kopieren Sie jedes Panel in das Strasmore-Terminal, um es individuell anzupassen. Vorherige Sitzung: 1. Juli. Die Woche: die vier Sitzungen umfassende Feiertagswoche.