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

Marktbericht 29. Juni 2026 Zahlen

Marktübersicht vom 29. Juni 2026: Indexgewinne durch Wachstum, ein Sektor-Spread von vier Punkten, 0DTE-Handel und die aktuelle Entwicklung der Zinsen.

Montag, der 29. Juni 2026, war ein durch Wachstum getriebener Aufstiegstag mit einer engen Marktführerschaft: Der QQQ gewann 2.57%, der SPY 1.62%, 3968 liquide Titel stiegen gegenüber 2327 Declinern – dennoch schlossen fast die Hälfte der Sektorkörbe im Minus. Alle Zahlen werden aus einer Datenbank abgefragt; erweitern Sie jedes Panel für das SQL. Die Tick-für-Tick-Ebene derselben Sitzung: die Mikrostruktur-Analyse vom 29. Juni.

Die Ergebnistabelle

Jede Änderung vergleicht den letzten Minuten-Bar der regulären Sitzung vom 29. Juni mit dem vom Freitag, den 26. Juni.

AbfrageSPY / QQQ / DIA / IWM — 29. Juni vs. Schlusskurs am 26. Juni, Regular Hours
Das exakte SQL hinter jeder Zahl
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 eröffnete bei $736.525 im Vergleich zum Schlusskurs von Freitag bei $729.09 und schloss bei $740.88, unter seinem Tageshoch von $741.56. Das Plus von +2.57% bei QQQ gegenüber +0.81% bei DIA kennzeichnet einen Tag mit Fokus auf Wachstumswerte und Technologie; Small-Cap IWM legte um 0.45% zu.

War der Tag ungewöhnlich?

Eine prozentuale Veränderung ist ohne einen Vergleichswert wenig aussagekräftig. Diese Übersicht ordnet den 29. Juni im Vergleich zum vorangegangenen Monat nach der absoluten Schlusskurs-zu-Schlusskurs-Differenz.

AbfrageQQQ und SPY: 29. Juni im Vergleich zum vorangegangenen Monat (Rang 1 = größte absolute Bewegung)
Das exakte SQL hinter jeder Zahl
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)

Groß, aber kein Rekord: Die 2.57%-Bewegung des QQQ rangiert unter den 5 der 21 Sitzungen seit May 29, 2026, in einem Monat, in dem die größte Einzelbewegung 4.76% betrug; die 1.62% des SPY rangiert unter 4 von 21. Die Ursache der Bewegung ist entscheidend: Der Kursverlauf des SPY von der Eröffnung bis zum Schluss betrug nur 0.59%, weshalb der Großteil des Gewinns durch die Overnight-Gap entstand, noch bevor die erste Kerze während der regulären Handelszeiten gezeichnet wurde. Der QQQ schloss in 10 dieser Sitzungen höher: ein Monat mit einer Wahrscheinlichkeit von fünfzig zu fünfzig.

Marktdurchdringung: Wie breit war die Rallye?

Ein Advancer ist ein Ticker, dessen Schlusskurs am Montag höher lag als am Freitag, sofern das Handelsvolumen mindestens 1 Million $ betrug — dieser Filter schließt 5,108 von 11,475 Ticker aus, die an beiden Tagen gehandelt wurden.

AbfrageAdvancers vs. Decliners bei Tickern mit mindestens 1 Mio. $ Handelsvolumen am 29. Juni
Das exakte SQL hinter jeder Zahl
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 Advancer, 2327 Decliner, 72 unverändert: 62.3% des liquiden Marktes stieg — bei Einzelbetrachtung der Titel war dies ein breiter Handelstag.

Sektor für Sektor: Die Rallye war weniger breit gefächert als sie aussah

Man kann die Namen gleich gewichten oder nach Unternehmensgröße gewichten. Die elf SPDR Sektor-ETFs nutzen die zweite Methode – ein nach Marktkapitalisierung gewichteter Korb pro Sektor des S&P 500. Diese weichen stark von der Anzahl der steigenden Titel ab.

