Strasmore Research
Recap di mercato Matt ConnorDi Matt Connor · Aggiornato 2026-09-28

Recap di mercato 2 luglio 2026: i numeri del giorno

Rotazione pre-festiva: ampiezza positiva con Nasdaq in calo, tecnologia ultima tra gli undici settori, secondo giorno di vendite sulle memorie e un ribasso apparente.

Giovedì 2 luglio 2026, ultima seduta prima della chiusura per l’Independence Day, è stata una giornata di rotazione con i titoli dei media concentrati su un selloff. QQQ ha registrato -1.71%, mentre DIA è salito di 1.04%, e l’ampiezza del mercato è stata POSITIVE: sono saliti 3398 titoli liquidi contro 2758, con 54.6% del mercato in rialzo nonostante il calo dell’indice growth. Otto degli undici fondi settoriali hanno chiuso in rialzo; le vendite si sono concentrate sul comparto tecnologico e sul segmento delle memorie, che aveva ceduto il giorno precedente.

Il tabellone

QuerySPY / QQQ / DIA / IWM: 2 luglio vs chiusura del 1° luglio, orario regolare
tickerchiusura precedenteapertura giornalierachiusura giornalieravariazione %massimo giornalierominimo giornalieroazioni scambiate (M)
DIA522.41525.49527.831.04528.26523.733
IWM299.31300.54297.53-0.59302.23294.9818.5
QQQ725.16725.58712.74-1.71730.83707.5643.7
SPY745.69747.4744.8-0.12751.31740.0343.9
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.ticker
Provalo tu stesso

DIA a 1.04% contro QQQ a -1.71%: la seduta si riassume così, con industriali e titoli growth separati da quasi tre punti percentuali di rendimento giornaliero. SPY si è collocato a metà, a -0.12%; IWM ha chiuso a -0.59%.

Giornata anomala?

Due prospettive nello stesso pannello: il movimento dall’apertura alla chiusura di SPY e il movimento tra una chiusura e quella precedente di QQQ, ciascuno confrontato con il mese precedente in base all’ampiezza assoluta (rango 1 = maggiore).

QuerySPY e QQQ classificati rispetto all’ultimo mese di sessioni (1 = variazione assoluta maggiore)
SPY apertura-chiusura (%)posizione variazione assoluta SPYsessioni SPY confrontateQQQ chiusura su chiusura (%)posizione variazione assoluta QQQsessioni QQQ confrontateprima sessione
-0.351522-1.719212026-06-02
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_prev
Provalo tu stesso

A livello di indice, no. Il movimento di SPY dall’apertura alla chiusura, pari a -0.35%, si colloca al 15° posto su 22 sedute precedenti, quindi nella metà inferiore. QQQ ha mostrato un movimento più marcato, ma non estremo: la variazione tra una chiusura e quella precedente, pari a -1.71%, si colloca al 9° posto su 21 sedute con una chiusura precedente definita, a partire da 2026-06-02. Per l’indice growth è stata una giornata negativa nella fascia intermedia. È sul listino dei singoli titoli che il 2 luglio il movimento è stato davvero marcato.

Ampiezza di mercato: tape positivo, indice growth negativo

QueryTitoli in rialzo vs in ribasso tra i ticker con almeno $1M di controvalore scambiato il 2 luglio
titoli in rialzotitoli in ribassoinvariatiticker liquiditicker scambiati in entrambe le sessioniesclusi dal filtro di liquiditàtitoli in rialzo (%)titoli in rialzo (formattato)titoli in ribasso (formattato)esclusi dal filtro di liquidità (formattato)ticker scambiati in entrambe le sessioni (formattato)
3398275863621911536531754.63,3982,7585,31711,536
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 > 0
Provalo tu stesso

3,398 titoli in rialzo, 2,758 titoli in ribasso e 63 invariati; 54.6% dei titoli liquidi ha chiuso in rialzo, mentre QQQ è sceso. Gli indici ponderati per capitalizzazione e l’ampiezza basata sul conteggio paritario hanno fornito indicazioni diverse. Giornate come questa spiegano perché il pannello includa entrambe le metriche. Il filtro esclude 5,317 dei 11,536 ticker presenti in entrambe le sessioni con meno di 1 milione di dollari di scambi.

Settore per settore: dove si è concentrato il rialzo

