Recap mercato 2 luglio 2026
Rotazione pre-festività con Nasdaq in calo e breadth positiva. Settore tech e memory in selloff mentre otto fondi settoriali chiudono in rialzo.
Giovedì 2 luglio 2026 — l'ultima sessione prima della chiusura per l'Independence Day — è stata una giornata di rotazione con un titolo focalizzato sul selloff. QQQ ha registrato -1.71% mentre DIA è salito di 1.04%, e la breadth era POSITIVA: 3398 titoli liquidi sono saliti contro 2758, con 54.6% del mercato in territorio positivo mentre l'indice growth è sceso. Otto degli undici fondi settoriali hanno chiuso in rialzo; le vendite si sono concentrate nel tech e nel complesso memory che aveva rotto il giorno prima.
Il tabellone
L'esatto SQL dietro ogni numero
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.tickerIl rendimento di DIA al 1.04% rispetto a QQQ al -1.71% riassume la giornata: il settore industriale e il growth presentano una differenza di quasi tre punti nel rendimento giornaliero. SPY ha registrato una media del -0.12%; IWM ha chiuso al -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).
L'esatto SQL dietro ogni numero
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_prevAt 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.
Breadth: tape in verde, indice di crescita in rosso
L'esatto SQL dietro ogni numero
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 > 03,398 rialzi, 2,758 ribassi, 63 invariati — 54.6% dei ticker liquidi è salito mentre QQQ è sceso. Gli indici ponderati per capitalizzazione e la breadth a uguale peso hanno risposto in modo differente; giornate come questa spiegano perché entrambi ricevano un panel. Il filtro esclude 5,317 di 11,536 ticker con scambi dual-session sotto il milione di dollari.
Settore per settore: dove si è concentrato il rialzo
La breadth conta il numero di titoli, ma non ne indica la tipologia. Gli undici ETF settoriali SPDR hanno analizzato la sessione per industria; il divario tra il miglior e il peggior settore rappresenta la dispersione della giornata in un unico valore.
L'esatto SQL dietro ogni numero
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 tickerIl settore Health care (XLV) ha guidato la classifica con 2.63%, seguito da utilities 2.23%, staples 2% e materials 1.94%. Il settore Technology (XLK) si è classificato ultimo con -2.71%, l'unico settore in calo di oltre un punto; consumer discretionary (-0.81%) e communication services (-0.13%) sono stati gli altri due fondi in rosso, mentre gli altri otto sono rimasti in rialzo. Dispersione dal miglior al peggior: 5.34 punti percentuali. La divergenza tra il rialzo del DIA e il calo del QQQ ha interessato l'intero mercato e non solo quattro megacap — motivo per cui una linea advance-decline in rialzo sotto un Nasdaq in calo non è una contraddizione.
Il punto della giornata: fuga dalla memoria, secondo giorno
Il settore che ha subito il crollo mercoledì è sceso ulteriormente giovedì — per magnitudo e co-movimento, non per causa.
L'esatto SQL dietro ogni numero
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 tickerSanDisk ha registrato -14.32%, Seagate -10.38%, Western Digital -9.92%, MU -5.57% — su $51.4 miliardi di turnover di MU, circa una volta e mezza rispetto a quello di SPY. MU e SanDisk hanno toccato i minimi in tarda serata (15:26, 15:26 ET), Seagate e Western Digital prima (14:23, 13:59). Contesto: mercoledì e l'analisi approfondita su MU.
L'altra metà della rotazione, nelle megacap:
L'esatto SQL dietro ogni numero
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 tickerAAPL è salita del 4.75% con un trend unidirezionale — minimo a 09:30 ET, massimo a 15:57, tre minuti prima della chiusura — mentre TSLA ha seguito l'andamento opposto a -7.65%. MSFT ha aggiunto 1.41%; NVDA ha chiuso a -1.55%. Stesso indice, giornate opposte.
Dove sono stati scambiati i capitali
L'esatto SQL dietro ogni numero
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) DESCI $51.4 miliardi di MU hanno guidato gli scambi per la quarta sessione consecutiva (lunedì, martedì, mercoledì) rispetto ai $32.7 miliardi di SPY; i $26.57 miliardi di SanDisk hanno portato un secondo titolo del settore memory tra i primi quattro. SOXS — l'ETF 3x-inverse sui semiconduttori — ha dominato la classifica delle azioni con 748.2 milioni: le azioni a basso costo dominano per numero di titoli, quelle costose per valore monetario, mentre il volume relativo confronta il dato rispetto alla media abituale del titolo. Base: sessione regolare del 2 luglio, esclusa una quotazione con simbolo riutilizzato (ricevute).
L'esatto SQL dietro ogni numero
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_time2.13 miliardi di azioni nella prima mezz'ora di apertura, un minimo di 0.81 miliardi alle 14:30, 2.3 miliardi alla chiusura della vigilia festiva — quest'ultima è stata la fascia più rilevante della giornata, poiché l'asta di chiusura aggrega tutti gli ordini pendenti in un unico prezzo.
Il tape delle opzioni: le scadenze settimanali spostate
L'esatto SQL dietro ogni numero
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'Sono stati scambiati 80.96 milioni di contratti su 13.15 milioni di operazioni, e il 47.4% di quel volume è scaduto lo stesso giovedì. Nessun contratto con codice di scadenza 3 luglio è stato scambiato durante la giornata (0 operazioni), pertanto il giovedì ha comportato contemporaneamente la scadenza giornaliera e la scadenza settimanale spostata della settimana. Il contratto più scambiato è stato il put SPY $740 con scadenza in giornata — 540,403 contratti con un premio medio di $0.499, con lo SPY chiuso 4.8 dollari sopra lo strike: out of the money, e un put su un mercato dove martedì e mercoledì avevano call. Le call hanno rappresentato comunque il 58.4% del volume; la successiva weekly ha registrato 9.64 milioni di contratti, la monthly di luglio 8.82 milioni (meccaniche di scadenza).
Il nastro delle quotazioni: il costo del trading
I prezzi indicano cosa è successo; le quotazioni indicano quanto è costato. Lo bid-ask spread rappresenta il pedaggio su ogni operazione di andata e ritorno, espresso in basis points rispetto al mid-price (un basis point è un centesimo di punto percentuale). Lo misuriamo in ogni sessione, ordinaria o meno — il che rende l'affermazione "gli spread sono esplosi" verificabile.
L'esatto SQL dietro ogni numero
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'Il national best bid and offer — il top del book consolidato — è stato aggiornato 597.22 milioni di volte il 2 luglio rispetto ai 449.15 milioni del 1 luglio: un incremento del 33% verso la chiusura. QQQ ha registrato 7.56 milioni, superando i 5.42 milioni di SPY; MU 1.01 milioni.
L'esatto SQL dietro ogni numero
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 ASCSPY ha quotato uno spread mediano di 0.27 basis points: circa 2 centesimi su un ETF da $744.8. QQQ si è attestato a 0.83 bps, NVDA 1.03. I titoli che hanno subito il caliero erano i più costosi da scambiare: MU 5.52 bps, SanDisk 10.4, Western Digital 10.79 — 40 volte lo spread di SPY. Scambiare un paniere di titoli della memoria è costato molte volte più che scambiare l'indice, prima ancora di qualsiasi price impact. Le quotazioni non valide (unilaterali o incrociate) vengono contate per singolo titolo, non vengono nascoste.
L'esatto SQL dietro ogni numero
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_dayUna giornata ordinaria per la liquidità, ed è questa la conclusione: lo spread mediano di SPY di 0.27 bps si trova a 0 bps dalla mediana dell'ultimo mese (0.27 bps), posizionandosi nel 11 delle 22 sessioni per ampiezza — lontano dal valore massimo del mese di 0.409 bps. Un crollo concentrato in un contesto di prezzi in rialzo non ha messo sotto stress l'infrastruttura.
Tassi: i dati del 2 luglio sono disponibili
L'esatto SQL dietro ogni numero
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_rowsIl feed Treasury pubblica i dati con uno o due giorni di ritardo rispetto al mercato: al momento della prima pubblicazione, la chiusura del 2 luglio non presentava righe registrate e questa pagina lo ha indicato invece di fare congetture. I dati sono ora disponibili — 1 righe per il 2 luglio, 1 per il 1 luglio — pertanto il pannello sottostante riporta la curva della sessione.
L'esatto SQL dietro ogni numero
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
)Alla chiusura, il 10 anni si è attestato al 4.49%, con lo spread 2s10s a 0.35 punti.
Il calendario della giornata
L'esatto SQL dietro ogni numero
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_bars319 record di dividendi sono andati ex-dividend, sono arrivate 2 nuove quotazioni (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II), e l'indice SEC ha registrato 5200 comunicazioni prima della festività — 2109 Form 4s, 258 8-Ks. Il feed di notizie ha riportato 201 articoli di 3 editori (NVDA i più coperti, 18 di essi).
I frazionamenti delle azioni (split) traggono in inganno chiunque legga i prezzi di chiusura grezzi. CRWD ha effettuato uno split di tipo 4 per 1, quindi il listino non rettificato mostra $772.45 mercoledì e $193.67 giovedì — un falso calo che in realtà corrisponde a quattro nuove azioni per ogni vecchia. Non è stato l'unico caso: sono stati eseguiti 8 record di split, 5 forward e 3 reverse (la colonna split_records li elenca), e uno split inverso crea l'effetto opposto — un prezzo grezzo che aumenta improvvisamente durante la notte. Solo 2 di quei titoli sono stati scambiati sul nostro listino; il turnover di $1473.51 milioni di CRWD è l'unico sufficientemente grande da contaminare uno schermo, e ogni screener dei top mover qui lo esclude.
In programma
Dati a calendario, non previsioni — ciò che i dati indicano per le prossime sessioni.
L'esatto SQL dietro ogni numero
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_daysLunedì 6 luglio ha riaperto con una sessione completa da 390-bar, verificata tramite le proprie barre. Ha registrato 118 record ex-dividend — un nome noto tra i dieci che monitoriamo (JPM) — e 15 esecuzioni di split. Prossima chiusura prevista: Labor Day, 2026-09-07 (closed). Lo short interest era già noto, come di consueto — l'ultimo settlement registrato è di 2026-06-30, 2 giorni fa, con la pubblicazione che segue il settlement di circa due settimane (perché).
La sessione, verificata — e il venerdì che non c'è stato
L'esatto SQL dietro ogni numero
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'Il 2 luglio è stata una sessione completa, non una chiusura anticipata: le candele di SPY vanno da 04:00 a 19:59 ora di New York (incluse le candele pre-market e after-hours), con esattamente 390 candele nella finestra regolare. Venerdì 3 luglio sono state registrate 0 candele di SPY — una chiusura completa per l'Independence Day, dato che il 4 luglio cadeva di sabato. La settimana di quattro sessioni: il riepilogo settimanale.
FAQ
Perché il Dow è salito mentre il Nasdaq è sceso il 2 luglio 2026?
I due indici contengono società differenti: DIA ha chiuso a 1.04%, QQQ a -1.71%. Il settore presenta la stessa divisione — health care, utilities e beni di consumo in testa, tecnologia per ultima a -2.71%, con un divario di 5.34 punti dal miglior al peggior.
La borsa era aperta il venerdì della settimana di Independence Day?
No. L'Independence Day è caduto di sabato e le borse hanno osservato la festività con la chiusura completa del venerdì successivo a questa sessione: i nostri dati mostrano 0 candele minute di SPY per tale data.
Cosa comporta un forward stock split sul prezzo delle azioni?
Moltiplica il numero di azioni per quattro e divide il prezzo per quattro; il valore della posizione rimane invariato. CRWD, 2 luglio: una chiusura non aggiustata di $772.45 mercoledì, $193.67 giovedì — un calo fittizio su qualsiasi screener che non consideri lo split.
Qual era l'ampiezza degli spread bid-ask il 2 luglio 2026?
Lo spread mediano quotato di SPY era di 0.27 punti base rispetto al mid-price durante l'orario regolare — 11 di 22 sessioni precedenti per ampiezza, una giornata ordinaria. I singoli titoli hanno registrato spread più ampi: MU 5.52 bps, WDC 10.79.
Note sui dati
- Il volume in Dollar è un proxy al minuto — prezzo di chiusura × volume, sommati per barra.
- Il dato Treasury di luglio è arrivato dopo la prima pubblicazione — la nota originale segnalava l'assenza tramite un conteggio delle righe; questa revisione include il dato, con relativo conteggio.
- La variazione del close grezzo di CRWD è un artefatto dovuto a un split — esclusa dai monitor dei mover.
Note complete sui dati
- Il board di settore comprende gli undici fondi SPDR Select Sector (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY) — un basket fisso e dichiarato, non un campo settore del vendor.
- Il conteggio del quote-tape è suddiviso per data UTC del timestamp SIP; una sessione estiva rientra in un unico giorno UTC.
- Una quotazione di giugno con simbolo riutilizzato è esclusa dalle classifiche (ricevute); l'analisi forense dei tick è disponibile nei deep-dives.
Metodologia
- Il periodo è di una sessione di trading (sessione 1, verificata tramite le candele osservate). I timestamp sono memorizzati in UTC e convertiti nell'ora di New York all'interno delle query; "close" indica l'ultima candela al minuto della sessione regolare, e il cambio di giorno confronta il 2 luglio con il 1 luglio. La chiusura del 3 luglio è stata verificata tramite le candele, non è stata assunta.
- Gli spread sono quotati (ask meno bid) in punti base rispetto al mid-price, mediana delle quotazioni NBBO durante l'orario regolare, su un quantile deterministico. I decimali vengono convertiti in float prima dell'aritmetica dei rapporti; le scadenze delle option vengono rielaborate dal ticker OCC. Ogni pannello viene letto una sola volta, al momento della redazione, tramite il percorso di sola lettura protetto.
Grafico, tabella e SQL sono un unico oggetto. Incolla qualsiasi pannello nel terminale Strasmore per personalizzarlo. Sessione precedente: 1 luglio. La settimana: la settimana festiva di quattro sessioni.