AbfrageDie elf Sektor-Baskets: 29. Juni vs. Schlusskurs am 26. Juni, Regular Hours
Das exakte SQL hinter jeder Zahl
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

Technologie führte mit 2.52%, zyklischer Konsum folgte mit 2.37%; Materialien schlossen bei -1.82% und Immobilien bei -0.64% ab. Die Differenz zwischen dem besten und dem schlechtesten Sektor – die heutige Sektor-Dispersion – betrug 4.34 Prozentpunkte. Versorgungsunternehmen, Basiskonsumgüter, Energie, Immobilien und Materialien verzeichneten Verluste, obwohl der Index stieg. Eine hohe Anzahl steigender Titel kann den Gewinn eines Indexfonds verschleiern, wenn die Gewichtung gering ist.

Der Höhepunkt des Tages: Speichertechnologien

Vier Namen handelten dasselbe Thema mit sehr unterschiedlichen Ergebnissen – es gab lediglich eine gemeinsame Kursbewegung und unterschiedliche Ausmaße; die Daten geben keine Auskunft über die Ursachen.

AbfrageMemory/Storage-Werte: Veränderung vs. Freitagsschluss und Intraday-Range
Das exakte SQL hinter jeder Zahl
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 ist das klassische Beispiel für die Differenz zwischen der Handelsspanne und der Nettoveränderung: eine Intraday-Spanne von 12.22% – ein Tief von $1023.65 um 10:18 ET und ein Hoch von $1148.79 um 15:59 – dennoch liegt der Schlusskurs 1.97% über dem von Freitag. Western Digital stieg um 11.15% und Seagate um 8.17%; SanDisk schloss innerhalb einer Spanne von 10.33% bei -1.9% – der einzige niedrigere Schlusskurs innerhalb der Gruppe. Ein Schlusskurs verschleiert die Volatilität, die Anleger erlebt haben.

Handelsvolumen nach Kapitalfluss

Beim gehandelten Volumen in Dollar übertraf Micron (MU) alles andere, einschließlich der Indexfonds: 58.47 Milliarden Dollar gegenüber 33.97 Milliarden Dollar bei SPY. Bei der Anzahl der gehandelten Aktien war die Lage anders.

AbfrageVolume-Leader in zwei Kategorien: Top 6 nach Handelsvolumen ($) und Top 4 nach Anzahl der Aktien
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-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

Die Anzahl der gehandelten Aktien kann irreführend sein: Die führenden Werte waren SOXS, ein mit dem Faktor 3 gehebelter, inverser Halbleiter-ETF (695.3 Millionen Aktien), und INLF, eine Penny-Stock-Aktie, deren 353.8 Millionen Aktien den ganzen Tag über etwa 23 Millionen Dollar wert waren. Das Dollar-Volumen zeigt, wohin das Kapital floss; das relative Volumen zeigt, ob die Aktivität eines Titels für sich selbst ungewöhnlich ist.

In den 30-Minuten-Intervallen aus New York zeigt der 29. Juni das klassische Volumen-"Lächeln":