La breadth conta i titoli, ma non indica di quale tipo siano. Gli undici fondi SPDR settoriali scompongono la seduta per settore, e la distanza tra il migliore e il peggiore misura in un solo dato la dispersione della giornata.

QueryGli undici ETF settoriali SPDR: chiusura del 2 luglio vs chiusura del 1° luglio, orario regolare
tickerchiusura precedentechiusura giornalieravariazione (%)punti sopra il settore peggiorevolume giornaliero ($ mld)
XLB5151.991.944.650.57
XLC109.74109.6-0.132.580.83
XLE52.8253.230.783.481.46
XLF54.7955.611.54.22.36
XLI183.41183.910.272.981.15
XLK185.54180.52-2.7102.43
XLP83.338524.711.33
XLRE44.1844.691.153.860.22
XLU44.7645.762.234.941.05
XLV159.57163.772.635.342.01
XLY118.07117.11-0.811.891.2
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 ticker
Provalo tu stesso

Il comparto health care (XLV) ha guidato la classifica a 2.63%, seguito da utilities 2.23%, beni di prima necessità 2% e materiali 1.94%. La tecnologia (XLK) ha chiuso in fondo alla classifica a -2.71%, unico settore in calo di oltre un punto; consumer discretionary (-0.81%) e servizi di comunicazione (-0.13%) sono stati gli altri fondi in rosso, mentre gli otto rimanenti hanno chiuso in rialzo. La dispersione tra il migliore e il peggiore è stata di 5.34 punti percentuali. La divergenza tra DIA in rialzo e QQQ in calo ha interessato l’intero mercato, non soltanto quattro megacap. Per questo una linea advance-decline positiva mentre il Nasdaq scende non è una contraddizione.

Il momento clou della giornata: il sell-off dei titoli memory, secondo giorno

Il comparto che mercoledì aveva ceduto terreno è sceso ancora più nettamente giovedì. Sono cambiate l’ampiezza dei movimenti e la loro correlazione, non la causa.

QueryTitoli memory e storage: variazione vs chiusura di mercoledì, tempistica del range e controvalore scambiato
tickerchiusura precedentechiusura giornalieravariazione (%)massimo giornalieromassimo giornaliero ETminimo giornalierominimo giornaliero ETescursione (%)volume giornaliero ($ mld)
MU1033.29975.77-5.571064.6410:03950.2815:2612.0351.4
SNDK2035.071743.59-14.322052.5409:35169315:2621.2426.57
STX915.25820.25-10.38923.0609:53795.6614:2316.014.74
WDC598.37538.99-9.92609.4609:35525.8413:5915.94.31
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 ticker
Provalo tu stesso

SanDisk ha segnato -14.32%, Seagate -10.38%, Western Digital -9.92% e MU -5.57%, con $51.4 miliardi di controvalore scambiato su MU, circa una volta e mezza quello di SPY. MU e SanDisk hanno segnato i minimi in tarda seduta (15:26, 15:26 ET), mentre Seagate e Western Digital li hanno raggiunti prima (14:23, 13:59). Per il contesto: mercoledì e l’analisi approfondita di MU.

L’altra metà della rotazione, tra le megacap:

QueryRotazione delle megacap: variazione vs chiusura di mercoledì, tempistica del range e controvalore scambiato
tickerchiusura precedentechiusura giornalieravariazione (%)massimo giornalieromassimo giornaliero ETminimo giornalierominimo giornaliero ETescursione (%)volume giornaliero ($ mld)
AAPL294.25308.224.75309.4215:57293.6809:305.3618.36
MSFT384.22389.621.41392.215:11383.709:352.2212.58
NVDA197.58194.51-1.55200.0610:03192.3513:404.0121.18
TSLA425.34392.81-7.65432.3509:31389.315:2311.0625.41
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 ticker
Provalo tu stesso

AAPL è salito del 4.75% con un andamento a senso unico. Ha segnato il minimo alle 09:30 ET e il massimo alle 15:57, tre minuti prima della chiusura. TSLA ha invece seguito il movimento speculare, a -7.65%. MSFT ha guadagnato 1.41%; NVDA ha chiuso a -1.55%. Stesso indice, giornate opposte.

Dove si sono concentrati gli scambi

