Recap mercato 7 luglio 2026
I semiconduttori trascinano giù l'indice mentre NVDA resiste. Rapporto due a uno tra decliners e advancers e lo spread di SPY al minimo mensile.
Martedì 7 luglio 2026 ha annullato la crescita registrata con il rialzo di lunedì — e oltre: QQQ ha chiuso a -1.82%, cancellando quasi completamente il guadagno di lunedì, rispetto al -0.29% di DIA. Nel sottostante, il rapporto tra titoli in calo e in rialzo è stato di due a uno: 4034 declinanti liquidi contro 2091 advancers. Il dato principale della giornata è stato il crollo dei semiconduttori, con volumi molte volte superiori a quelli dell'indice — un evento a cui i giganti del settore sono rimasti estranei. Ogni numero riportato di seguito è estratto da una query memorizzata — espandere ogni pannello per visualizzare la SQL esatta.
Il tabellone
Ogni variazione confronta l'ultima barra di un minuto della sessione regolare del 7 luglio con quella di lunedì 6 luglio — sessioni di trading consecutive.
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-06 13:30:00' AND window_start < '2026-07-06 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-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY ticker
)
SELECT
s.ticker AS ticker,
round(toFloat64(p.prior_close), 2) AS prior_close,
round(toFloat64(s.day_open), 2) AS day_open,
round(toFloat64(s.day_close), 2) AS day_close,
round((toFloat64(s.day_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
round(toFloat64(s.day_high), 2) AS day_high,
round(toFloat64(s.day_low), 2) AS day_low,
s.shares_traded_m AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.tickerIl -1.82% di QQQ ha guidato i quattro ETF indicizzati verso il basso; SPY ha chiuso -0.48%, IWM -0.9%, e il -0.29% di DIA è stato il dato più contenuto. Il divario tra gap e trend mostra una divergenza tra le due estremità del mercato all'apertura: il gap overnight di QQQ è stato di -1.17% e il suo trend dall'apertura alla chiusura è stato di -0.65% — il gap ha causato la maggior parte delle perdite — mentre DIA ha aperto con un gap rialzista di 0.47% ma ha chiuso in rosso, con un movimento dall'apertura alla chiusura pari a -0.76%. La leadership è cambiata in ogni sessione da giovedì: DIA ha guidato giovedì, QQQ ha guidato lunedì, e nuovamente DIA martedì.
La giornata è stata insolita?
L'esatto SQL dietro ogni numero
SELECT
round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-07')), 2) AS qqq_close_over_close_pct,
arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-07'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-07'))) + 1 AS qqq_abs_move_rank,
countIf(ticker = 'QQQ') AS qqq_sessions_compared,
round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-07')), 2) AS spy_open_to_close_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-07'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-07'))) + 1 AS spy_abs_move_rank,
countIf(ticker = 'SPY') AS spy_sessions_compared,
toString(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-06-04 00:00:00')
AND window_start < toDateTime('2026-07-08 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)
WHERE isFinite(cc_pct)A livello di indici, non particolarmente. La variazione close-over-close di QQQ del -1.82% si posiziona al 9 delle 21 sessioni precedenti per valore assoluto, e la variazione open-to-close di SPY del -0.34% si posiziona al 15 delle 21 — un mese di riferimento che include le forti oscillazioni di fine giugno che stabiliscono un parametro molto alto. La dispersione sottostante è l'elemento che ha caratterizzato il 7 luglio.
Breadth: due in calo per ogni uno in rialzo
L'esatto SQL dietro ogni numero
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-07 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') AS day_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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
FROM per_ticker
WHERE prior_close > 0 AND day_close > 02091 advancers, 4034 decliners, 59 unchanged — il 33.8% del liquid tape è salito, invertendo il segno positivo di lunedì. Il filtro esclude il 5276 di 11460 ticker dual-session con volume inferiore a un milione di dollari.
Il settore dei chip è crollato — tranne i suoi titoli principali
Le vendite si sono concentrate sui semiconduttori: i produttori di chip, i fornitori di apparecchiature, il comparto relativo allo storage e gli ETF a leva associati. Di seguito sono riportati la correlazione e l'entità dei movimenti; i dati non ne spiegano le cause.
L'esatto SQL dietro ogni numero
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-07 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-07-07 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-07-07 00:00:00') AS day_low,
argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-07 00:00:00') AS low_bar,
argMaxIf(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-07 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
AND ((window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
toHour(toTimeZone(high_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(high_bar, 'America/New_York')) AS high_minute_et,
toHour(toTimeZone(low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(low_bar, 'America/New_York')) AS low_minute_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
day_dollar_bn
FROM per_name
ORDER BY tickerTeradyne (-9.63%) e Intel (-9.59%) hanno perso quasi un decimo del loro valore, seguiti da vicino da Marvell (-7.41%), KLA (-7.23%), Lam Research (-6.8%) e AMD (-6.41%). I titoli legati a memoria e storage che hanno registrato un rimbalzo parziale lunedì hanno annullato i guadagni: SanDisk -7.1% su un range 10.36% tra massimo e minimo, Western Digital -7.81%, Seagate -4.84% e MU -4.61% — con MU che ha scambiato $41.6 miliardi di azioni, più dei volumi combinati degli altri tre titoli di storage (l'analisi approfondita su MU fornisce il contesto)).
I due giganti del settore sono rimasti stabili: NVDA ha chiuso in positivo al 0.67% e Broadcom ha terminato quasi invariato al -0.83% — una giornata in rosso per l'intero settore, fatta eccezione per i suoi membri più grandi (l'analisi approfondita di NVDA di giugno).
Il timing è stato sincronizzato — un unico vuoto d'aria mattutino: TER, LRCX e MU hanno registrato i minimi di sessione a 10:41, 10:41 e 10:41 ET, con SanDisk, Marvell, KLA, AVGO e SOXL nello stesso intervallo di minuti (il pannello riporta ogni timestamp), e SOXS, l'ETF inverso 3x sui semiconduttori, ha registrato il suo massimo di sessione a 10:42 — il movimento opposto. Intel ha continuato a scendere molto dopo la stabilizzazione degli altri, toccando il minimo a 15:18. Gli strumenti a leva riflettono l'entità del movimento: SOXL -15.15% contro SOXS +15.87%.
L'altro lato del listino
Un rapporto di due contro uno in rosso mantiene comunque un terzo in verde. Ecco cosa è salito mentre i chip scendevano:
L'esatto SQL dietro ogni numero
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-07 00:00:00')) AS prior_close_raw,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-07 00:00:00')) AS day_open_raw,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close_raw,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('CRNX', 'CVX', 'JNJ', 'LLY', 'META', 'TSLA', 'UNH', 'XOM')
AND ((window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close_raw, 2) AS prior_close,
round(day_open_raw, 2) AS day_open,
round(day_close_raw, 2) AS day_close,
round((day_open_raw / prior_close_raw - 1) * 100, 2) AS gap_pct,
round((day_close_raw / day_open_raw - 1) * 100, 2) AS intraday_pct,
round((day_close_raw / prior_close_raw - 1) * 100, 2) AS pct_chg,
day_dollar_bn
FROM per_name
ORDER BY tickerEnergy e healthcare hanno trainato la colonna verde: Exxon +3.78%, Chevron +3.47%, Johnson & Johnson +3.07%, Eli Lilly +2.75%, UnitedHealth +2.41%. Le due megacap di questo pannello si sono divise: META è salita del +2.52% mentre TSLA ha restituito gran parte del rialzo unidirezionale di lunedì al -4.02%. E il dato singolo più rilevante del listino: Crinetics Pharmaceuticals (CRNX) ha chiuso a +98.79% su 4.19 miliardi scambiati, quasi raddoppiando — l'intero movimento è avvenuto tramite un gap overnight (98.91% all'apertura; la sessione regolare lo ha spostato solo del -0.06%), il tipo di repricing tra le sessioni che avviene dove avvengono i pre-market trades. I dati non indicano la causa.
Dove sono stati scambiati i capitali
L'esatto SQL dietro ogni numero
SELECT leaderboard, ticker, dollar_volume_bn, 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(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_volume_bn DESC
LIMIT 6
UNION ALL
SELECT
'by shares traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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) DESCMU ha guidato i volumi del dollaro a $41.6 miliardi — una sessione dopo aver ceduto il primato, lo ha riconquistato — con SPY ($28.68 miliardi) e QQQ ($26.54 miliardi) a seguire, e altri tre titoli del settore semiconductor — NVDA ($19.95 miliardi), SNDK ($19.73 miliardi) e INTC ($13.82 miliardi) — a completare la top six. La concentrazione del turnover sui singoli titoli è ciò che il volume relativo segnala.
Sulla bacheca delle azioni, SOXS ha scambiato 566.3 milioni di azioni — l'ETF semiconductor inverse 3x guida il conteggio per la terza sessione consecutiva (lunedì e giovedì riportano i dati precedenti), questa volta nel giorno in cui il suo settore ha effettivamente subito un breakout. CPOP rappresenta l'esempio opposto: 161.3 milioni di azioni hanno generato solo $0.02 miliardi — i volumi azionari sono più piatti per i titoli low-cost. Base: 7 luglio orario regolare; un titolo con simbolo riutilizzato è escluso in attesa della verifica dell'entità — i suoi ricevute.
L'andamento della sessione
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-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY et_time
ORDER BY et_time2 miliardi di azioni nella prima mezz'ora, un minimo di 0.64 miliardi a 13:30, e 2.14 miliardi verso la chiusura delle 15:30 — il classico andamento a sorriso, con volumi maggiori alla chiusura.
Il tape delle opzioni
L'esatto SQL dietro ogni numero
WITH
(
SELECT (groupArray(und), groupArray(strike), groupArray(typ), groupArray(vol), groupArray(avg_px), groupArray(is_0dte))
FROM (
SELECT any(underlying_symbol) AS und, any(toFloat64(strike_price)) AS strike, any(option_type) AS typ,
sum(size) AS vol, round(avg(toFloat64(price)), 3) AS avg_px,
if(substring(ticker, length(ticker) - 14, 6) = '260707', 1, 0) AS is_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
GROUP BY ticker
ORDER BY vol DESC
LIMIT 2
)
) AS top2,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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) = '260707') / sum(size), 1) AS same_day_expiry_pct,
round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707')) / 1e6, 2) AS same_day_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,
round(toFloat64(sumIf(size, underlying_symbol = 'INTC')) / 1e6, 2) AS intc_contracts_m,
top2.1[1] AS top_contract_underlying,
top2.2[1] AS top_contract_strike,
top2.3[1] AS top_contract_type,
if(top2.3[1] = 'C', 1, 0) AS top_contract_is_call,
top2.4[1] AS top_contract_volume,
top2.5[1] AS top_contract_avg_price,
round(top2.2[1] - spy_regular_close, 2) AS top_strike_minus_spy_close,
top2.1[2] AS second_contract_underlying,
top2.2[2] AS second_contract_strike,
top2.3[2] AS second_contract_type,
if(top2.3[2] = 'P', 1, 0) AS second_contract_is_put,
top2.4[2] AS second_contract_volume,
top2.5[2] AS second_contract_avg_price,
round(spy_regular_close - top2.2[2], 2) AS spy_close_minus_second_strike,
top2.6[1] + top2.6[2] AS both_top_contracts_same_day,
spy_regular_close AS spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'Sono stati scambiati 61.13 milioni di contratti su 10.6 milioni di operazioni — un volume pari a lunedì — e i call hanno rappresentato ancora il 55.6% del volume in una giornata di ribasso. Le scadenze in giornata hanno costituito il 31.2% del tape (19.08 milioni di contratti) — la quota 0DTE di un martedì ordinario. I due contratti più attivi della giornata sono stati scambiati in prossimità della chiusura, entrambi con strike SPY in scadenza: il call da $749 (873438 contratti a una media di $0.647) è terminato $1.34 out of the money, e il put da $747 (785834 contratti a $0.88) è terminato $0.66 dall'altro lato. La chiusura di SPY a 747.66 si è posizionata tra le due scommesse più grandi della giornata, ed entrambe sono scadute senza valore.
Il flusso delle quotazioni
Sotto ogni prezzo presente in questa pagina si trova il flusso delle quotazioni — il National Best Bid and Offer, quotato continuamente per ogni titolo listato, il dataset più difficile da reperire in questo warehouse. Viene misurato qui ogni sessione, sia essa ordinaria o meno.
L'esatto SQL dietro ogni numero
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / 1e6, 2) AS jul7_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-06')) / 1e6, 2) AS jul6_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / countIf(toDate(sip_timestamp) = toDate('2026-07-06')) - 1) * 100, 1) AS day_over_day_pct,
toHour(toTimeZone(maxIf(sip_timestamp, toDate(sip_timestamp) = toDate('2026-07-07')), 'America/New_York')) * 60
+ toMinute(toTimeZone(maxIf(sip_timestamp, toDate(sip_timestamp) = toDate('2026-07-07')), 'America/New_York')) AS jul7_last_quote_et_minute,
round(countIf(sip_timestamp >= '2026-07-07 19:00:00' AND sip_timestamp < '2026-07-07 20:00:00') / 1e6, 2) AS jul7_close_hour_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'Il tape delle equity ha registrato 492.76 milioni di aggiornamenti NBBO il 7 luglio — 25.7% in più rispetto ai 391.96 milioni di lunedì. Più attività di re-quoting, non spread più ampi:
L'esatto SQL dietro ogni numero
SELECT
ticker,
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-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00'), 2) AS pocket_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-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42: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-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48: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-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 2) AS spread_delta_bps,
round(countIf(sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / 1e3, 1) AS pocket_updates_k,
round(countIf(sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00') / 1e3, 1) AS midday_updates_k,
round(countIf(sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / countIf(sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 1) AS quote_rate_ratio,
round(count() / 1e6, 2) AS session_updates_m,
countIf(bid_price <= 0 OR ask_price <= 0 OR bid_price > ask_price) AS dropped_invalid_quotes
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AMD', 'INTC', 'MU', 'NVDA', 'QQQ', 'SNDK', 'SOXL', 'SOXS', 'SPY', 'WDC')
AND sip_timestamp >= '2026-07-07 13:30:00' AND sip_timestamp < '2026-07-07 20:00:00'
GROUP BY ticker
ORDER BY tickerIn corrispondenza dei minimi mattutini, i titoli controllati hanno effettuato il re-quoting a multipli rispetto al ritmo di metà giornata — MU 3.4x, SanDisk 4.1x, AMD 4.6x — e il bid-ask spread è rimasto quasi invariato: la mediana della larghezza di MU era di 5.02 bps durante il calo rispetto a 4.81 a metà giornata, quella di NVDA era di 1.04 contro 1.01, e quella di SPY non è cambiata affatto (variazione di 0 bps su un tocco di 0.27 bps). I due titoli che hanno subito un reale aumento dello spread sono stati AMD (+2.6 bps) e Intel (+0.95) — Intel è l'unico titolo che ha continuato a scendere dopo il calo — mentre la coppia a leva ha effettivamente ristretto lo spread ai minimi (SOXL -2.59 bps, SOXS -1.49). Un vuoto di liquidità si manifesta con quotazioni ampie e silenzio; questo è stato l'opposto — una tempesta di quotazioni con il tocco ancorato. I costi di esecuzione sono rimasti dipendenti dal titolo: SOXS quotava 19.59 bps di spread ai minimi contro i 1.04 di NVDA.
L'esatto SQL dietro ogni numero
SELECT
round(anyIf(avg_spread_cents, d = toDate('2026-07-07')), 3) AS jul7_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-07')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-07'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(min(avg_spread_cents), 3) AS tightest_session_cents,
round(max(avg_spread_cents), 3) AS widest_session_cents,
toString(min(d)) AS first_session,
sum(dropped_invalid) AS dropped_invalid_quotes
FROM (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents,
countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-05 00:00:00')
AND sip_timestamp < toDateTime('2026-07-08 00:00:00')
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
)E questa sezione "ordinaria-check" viene eseguita ogni sessione: per media ponderata degli spread quotati, il 7 luglio è stata la sessione con lo spread più stretto per SPY dell'ultimo mese — 1.809 centesimi, posizione 1 su 21, rispetto a un mese che ha raggiunto i 2.865 centesimi al suo massimo di ampiezza. Un red tape di due-a-uno con il tocco dell'indice più stretto del mese è un fatto che solo il flusso delle quotazioni può confermare.
L'esatto SQL dietro ogni numero
WITH
(
SELECT count()
FROM global_markets.cache_options_quotes
WHERE toYYYYMMDD(sip_timestamp) = 20260707
) AS jul7_option_rows,
(
SELECT count()
FROM global_markets.cache_options_quotes
WHERE toYYYYMMDD(sip_timestamp) = 20260706
) AS jul6_option_rows,
(
SELECT count()
FROM global_markets.cache_stocks_quotes
WHERE toYYYYMMDD(sip_timestamp) = 20260707
) AS jul7_stock_quote_rows
SELECT
jul7_option_rows AS jul7_option_quote_rows,
round(jul7_option_rows / 1e9, 2) AS jul7_option_quote_updates_bn,
round(jul6_option_rows / 1e9, 2) AS jul6_option_quote_updates_bn,
round((jul7_option_rows / jul6_option_rows - 1) * 100, 1) AS day_over_day_pct,
round(jul7_stock_quote_rows / 1e6, 2) AS jul7_stock_quote_updates_m,
round(jul7_option_rows / jul7_stock_quote_rows, 1) AS jul7_option_to_stock_ratioIl flusso delle quotazioni delle opzioni è ancora più vasto ed è il dataset più grande di questo warehouse. Il 7 luglio ha registrato 8.69 miliardi di aggiornamenti NBBO sulle opzioni, ovvero 17.6 volte la dimensione dell'intero tape delle quotazioni azionarie della stessa sessione (492.76 milioni di aggiornamenti). Il tape delle opzioni di lunedì conteneva 6.49 miliardi, quindi il flusso delle opzioni è cresciuto del 34% sessione su sessione, insieme al 25.7% del flusso equity.
L'esatto SQL dietro ogni numero
WITH
(
SELECT count()
FROM global_markets.cache_stocks_quotes
WHERE toYYYYMMDD(sip_timestamp) = 20260707
) AS jul7_stock_quote_rows,
(
SELECT round(toFloat64(avg(close)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-07-07 14:36:00' AND window_start < '2026-07-07 14:48:00'
) AS spy_pocket_price,
(
SELECT round(toFloat64(avg(close)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-07-07 17:30:00' AND window_start < '2026-07-07 17:42:00'
) AS spy_midday_price
SELECT
round(count() / 1e6, 2) AS spy_option_updates_m,
round(100.0 * count() / jul7_stock_quote_rows, 1) AS pct_of_whole_equity_quote_tape,
uniqExact(ticker) AS spy_contracts_quoted,
round(countIf(substring(ticker, -15, 6) = '260707') / 1e6, 2) AS same_day_updates_m,
spy_pocket_price AS spy_price_in_pocket,
spy_midday_price AS spy_price_midday,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price),
bid_price > 0 AND ask_price >= bid_price
AND substring(ticker, -15, 6) = '260707'
AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_pocket_price) <= 2
AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00'), 3) AS pocket_atm_spread_dollars,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price),
bid_price > 0 AND ask_price >= bid_price
AND substring(ticker, -15, 6) = '260707'
AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_midday_price) <= 2
AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 3) AS midday_atm_spread_dollars,
round(pocket_atm_spread_dollars - midday_atm_spread_dollars, 3) AS atm_spread_delta_dollars,
round(countIf(substring(ticker, -15, 6) = '260707'
AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_pocket_price) <= 2
AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / 1e3, 1) AS pocket_atm_updates_k,
round(countIf(substring(ticker, -15, 6) = '260707'
AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_midday_price) <= 2
AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00') / 1e3, 1) AS midday_atm_updates_k,
round(pocket_atm_updates_k / midday_atm_updates_k, 1) AS atm_quote_rate_ratio,
countIf(NOT (bid_price > 0 AND ask_price >= bid_price)
AND substring(ticker, -15, 6) = '260707') AS dropped_invalid_same_day_quotes
FROM global_markets.cache_options_quotes
WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
AND sip_timestamp >= '2026-07-07 13:30:00' AND sip_timestamp < '2026-07-07 20:00:00'
HAVING pocket_atm_updates_k > 0 AND midday_atm_updates_k > 0Solo i contratti con scadenza 2026 di SPY hanno generato 327.55 milioni di quegli aggiornamenti durante l'orario regolare, distribuiti su 9116 contratti listati. Si tratta del 66.5% di quanto quotato dall'intero mercato azionario lo stesso giorno, partendo da un unico sottostante. Le scadenze dello stesso giorno che compongono il tape 0DTE rappresentano 13.61 milioni di tali aggiornamenti.
Durante i dodici minuti di vuoto mattutino, i contratti near-the-money con scadenza in giornata hanno quotato una mediana di $0.01 di spread, esattamente quanto quotato durante la fase di controllo a metà giornata ($0.01, un delta di 0). Il tasso di quotazione per questa stessa coppia è stato di 3x: 191.1 mila aggiornamenti ai minimi contro 64 mila a pranzo. Il tocco delle opzioni ha fatto ciò che ha fatto il tocco delle azioni. Ha mantenuto la sua ampiezza mentre il meccanismo di quotazione era estremamente attivo. Near-the-money significa uno strike entro $2 dal prezzo medio di SPY nello stesso intervallo temporale, e il pannello riporta entrambi i prezzi (746 durante il calo, 749.08 a metà giornata).
Tassi: la curva ha subito un sell-off con il sentiment sulla crescita
L'esatto SQL dietro ogni numero
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jul7_yield_pct,
round((t.2 - t.3) * 100) AS session_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-07') AS d,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-06') AS p
)I Treasury hanno subito un sell-off insieme al sentiment sulla crescita. Il rendimento a un anno è salito di 11 punti base arrivando al 4.06%, il dieci anni è passato da 7 a 4.55%, e il trenta anni da 6 a 5.05% — superando la soglia del cinque per cento. Lo spread 2s10s si è mantenuto al 0.36 di punti percentuali (una variazione di 1 punti base): un movimento prevalentemente parallelo, non una nuova forma della curva.
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-07'
) AS news,
(
SELECT (argMax(t, n), max(n), max(n) - arraySort(x -> -x, groupArray(n))[2])
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-07'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-07') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS splits_executed,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS forward_splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-07') AS ipos_listed,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS sec_filings,
(SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS insider_form4_filings,
(SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS filings_8k,
news.1 AS news_articles,
news.2 AS news_publishers,
top_news.1 AS most_covered_ticker,
if(top_news.1 = 'NVDA', 1, 0) AS most_covered_is_nvda,
top_news.2 AS most_covered_articles,
top_news.3 AS most_covered_lead_over_next,
(SELECT countIf(has(tickers, 'CRNX')) FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-07') AS crnx_articlesI record dei dividendi di 79 sono andati ex-dividend, sono stati eseguiti 7 split — 5 di questi sono stati reverse splits, consolidamenti sotto il dollaro che simulano guadagni a tre cifre su un tape non rettificato, contro 2 forward — ed è arrivata 1 nuova quotazione. L'indice SEC ha registrato 2433 comunicazioni: 463 Form 4s, 173 8-Ks. Il nostro feed di notizie ha riportato 215 articoli di 3 editori; il nome più coperto è stato NVDA con 17 articoli, 4 di vantaggio rispetto al nome successivo — lo stesso NVDA che ha chiuso in rialzo nonostante la giornata in rosso del suo settore. Il feed ha riportato 0 articoli su CRNX, il miglior performer del tape — l'attenzione di un singolo feed, non dei media mondiali.
La sessione, verificata
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-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-07') AS jul7_holiday_rows,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-07' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-07' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-07 00:00:00' AND window_start < '2026-07-08 00:00:00'Il 7 luglio è stata una sessione completa, non una chiusura anticipata: le barre di SPY vanno da 04:00 a 19:59 ora di New York con esattamente 390 barre della finestra regolare, e la tabella delle festività riporta 0 righe per la data. La prossima chiusura prevista è il Labor Day, 2026-09-07.
Note sui dati
- Il volume in dollari è un proxy al minuto — calcolato come prodotto tra prezzo di chiusura e volume per ogni barra da un minuto, durante l'orario regolare.
- La distinzione gap-versus-grind è misurata confrontando la prima barra della sessione regolare di ogni titolo (l'apertura) con l'ultima chiusura regolare della sessione precedente; il resto rappresenta il movimento dall'apertura alla chiusura all'interno del 7 luglio.
- I minimi mattutini sincronizzati sono stati verificati rispetto alle barre adiacenti al momento della redazione — ogni minimo è tracciato dai minuti limitrofi, non da una singola quotazione; nessuno ha richiesto l'inserimento come anomalia. Qualora un estremo sia apparso in più di un minuto, il pannello mostra la prima barra in tal senso (un criterio di pareggio deterministico).
- Un titolo con simbolo riutilizzato è escluso dalle classifiche dei volumi e dai riferimenti alle news in attesa della verifica dell'entità; il suo post dedicato contiene le prove.
- Le statistiche sullo spread quotato escludono le quotazioni non valide (record NBBO unidirezionali o incrociati), e ogni pannello dello spread riporta il numero di scarti in una colonna dedicata. Lo "spread medio ponderato sugli aggiornamenti" calcola la larghezza quotata su ogni aggiornamento NBBO valido — i momenti di alta attività hanno un peso maggiore; si tratta di una statistica di quotazione, non di un costo per singola operazione.
- Le quotazioni delle opzioni del 7 luglio sono arrivate dopo la prima pubblicazione di questo post.
cache_options_quotespresenta il ritardo di ingestione più lungo del warehouse, pertanto la prima edizione ha prodotto un record con riga zero dove ora si trovano i pannelli delle quotazioni delle opzioni. I dati sono arrivati, il limite della riga zero è fallito durante la rigenerazione, e questa revisione legge i 8.69 miliardi di aggiornamenti della sessione. Il tape delle quotazioni equity era completo fin dall'inizio: il suo ultimo aggiornamento del 7 luglio è registrato al minuto ET 1199, con 77.13 milioni di aggiornamenti nell'ultima ora regolare (colonne dei record nel pannello del tape delle quotazioni). - Le larghezze quotate delle opzioni sono misurate near the money. La mediana per aggiornamento su ogni contratto listato della stessa giornata è una statistica composita: i contratti deep in-the-money quotano spread di dollari, i contratti far out-of-the-money quotano centesimi, e i contratti che ricollezionano cambiamenti durante la sessione sono inclusi. Il confronto pocket-versus-midday si limita agli strike entro i 2 dollari dal prezzo medio di SPY in ogni finestra, e entrambi i prezzi sono colonne nel pannello. Le quotazioni delle opzioni non valide (unidirezionali o incrociate) sono conteggiate in quel pannello, non vengono rimosse silenziosamente.
- Il dato Treasury per il 7 luglio è stato ingerito in ritardo rispetto alla sessione — la prima edizione ha prodotto un record con ritardo dichiarato; il trigger è scattato il 8 luglio con l'arrivo del dato, e questa revisione contiene la curva reale.
Metodologia
- Il periodo corrisponde a una singola sessione di trading (sessione 1, verificata tramite le barre osservate e il calendario festivo — mai assunta). I timestamp sono memorizzati in UTC e convertiti nell'ora di New York all'interno delle query. "Close" indica l'ultima barra al minuto della sessione regolare; i cambiamenti giornalieri confrontano il 7 luglio con il 6 luglio, sessioni di trading consecutive.
- Le colonne decimali vengono convertite in float a 64 bit prima dell'aritmetica dei rapporti; le scadenze delle option vengono rielaborate dal ticker OCC (la colonna di scadenza della tabella è errata). Tutti i pannelli vengono letti una sola volta, al momento della redazione, tramite il percorso di sola lettura protetto. Stato del warehouse al 8 luglio 2026.
- La sezione quote-tape è stata aggiunta nella revisione dell'8 luglio (la stessa revisione che ha sostituito il treasury lag receipt con il landed print), e i suoi pannelli delle option-quote sono stati riscritto non appena le righe NBBO delle option del 7 luglio sono state caricate. La generazione è un processo batch: il pannello option-quote di SPY scansiona alcune centinaia di milioni di record NBBO, mentre i conteggi tape-size leggono i totali delle righe delle partizioni giornaliere, metodo che permette a una tabella con miliardi di righe per sessione di rispondere a un conteggio in meno di un secondo.
Ogni pannello è il risultato di una query memorizzata — grafico, tabella e SQL sono un unico oggetto. Incolla uno qualsiasi di essi nel terminale Strasmore per personalizzarlo. Sessione precedente: 6 luglio.