AbfrageGehandelte Aktien pro 30-Minuten-Intervall, Regular Hours (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,
    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 Milliarden Aktien in der ersten halben Stunde, ein Tiefpunkt von 0.77 Milliarden bei 13:30 und das größte Intervall — 2.39 Milliarden — in der letzten halben Stunde, in der sich Schlussauktionen und indexbasierte Kapitalströme konzentrieren.

Der Optionsmarkt

Es wurden 66.33 Millionen Kontrakte über 11.04 Millionen Transaktionen gehandelt.

AbfrageEine Zeile für den gesamten Optionshandel: Volumen, 0DTE, die feiertagsbereinigte Woche
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-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'

Calls machten 55.7% des Kontraktvolumens aus. 35.8% des gesamten Handelsvolumens verfiel am selben Montag — der Share zu den Zero-Days-to-Expiry (0DTE). Der am stärksten gehandelte Einzelkontrakt war der SPY $741 Call mit Fälligkeit am selben Tag: 788,133 Kontrakte bei einer durchschnittlichen Prämie von $0.474. Der SPY schloss 0.12 Dollar unter dem Strike; die meistgehandelte Option des Tages endete out of the money. Der SPY wurde als Basiswert mit 12.01 Millionen Kontrakten gehandelt; QQQ mit 7.32 Millionen.

Das Panel erfasst zudem 40,621 Options-Transaktionen vor der Eröffnung der Aktienmärkte um 9:30 Uhr — alle stammen von einem indexbasierten Kontrakt mit Barausgleich (RUTW, SPX, SPXW, VIX, VIXW, XSP), während im selben Zeitraum 0 Aktien- oder ETF-Optionen gehandelt wurden. Dies ist eine Regel und kein Zufall: Indexoptionen haben erweiterte Handelszeiten, während Optionen auf Aktien und ETFs mit dem Aktienmarkt öffnen. Aktien werden früh gehandelt — siehe Pre-Market und After-Hours-Handel — ihre Optionen jedoch nicht.

Kein Kontrakt mit einem Verfallsdatum am Freitag, den 3. Juli, wurde über den Tag gehandelt (0 Transaktionen) — an diesem Freitag ist der Markt geschlossen — während Kontrakte mit Verfall am Donnerstag, den 2. Juli, mit 10.73 Millionen gehandelt wurden.

Das Kursticket: Die Kosten des Handelstages

Jeder Preis auf dieser Seite basiert auf einem Kursstrom – dem National Best Bid and Offer, der für jeden gelisteten Wertpapier kontinuierlich neu veröffentlicht wird. Die Differenz zwischen dem besten Gebot und dem besten Angebot, der Bid-Ask-Spread, stellt die Kosten dar, die eine Order für die Ausführung zahlt.

AbfrageKosten für das Crossen des Spread: NBBO-Updates und mediane Quote-Width, Regular Hours
Das exakte SQL hinter jeder Zahl
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

Die mittlere Spanne der Kurse bei SPY betrug 0.41 Basispunkte des Mittelpreises, im Vergleich zu 0.84 bei QQQ, 4.6 bei Micron und 8.2 bei Western Digital – letzteres weist die größte Spanne der vier auf. Ein Basispunkt bei einer Order von 10.000 $ entspricht einem Dollar. Der Kauf und sofortige Verkauf von 10.000 $ SPY zum Kurs kostet also etwa 0.41; derselbe Round-Trip bei Western Digital kostet 8.2. Die Handelsgröße blieb gleich; nur der Wertpapiertyp änderte sich.

Alle vier Titel wiesen in der ersten halben Handelsstunde eine größere Spanne auf als im Kontrollfenster zur Mittagszeit – SPY 0.41 bps gegenüber 0.27, Western Digital 14.33 gegenüber 7.55, was einem Aufschlag von 6.78 Basispunkten zur Eröffnung beim volatilsten Wertpapier entspricht. Die andere Hälfte der Dynamik ist das Handelsvolumen: 3.98 Millionen NBBO-Aktualisierungen bei SPY während der regulären Handelszeiten, 4.42 Millionen bei QQQ.

Zinsen: Die Kurve bewegte sich kaum

Die US-Staatsanleihen verzeichneten einen ruhigen Montag. Die Renditen beziehen sich auf die Schlusskurse und zeigen die Veränderung zum 26. Juni.

AbfrageDie Treasury-Kurve, Schlusskurs 29. Juni vs. 26. Juni (nur verfügbare Laufzeiten)
Das exakte SQL hinter jeder Zahl
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
)

Die 10-jährige Anleihe schloss bei 4.38%, unverändert im Tagesverlauf (0 bp), während die 3-monatige Anleihe um 4 bp auf 3.87% stieg. Der 2s10s spread — die 10-jährige minus die 2-jährige Rendite — schloss bei 0.28 Prozentpunkten (-3 bp): weiterhin positiv, aber leicht flacher.

Der Kalender des Tages