QueryLeader per volume in due modi: primi 6 per controvalore, primi 4 per numero di azioni (esclusa una voce con simbolo riutilizzato in attesa della verifica dell’entità)
tickerclassificavolume in dollari (miliardi)valore in dollari (milioni)azioni (milioni)percentuale del leader della classifica
MUby dollars traded51.4None51.9100
SPYby dollars traded32.7None43.963.6
QQQby dollars traded31.3None43.760.9
SNDKby dollars traded26.57None14.651.7
TSLAby dollars traded25.41None63.649.4
NVDAby dollars traded21.18None108.641.2
SOXSby shares traded3.24None748.2100
TZAby shares traded1.27None325.743.5
LIMNby shares traded0.0442245.732.8
BITOby shares traded1.71None204.927.4
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) DESC
Provalo tu stesso

I $51.4 miliardi di MU hanno guidato il mercato per la quarta seduta consecutiva (lunedì, martedì, mercoledì), contro i $32.7 miliardi di SPY. I $26.57 miliardi di SanDisk hanno portato un secondo titolo del comparto memory tra i primi quattro. SOXS, l’ETF sui semiconduttori con leva inversa 3x, ha guidato la classifica per numero di azioni, con 748.2 milioni: i titoli a basso prezzo dominano il conteggio delle azioni, quelli più costosi il conteggio in dollari, mentre il volume relativo confronta ciascun titolo con la propria norma storica. Base: seduta regolare del 2 luglio, esclusa una quotazione con simbolo riutilizzato (ricevute).

QueryAzioni scambiate per intervallo di 30 minuti, orario regolare; eseguiti dell’asta di chiusura nell’ultimo intervallo (miliardi)
ora ETazioni (miliardi)percentuale del gruppo più grande
09:302.1360.5
10:001.6446.4
10:301.6446.5
11:001.4140
11:301.0529.7
12:001.0329.2
12:300.9627.3
13:000.8724.7
13:300.8524.2
14:000.8925.3
14:300.8123.1
15:001.0529.8
15:303.53100
L'esatto SQL dietro ogni numero
SELECT
    et_time,
    round(sum(shares) / 1e9, 2) AS shares_bn,
    round(100 * sum(shares) / max(sum(shares)) OVER (), 1) AS pct_of_biggest_bucket
FROM
(
    SELECT
        formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
        toFloat64(volume) AS shares
    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'
    UNION ALL
    SELECT
        '15:30' AS et_time,
        toFloat64(size) AS shares
    FROM global_markets.stocks_trades
    WHERE sip_timestamp >= '2026-07-02 20:00:00' AND sip_timestamp < '2026-07-02 20:15:00'
      AND has(conditions, 8)
)
GROUP BY et_time
ORDER BY et_time
Provalo tu stesso

2.13 miliardi di azioni nella prima mezz’ora di contrattazioni, un minimo di 0.81 miliardi alle 14:30, 3.53 miliardi fino alla chiusura alla vigilia della festività. L’ultimo intervallo è stato il più consistente della giornata, perché l’asta di chiusura convoglia gli ordini pendenti in un unico print.

Il flusso degli ordini sulle opzioni: la weekly posticipata

QueryUn’unica riga per l’intera giornata di options: volume, scadenze same-day, settimana spostata per la festività e scadenza mensile di luglio
eseguiti di opzioni (milioni)contratti (milioni)percentuale delle call sul volumepercentuale di scadenze in giornatacontratti in scadenza giovedì 2 luglio (milioni)eseguiti di venerdì 3 lugliocontratti settimanali del 10 luglio (milioni)contratti mensili del 17 luglio (milioni)contratti SPY (milioni)contratti QQQ (milioni)sottostante del contratto principalestrike del contratto principaletipo di contratto principalescadenza del contratto principalevolume del contratto principaleformato del volume del contratto principaleprezzo medio del contratto principalestrike principale meno chiusura SPYchiusura SPY meno strike
13.1580.9658.447.438.3809.648.8213.968.5SPY740P2026-07-02540403540,4030.499-4.84.8
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'
Provalo tu stesso

Sono stati scambiati 80.96 milioni di contratti su 13.15 milioni di eseguiti, e 47.4% di quei volumi è scaduto lo stesso giovedì. Per tutta la giornata non è stato eseguito alcun contratto con codice di scadenza 3 luglio (0 eseguiti), quindi il giovedì ha concentrato sia la scadenza giornaliera sia la weekly posticipata della settimana. Il contratto più scambiato è stato il put SPY a $740 con scadenza in giornata: 540,403 contratti a un premio medio di $0.499, mentre SPY ha chiuso 4.8 dollari sopra lo strike. Era quindi out of the money, ed era un put su un book nel quale martedì e mercoledì avevano visto soprattutto call. Le call hanno comunque rappresentato 58.4% dei volumi; la weekly successiva ha registrato 9.64 milioni di contratti e la mensile di luglio 8.82 milioni (meccanica della scadenza).

Il book delle quotazioni: quanto è costato negoziare

I prezzi dicono che cosa è successo; le quotazioni dicono quanto è costato. Il bid-ask spread è il pedaggio su ogni andata e ritorno, espresso in basis point rispetto al mid-price (un basis point è un centesimo di punto percentuale). Lo misuriamo in ogni seduta, ordinaria o meno. È questo che rende verificabile l’affermazione secondo cui «gli spread si sono ampliati».

QueryNumero di aggiornamenti NBBO dei titoli: 2 luglio vs 1° luglio, con aggiornamenti dei ticker nominati (milioni)
aggiornamenti del 2 luglio (milioni)aggiornamenti del 1° luglio (milioni)variazione percentuale giornalieraaggiornamenti SPY del 2 luglio (milioni)aggiornamenti QQQ del 2 luglio (milioni)aggiornamenti MU del 2 luglio (milioni)
597.22449.15335.427.561.01
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'
Provalo tu stesso

Il national best bid and offer, cioè il miglior bid e la miglior offer dell’intero mercato consolidato, è stato aggiornato 597.22 milioni di volte il 2 luglio, contro 449.15 milioni il 1° luglio: un aumento di 33% in vista della chiusura. QQQ ha registrato 7.56 milioni di aggiornamenti, più dei 5.42 milioni di SPY; MU 1.01 milioni.

QuerySpread quotato mediano in punti base, orario regolare: index ETF, megacap e titoli memory
tickerspread mediano (bps)spread mediano (centesimi)multiplo dello spread SPYaggiornamenti RTH (m)quotazioni non valide scartate
SPY0.27214.9819064
QQQ0.8363.16.035934
NVDA1.0323.82.5520398
AAPL1.62561.915193
TSLA2.2998.50.852699
MU5.525520.40.922442
SNDK10.418938.50.26163
WDC10.7960400.1483
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 ASC
Provalo tu stesso

Lo spread mediano di SPY era pari a 0.27 basis point: circa 2 centesimi su un ETF da $744.8. QQQ si è attestato a 0.83 bps, NVDA a 1.03. I titoli che hanno registrato il calo maggiore erano anche i più costosi da negoziare: MU 5.52 bps, SanDisk 10.4, Western Digital 10.79, 40 volte lo spread di SPY. Attraversare il mercato su un paniere di titoli della memoria costava un multiplo rispetto all’esecuzione sull’indice, prima di qualsiasi price impact. Le quotazioni non valide, a un solo lato o crossed, vengono conteggiate per singolo titolo e non nascoste.

QueryLiquidità insolita? Spread mediano di SPY in orario regolare vs ultimo mese di sessioni
spread mediano del 2 lug. (bps)spread mediano precedente (bps)2 lug. meno precedente (bps)posizione per spread più ampiosessioni confrontatesessione con spread più ampio (bps)
0.270.27011220.409
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_day
Provalo tu stesso

Per la liquidità era una seduta ordinaria, ed è proprio questo il risultato: lo spread mediano di SPY, pari a 0.27 bps, si colloca a 0 bps dalla mediana del mese precedente (0.27 bps), al 11 posto su 22 sedute per ampiezza, ben lontano dal massimo mensile di 0.409 bps. Una vendita concentrata in un contesto di mercato positivo non ha messo sotto pressione l’infrastruttura di negoziazione.

Tassi: pubblicato il dato del 2 luglio

QueryLa ricevuta: il print Treasury del 2 luglio è agli atti
righe del 2 lug.righe del 1 lug.
11
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_rows
Provalo tu stesso

Il feed del Treasury è indietro di uno o due giorni rispetto al tape: alla prima pubblicazione, il dato di chiusura del 2 luglio non conteneva alcuna riga e questa pagina lo indicava senza fare supposizioni. Il dato è ora disponibile: 1 riga per il 2 luglio, 1 per il 1° luglio. Il pannello qui sotto mostra quindi la curva della seduta.