AbfrageUnternehmenskalender und Informationsfluss vom 29. Juni in einer Zeile
Das exakte SQL hinter jeder Zahl
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 Dividenden-Stichtage waren am 29. Juni ex-dividend — Sie müssen die Aktie vor dem Ex-Dividend-Datum besitzen, um Anspruch auf die Zahlung zu haben — dennoch tauchte unter den 25 geprüften bekannten Markennamen 0 auf. Die Welle zum Quartalsende erreichte am July 1 einen Höchststand von 745 Datensätzen. 23 Aktiensplits wurden durchgeführt und 0 IPOs notiert; die Debüts am Mittwoch (BSP, ITG, LIME) sind bereits im Kalender vermerkt.

Die SEC registrierte 6173 Einreichungen mit dem Datum 29. Juni: 1473 Preisergänzungen für strukturierte Produkte (Formular 424B2) und 1277 Insider-Handelsberichte (Formular 4) übertreffen die 231 8-Ks, die Schlagzeilen machen. Unser Newsfeed enthielt 170 Artikel von 3 Herausgebern; unter Ausschluss eines mehrdeutig getaggten, wiederverwendeten Tickers (im Query entfernt) war NVDA mit 14 Artikeln der am häufigsten behandelte Name, gegenüber 12 beim Zweitplatzierten.

Datenhinweise

Auffällige Daten werden markiert, anstatt sie stillschweigend auszuschließen – diese vier Punkte betreffen die Schlagzahlen.

  • Die Sektorkörbe basieren auf einer festgelegten Methode. "Sektor" bezieht sich auf die elf SPDR Sektor-ETFs, gewichtet nach Marktwert – es handelt sich um dieselben Namen in jeder Sitzung, nicht um eine Anbieter-Klassifizierung pro Ticker.
  • Das Dollar-Volumen ist ein Proxy pro Minute – Schlusskurs × Volumen, summiert pro Minuten-Bar; es ist nahe am Wert, aber nicht identisch mit der Summe der Print-Werte.
  • Geboitete Spreads schließen ungültige Kurse aus (einseitige oder gekreuzte NBBO-Datensätze); das Panel zählt die ausgeschlossenen Werte (1544 bei SPY). Die mediane Quote ist eine Statistik der Kurse, keine Kosten pro Trade – Aufträge werden oft innerhalb der Quote ausgeführt.
  • Ein einzelner Print kann das Hoch oder Tief eines Minuten-Bars verfälschen. Der 11:07 ET Bar von QQQ weist ein Tief von $709.58 auf, während kein umliegender Bar unter $715.09 fiel – ein Print lag $5.51 unter dem gleichzeitigen Markt. Jedes Hoch und Tief wurde mit benachbarten Bars abgeglichen; das Tages-Tief von QQQ bei $705.172 wurde bestätigt.
Vollständige Datenhinweise
  • Die Abdeckung von Treasuries ist geringer als im Schema. Vier beworbene Laufzeiten (6-Monats, 3-, 7- und 20-Jahres) wurden nie befüllt; die Kurve zeigt die sieben existierenden Laufzeiten plus die 2s10s-Zeile.
  • Ein Honeywell "Reverse Split" widerspricht dem Tape. Der Feed enthält den 1 HON-Datensatz vom 29. Juni: ein Reverse Split, der 2 alte Aktien in 1 neue umwandelt. HON schloss am Freitag bei $231.3 und am Montag bei $227.71 – keine Verdopplung. Wir haben dies nicht angewendet.
  • Die Nachrichtenanzahl basiert auf dem Feed eines Anbieters, den 3 Herausgebern, die wir führen – nicht auf "allen Marktnachrichten".
  • Die Daten auf Tick-Ebene – gekreuzte Kurse, die Korrektur des Phantom-Volumens, die gekürzte FINRA Short-Volume-Datei (und warum Short Volume nicht Short Interest ist) – finden Sie im Deep Dive.

Die Sitzung, verifiziert

AbfrageSession-Check: Beobachtete Minute-Bar-Spanne von SPY und der Freitagsschluss im Tape
Das exakte SQL hinter jeder Zahl
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'