QueryIl print della curva della sessione: 2 luglio vs 1° luglio (sole scadenze valorizzate)
punto della curvarendimento del 2 lug. (%)variazione giornaliera (bp)
1 month3.73
3 month3.82-3
1 year3.96-4
2 year4.14-3
5 year4.23-1
10 year4.491
30 year4.981
2s10s spread0.354
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
)
Provalo tu stesso

Alla chiusura, il Treasury decennale era a 4.49%, mentre il spread 2s10s era pari a 0.35 punti.

Il calendario dietro la seduta

QueryCalendario societario e flusso informativo del 2 luglio, in un’unica riga (inclusi gli otto split alla base di un falso movimento dello screener)
registrazioni ex-dividendfrazionamenti eseguitifrazionamenti forwardfrazionamenti reverseregistrazioni di frazionamentoIPO quotatedocumenti SECdocumenti Form 4 degli insiderdocumenti 8-Knomi delle IPOarticoli di notizieeditori di notizieticker più trattatoarticoli sul ticker più trattatoCRWD frazionamento daCRWD frazionamento aCRWD chiusura precedenteCRWD chiusura giornalieraCRWD ($ mln)Nomi degli split con barre
322853CRWD 4-for-1; FBIP 4-for-1; FNCSF 110-for-100; GMEX 1-for-9; GTCDF 1-for-5; SMTOY 8-for-1; UBYH 1-for-10; VLNT 10-for-1252032109258MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II2013NVDA1814772.45193.671473.512
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_bars
Provalo tu stesso

322 titoli hanno raggiunto la data ex-dividend, sono arrivate 2 nuove quotazioni (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II) e l’indice SEC ha registrato 5203 filing durante la festività: 2109 Form 4, 258 Form 8-K. Il news feed ha raccolto 201 articoli pubblicati da 3 editori (NVDA più seguito, 18 dei quali).

Gli split possono trarre in inganno chi legge i prezzi di chiusura grezzi. CRWD ha effettuato uno split forward 4-per-1, quindi il tape non rettificato mostra $772.45 mercoledì e $193.67 giovedì: un falso calo che in realtà riflette l’assegnazione di quattro nuove azioni per ogni vecchia azione. Non è stato l’unico caso: sono stati eseguiti 8 split, 5 forward e 3 reverse (la colonna split_records li elenca). Un reverse split produce l’effetto opposto: un prezzo grezzo che balza da un giorno all’altro. Solo 2 di questi titoli sono stati scambiati sul nostro tape; il turnover di $1473.51 milioni di CRWD è l’unico abbastanza rilevante da contaminare uno screen, e tutti gli screen dei mover qui escludono il titolo.

In programma

Un dato di calendario, non una previsione, su ciò che le tabelle indicavano per le prossime sedute.

QueryDopo la festività: la sessione successiva, i relativi ex-dividendi e split, la prossima chiusura programmata e il ritardo dello short interest
Barre regolari SPY del 6 lug.Record ex-dividend del 6 lug.Ex-dividend household del 6 lug.Split del 6 lug.Prossima chiusura programmataNome della prossima chiusuraStato della prossima chiusuraUltimo settlement SIGiorni dall'ultimo settlement SI
390119JPM152026-09-07Labor Dayclosed2026-06-302
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_days
Provalo tu stesso

Lunedì 6 luglio la seduta è ripartita con 390 barre complete, verificate sulle barre stesse. La giornata comprendeva 119 registrazioni ex-dividend, tra cui un nome noto su dieci titoli esaminati (JPM), e 15 esecuzioni frazionate. Prossima chiusura programmata: Labor Day, 2026-09-07 (closed). L’open interest era, come sempre, un dato già superato: l’ultimo settlement disponibile risaliva a 2026-06-30, cioè 2 giorni prima; la pubblicazione seguiva il settlement di circa due settimane (perché).

La seduta verificata e il venerdì che non c’è stato

QueryControllo della sessione: intervallo osservato delle barre minuto di SPY e chiusura del 3 luglio sul tape
Prima barra SPY (ET)Ultima barra SPY (ET)Barre minute SPYBarre della sessione regolareSessioni giornaliereBarre SPY del 3 lug.
04:0019:5988639010
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'
Provalo tu stesso

Il 2 luglio è stata una seduta completa, non una chiusura anticipata: le barre di SPY vanno dalle 04:00 alle 19:59, ora di New York (barre pre-market e after-hours incluse), con esattamente 390 barre nella finestra regolare. Venerdì 3 luglio SPY ha registrato 0 barre, perché il mercato è rimasto completamente chiuso per l’Independence Day, con il 4 luglio caduto di sabato. La settimana di quattro sedute: il riepilogo della settimana.

FAQ

Perché il Dow è salito mentre il Nasdaq è sceso il 2 luglio 2026?

I due indici includono società diverse: DIA ha chiuso a 1.04%, QQQ a -1.71%. Anche la classifica settoriale mostra la stessa divergenza: health care, utilities e beni di prima necessità in testa, tecnologia all’ultimo posto con -2.71%, per un divario di 5.34 punti percentuali tra il migliore e il peggiore.

Il mercato azionario era aperto il venerdì della settimana dell’Independence Day?

No. L’Independence Day è caduto di sabato e le borse lo hanno osservato con una chiusura completa venerdì, il giorno successivo a questa seduta: il nostro tape mostra 0 barre a un minuto di SPY per quella giornata.

Che effetto ha uno stock split forward sul prezzo dell’azione?

Moltiplica per quattro il numero di azioni e divide per quattro il prezzo; il valore della posizione resta invariato. CRWD, 2 luglio: una chiusura non rettificata a $772.45 mercoledì e a $193.67 giovedì generano un calo fittizio su qualsiasi screener che non tenga conto dello split.

Quanto erano ampi gli spread denaro-lettera il 2 luglio 2026?

Lo spread quotato mediano di SPY era pari a 0.27 punti base del mid-price durante il normale orario di contrattazione, 11 su 22 sedute precedenti in termini di ampiezza: una giornata ordinaria. I singoli titoli mostravano spread più ampi: MU 5.52 punti base, WDC 10.79.

Note sui dati

  • Il volume in dollari è una proxy per minuto: prezzo di chiusura × volume, sommato per barra.
  • La mezz’ora finale del pannello dei volumi comprende gli eseguiti dell’asta di chiusura. Le barre a un minuto escludono ogni eseguito d’asta; per questo il pannello a mezz’ora aggiunge al suo intervallo finale ogni trade con la condizione di vendita dell’eseguito di chiusura, registrato dalle 16:00 alle 16:15 ET sul consolidated tape.
  • L’eseguito Treasury del 2 luglio è arrivato dopo la prima pubblicazione; la nota originale ne segnalava l’assenza con una ricevuta del numero di righe. Questa revisione include l’eseguito e mostra la ricevuta.
  • La variazione grezza della chiusura di CRWD è un effetto dello split ed è esclusa dalle schermate dei titoli con le maggiori variazioni.
Note complete sui dati
  • Il quadro settoriale comprende gli undici fondi SPDR Select Sector (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY): un paniere fisso e dichiarato, non un campo settoriale fornito da un vendor.
  • I conteggi del quote tape sono aggregati in base alla data UTC del timestamp SIP; una seduta estiva rientra in un solo giorno UTC.
  • Una quotazione di giugno con ticker riutilizzato è esclusa dalle classifiche (ricevute); l’analisi forense dei tick è riportata negli approfondimenti.

Metodologia

  • Il periodo è una sessione di trading (1 sessione, verificata sulle barre osservate). I timestamp sono archiviati in UTC e convertiti nell’orario di New York all’interno delle query; per “close” si intende l’ultima barra al minuto della sessione regolare, mentre le variazioni giornaliere confrontano il 2 luglio con il 1° luglio. La chiusura del 3 luglio è stata verificata sulle barre e non è mai stata presunta.
  • Gli spread sono espressi (ask meno bid) in basis point del mid-price, come mediana degli aggiornamenti NBBO nelle ore regolari, su un quantile deterministico. I decimali vengono convertiti in float prima dei calcoli dei rapporti; le scadenze delle opzioni vengono analizzate nuovamente a partire dal ticker OCC. Ogni pannello viene letto una sola volta, al momento della stesura, tramite il percorso di sola lettura con accesso controllato.

Grafico, tabella e SQL costituiscono un unico oggetto. Incolla qualsiasi pannello nel terminale Strasmore e personalizzalo. Sessione precedente: 1° luglio. La settimana: la settimana festiva di quattro sessioni.

#recap#daily#spy#qqq#market structure