Die SPY-Bars verlaufen von 04:00 bis 19:59 New Yorker Zeit mit exakt 390 Bars im regulären Zeitfenster – eine vollständige Sitzung, verifiziert durch den Tape (der Börsenkalender-Datensatz enthält nur bevorstehende Schließungen). An jenem Freitag, dem 3. Juli, gab es eine vollständige Schließung – 0 SPY-Bars wurden den ganzen Tag über gebildet; der 4. Juli fiel auf einen Samstag; die vier Sitzungen umfassende Woche hat ihren eigenen Rückblick.

FAQ

Wie hat sich der Aktienmarkt am 29. Juni 2026 entwickelt?

Ein positiver Handelstag mit Fokus auf Growth: Der QQQ schloss 2.57% über dem Freitag, der SPY 1.62%, der DIA 0.81% und der IWM 0.45%. 62.3% der Ticker mit einem Handelsvolumen von 1 Mio. $ oder mehr schlossen höher.

War der 29. Juni 2026 ein bedeutender Tag für den Nasdaq?

Bedeutend, aber nicht außergewöhnlich: Die Veränderung des QQQ im Vergleich zum Vortag lag bei 2.57%. Dies entspricht dem 5 der absoluten Größe der letzten 21 Sitzungen des vergangenen Monats, verglichen mit einem Monatshoch von 4.76%.

Welche Sektoren waren am 29. Juni 2026 führend?

Technologie (2.52%) und zyklischer Konsum (2.37%) führten die elf SPDR-Sektor-Warenkörbe an; Rohstoffe lagen mit -1.82% auf dem letzten Platz, was einem Spread von 4.34 Prozentpunkten entspricht. Versorgungsunternehmen, Basiskonsumgüter, Energie und Immobilien schlossen ebenfalls niedriger.

Welcher Anteil am Optionsvolumen am 29. Juni 2026 entfiel auf 0DTE?

Optionen mit heutiger Fälligkeit machten 35.8% der 66.33 Millionen gehandelten Kontrakte aus. Der am stärksten gehandelte Einzelkontrakt, ein SPY $741 Call mit heutiger Fälligkeit (788,133 Kontrakte), schloss out of the money.

Warum werden Optionen vor der Marktöffnung gehandelt?

Nur Indexoptionen werden vor Markteröffnung gehandelt. Alle 40,621 Options-Prints vor 9:30 Uhr ET am 29. Juni bezogen sich auf bar abgerechnete Index-Basiswerte (RUTW, SPX, SPXW, VIX, VIXW, XSP), die erweiterte globale Handelszeiten auflisten; die Anzahl der Aktien- und ETF-Options-Prints in diesem Zeitraum belief sich auf 0.

Methodik

  • Zeitstempel werden in UTC gespeichert und innerhalb der Abfragen in die New Yorker Zeit umgerechnet. „Close“ bezeichnet die letzte Minute der regulären Handelssitzung, nicht den Auktionspreis; der Tagesvergleich bezieht sich auf den 29. Juni im Vergleich zum 26. Juni, und die Sitzung wurde anhand des beobachteten Zeitraums der Kerzen verifiziert.
  • Das Ranking für den vergangenen Monat basiert auf den Schlusskurs-zu-Schluss-Bewegungen während der regulären Handelszeiten, wobei die erste Sitzung ausgeklammert wird (da kein vorheriger Schlusskurs innerhalb des Zeitfensters liegt). Optionstermine werden erneut über den OCC-Ticker ausgewertet (die eigene Spalte für das Verfallsdatum in der Tabelle ist fehlerhaft).
  • Jedes Panel wird zum Zeitpunkt der Erstellung einmalig über den geschützten Read-only-Pfad ausgelesen. Datenbestand des Warehouse zum 13. Juli 2026.

Jedes Panel ist das Ergebnis einer gespeicherten Abfrage – Diagramm, Tabelle und SQL in einem Objekt. Kopieren Sie jedes dieser Elemente in das Strasmore-Terminal. Nächste Sitzung: 30. Juni.