Strasmore Research

riepilogo mercato settimana 20 luglio 2026

La prima settimana intera dopo la scadenza mensile delle opzioni di luglio: punteggio indici, dispersione settoriale, ampiezza settimanale e flussi di capitale.

La settimana del 20 luglio 2026 è stata la prima settimana intera dopo la scadenza mensile delle opzioni di luglio, e ha registrato 5 sedute senza chiusure al suo interno. La variazione close-over-close settimanale dello SPY è stata pari a -0.59%, e misurata open-to-close rispetto all'anno mobile di settimane si è classificata 43 su 53. Ogni dato che segue è letto da una query memorizzata, e ogni finestra è ancorata a date esplicite, quindi rieseguendo la SQL si ottengono gli stessi valori.

La settimana in borsa

Le variazioni settimanali vanno dalla chiusura regolare di venerdì 17 luglio a quella di venerdì 24 luglio. L'ultima colonna riporta la settimana precedente, così le due sono affiancate. Le righe sono in ordine alfabetico.

QuerySPY / QQQ / DIA / IWM: settimana del 20 luglio vs chiusura del 17 luglio, con variazione della settimana precedente
L'esatto SQL dietro ogni numero
SELECT ticker,
    round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00'), 2) AS prior_week_close,
    round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'), 2) AS week_close,
    round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00')
         / argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00') - 1) * 100, 2) AS week_change_pct,
    round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
         / argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') - 1) * 100, 2) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND ((window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')
    OR (window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
    OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
ORDER BY ticker

Nella settimana: DIA si è mossa di -0.38%, IWM di -0.98%, QQQ di -1.59% e SPY di -0.59%, per una chiusura a $738.85. I valori della settimana precedente, nello stesso ordine alfabetico, erano -0.95%, -0.63%, -4.17% e -1.55%. Quanto siano distanti tra loro i quattro indici è la prima cosa che un tabellone misura, e non sempre è una distanza piccola.

La settimana rispetto all'anno mobile

Il dato di una singola settimana dice poco senza la distribuzione sottostante. Questo pannello ricalcola ogni settimana mobile con la stessa logica, da apertura a chiusura della sessione regolare, e classifica quella corrente al suo interno.

QuerySettimana di SPY nel contesto dell'anno mobile (rendimenti settimanali open-to-close)
L'esatto SQL dietro ogni numero
SELECT round(anyIf(ret, wk = toDate('2026-07-20')), 2) AS week_open_to_close_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-20')), groupArrayIf(ret, wk != toDate('2026-07-20'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions_measured, wk = toDate('2026-07-20')) AS sessions_this_week
FROM (
    SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
           uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_measured,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2025-07-21 00:00:00')
      AND window_start < toDateTime('2026-07-25 00:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY wk
    HAVING sessions_measured >= 3
)

Misurata in questo modo, SPY ha reso -1.1% e si è classificata 43 su 53 settimane a ritroso fino a 2025-07-21. Nota il divario di definizione: questo dato parte dalla prima apertura della sessione regolare della settimana, mentre il tabellone sopra parte dalla chiusura della settimana precedente. Entrambi sono etichettati ovunque compaiano.

Cinque sedute, un unico arco

QuerySPY per sessione: chiusura, variazione e volume azionario, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(d) AS date,
       round(c, 2) AS spy_close,
       round((c / prev_c - 1) * 100, 2) AS change_pct,
       round(shares_m, 1) AS spy_shares_m
FROM (
    SELECT d, c, shares_m,
           lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS c,
               toFloat64(sum(volume)) / 1e6 AS shares_m
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY d
    )
)
WHERE d >= '2026-07-20'
ORDER BY date

Seduta per seduta, la variazione di SPY è stata -0.15% lunedì, 0.84% martedì, -0.12% mercoledì, -1.22% giovedì e 0.08% venerdì, chiudendo a $738.85 su 40.1 milioni di azioni. Il dato di lunedì è calcolato rispetto alla chiusura del 17 luglio, la seduta immediatamente precedente il periodo.

Ampiezza, sessione per sessione

Un livello di indice è un singolo numero. L'ampiezza conta quante azioni si sono mosse insieme ad esso, ed è il numero che decide se una settimana positiva è stata ampia o ristretta.

QueryTitoli in rialzo e in ribasso per sessione, nomi con $5M+ scambiati, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(d) AS date, advancers, decliners, unchanged, measured_names
FROM (
    SELECT d,
           countIf(c > prev_c) AS advancers,
           countIf(c < prev_c) AS decliners,
           countIf(c = prev_c) AS unchanged,
           count() AS measured_names
    FROM (
        SELECT d, c, dv,
               lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
        FROM (
            SELECT ticker,
                   toDate(toTimeZone(window_start, 'America/New_York')) AS d,
                   argMax(toFloat64(close), window_start) AS c,
                   sum(toFloat64(close) * toFloat64(volume)) AS dv
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
                OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
              AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
            GROUP BY ticker, d
        )
    )
    WHERE d >= '2026-07-20' AND prev_c > 0 AND dv >= 5000000
    GROUP BY d
)
ORDER BY date

Lunedì, 1268 dei 3945 titoli misurati sono saliti e 2632 sono scesi. Venerdì la suddivisione era di 2273 in rialzo contro 1635 in ribasso, su 3950 titoli. I titoli senza una chiusura in entrambe le direzioni di una sessione sono esclusi, motivo per cui il conteggio misurato oscilla leggermente di giorno in giorno.

La stessa domanda posta una volta, sull'intera settimana:

QueryAmpiezza settimanale: chiusura regolare 24 luglio vs chiusura regolare 17 luglio, nomi con $5M+ scambiati durante la settimana
L'esatto SQL dietro ogni numero
SELECT
    countIf(cw > cp AND liquid) AS advancers,
    countIf(cw < cp AND liquid) AS decliners,
    countIf(cw = cp AND liquid) AS unchanged,
    countIf(liquid) AS measured_names,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(cw > cp AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, cp, cw, dv >= 5000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0
    )
)

Su 6100 titoli che superano la soglia di fatturato di cinque milioni di dollari nelle ore regolari, 2437 hanno chiuso sopra la chiusura del 17 luglio e 3630 hanno chiuso sotto, con una quota di rialzisti del 40%. Il filtro di liquidità ha accantonato ulteriori 5099 titoli che hanno scambiato al di sotto di tale soglia durante la settimana. Essi vengono conteggiati qui, anziché essere scartati silenziosamente.

Il tabellone settoriale

Gli undici ETF settoriali SPDR, dal 17 al 24 luglio, ordinati dal migliore al peggiore.

QueryETF settoriali, variazione settimanale completa: chiusura 24 luglio vs chiusura 17 luglio
L'esatto SQL dietro ogni numero
SELECT sector, week_pct, round(max(week_pct) OVER () - week_pct, 2) AS points_behind_best
FROM (
    SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
                   ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
                   ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
                   ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
           round((cw / cp - 1) * 100, 2) AS week_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw
        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-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0
    )
)
ORDER BY week_pct DESC

Energy si è piazzato in cima alla classifica con 3.33%. Consumer Discretionary si è piazzato in fondo con -5.2%, 8.53 punti percentuali dietro. Questo divario è la dispersione settoriale della settimana, e vale la pena leggerlo da solo: una settimana in cui tutti gli undici si trovano entro un punto l'uno dall'altro è un mercato molto diverso da uno in cui lo spread arriva a due cifre.

Dove sono finiti i dollari

QueryPrincipali titoli per volume in dollari in orario regolare, intera settimana 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT ticker, week_dollar_bn, round(100 * week_dollar_bn / max(week_dollar_bn) OVER (), 1) AS pct_of_leader
FROM (
    SELECT ticker,
           round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS week_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY week_dollar_bn DESC
    LIMIT 8
)
ORDER BY week_dollar_bn DESC

MU ha registrato 158.1 miliardi di dollari di scambi in orario regolare nelle cinque sedute, superando SPY con 133.9 miliardi e QQQ con 101.5 miliardi. Ottava in classifica, AAPL, ha scambiato 34.5% dei dollari del leader. I record di scambi mostrano dove il mercato ha speso la settimana a discutere, e non devono necessariamente coincidere con il prezzo. La versione per singolo titolo di questa misura è il volume relativo.

I maggiori movimenti della settimana

I frazionamenti modificano il prezzo senza alterare il valore: un reverse split produce un falso guadagno a quattro cifre, un forward split un falso crollo della stessa entità. La settimana ha registrato 25 reverse split e 11 forward split, ed entrambe le tabelle sottostanti escludono qualsiasi titolo il cui frazionamento sia stato eseguito tra la chiusura del 17 luglio e quella del 24 luglio, l'esatto intervallo in cui viene misurata la variazione. Entrambe richiedono inoltre un turnover di cinque milioni di dollari nelle ore regolari.

QueryMovimenti settimanali: dieci maggiori guadagni e ribassi, chiusure in orario regolare, $5M+ scambiati, esclusi frazionamenti
L'esatto SQL dietro ogni numero
SELECT ticker, board, week_pct, week_dollar_m, sessions_traded,
       round(100 * week_dollar_m / max(week_dollar_m) OVER (), 1) AS pct_of_dollar_max
FROM (
    SELECT 'gainers' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
           round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
               uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct DESC
    LIMIT 10
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
           round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
               uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct ASC
    LIMIT 10
)
ORDER BY board DESC, abs(week_pct) DESC

Essere presenti in una delle due tabelle ha richiesto un movimento reale. Il guadagno più contenuto mostrato è salito del 92.3%, e il calo più contenuto ha registrato -47.8%. Agli estremi, STAK si è mosso del 383.7% su 251.6 milioni di dollari scambiati, e LBGJ si è mosso del -98.8% su 47.7 milioni. Quel calo si avvicina all'intero valore quotato del titolo, quindi la tabella include la propria ricevuta: LBGJ ha stampato barre nelle ore regolari in 5 delle cinque sedute, e nessun frazionamento è stato eseguito contro di esso tra le due chiusure.

Lo spread quotato, sessione per sessione

Il prezzo è il titolo principale. Il costo per eseguire l'operazione è lo spread quotato, misurato qui su SPY una sessione alla volta, direttamente dal nastro NBBO grezzo e non da alcun riepilogo.

QuerySpread mediano quotato di SPY e aggiornamenti NBBO per sessione, orario regolare, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(toDate(sip_timestamp)) AS date,
       round(quantileExactIf(0.5)(
           10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
           bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
       round(count() / 1e6, 2) AS quote_updates_m,
       countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
       countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
  AND sip_timestamp >= '2026-07-20 13:30:00'
  AND sip_timestamp < '2026-07-24 20:00:00'
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(sip_timestamp)
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY toDate(sip_timestamp)

Lo spread quotato mediano di SPY è stato di 0.27 punti base del prezzo medio lunedì e di 0.27 venerdì, su 3.89 milioni e 4.4 milioni di aggiornamenti NBBO. Le ultime due colonne sono la trasparenza, non il risultato: 0 quotazioni unilaterali e 1084 quotazioni incrociate sono state conteggiate nella mediana di lunedì, anziché essere scartate silenziosamente. Una quotazione incrociata, con denaro sopra lettera, è un normale artefatto di un feed consolidato assemblato da molteplici piazze in tempo reale.

La settimana delle opzioni dopo la scadenza mensile

La scadenza mensile di luglio è caduta il venerdì prima dell'inizio di questa settimana, quindi ogni contratto scambiato in queste cinque sessioni ne è sopravvissuto. Tempismo della scadenza imposta il ritmo su cui opera la folla della stessa giornata.

QueryContratti opzioni, azioni same-day e call share per sessione, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(toDate(sip_timestamp)) AS date,
       round(toFloat64(sum(size)) / 1e6, 1) AS contracts_m,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = formatDateTime(toDate(sip_timestamp), '%y%m%d')) / sum(size), 1) AS pct_0dte,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 8, 1) = 'C') / sum(size), 1) AS pct_call,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260724') / sum(size), 1) AS pct_expiring_jul24
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-20 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00'
GROUP BY toDate(sip_timestamp)
ORDER BY toDate(sip_timestamp)

Il volume dei contratti è stato di 64 milioni lunedì e 71.1 milioni venerdì. La quota della stessa giornata, ovvero i contratti in scadenza nella sessione in cui vengono scambiati, è stata di 40.2% lunedì contro 49% venerdì, la sessione di scadenza della settimana. Le call hanno rappresentato 53.5% del volume dei contratti di venerdì. E l'attrazione di quel venerdì era visibile già dalla sessione di apertura: 15.1% del volume di lunedì era già su contratti con scadenza fissata a quel giorno.

Tassi della settimana

QueryCurva del Treasury per sessione, dal print del 17 luglio al 24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(date) AS date,
       round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
       round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
       round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
       round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp,
       round((toFloat64(yield_10_year) - (SELECT toFloat64(any(yield_10_year)) FROM global_markets.treasury_yields WHERE date = '2026-07-17')) * 100) AS chg_10y_from_prior_close_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-17' AND date <= '2026-07-24'
ORDER BY date

Misurato a partire dal dato del 17 luglio, il decennale si è mosso di 16 punti base a 4.71% all'ultimo dato disponibile, con il biennale a 4.37% e il trentennale a 5.17%. Lo spread biennale-decennale ha chiuso la serie a 34 punti base. Il file del Tesoro è in ritardo di circa una seduta rispetto ai prezzi correnti, pertanto questo pannello contiene 5 dati, ciascuno datato nella tabella.

Gli short: i file giornalieri

La FINRA pubblica un file giornaliero sul volume delle vendite allo scoperto. Il short-interest-vs-short-volume è un flusso giornaliero lordo, non una posizione, e talvolta questi file arrivano troncati, quindi la copertura viene misurata prima di citare qualsiasi rapporto da essi.

QueryCopertura file short-volume giornaliero: ticker presenti e azioni short, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT date, tickers_on_file, short_shares_bn,
       round(100.0 * tickers_on_file / max(tickers_on_file) OVER (), 1) AS pct_of_fullest_file
FROM (
    SELECT toString(date) AS date,
           uniqExact(ticker) AS tickers_on_file,
           round(sum(short_shares) / 1e9, 2) AS short_shares_bn
    FROM (
        SELECT date, ticker, max(short_volume) AS short_shares
        FROM global_markets.stocks_short_volume
        WHERE date >= '2026-07-20' AND date <= '2026-07-24'
        GROUP BY date, ticker
    )
    GROUP BY date
)
ORDER BY date

5 file giornalieri sono disponibili per la settimana. Il primo contiene 15098 ticker e 4.71 miliardi di azioni con marcatura short; l'ultimo contiene 15062 ticker, ovvero 99.7% del conteggio ticker del file più completo. Qualunque affermazione sul volume short per singolo nome, tratta da un file che si colloca ben al di sotto dei suoi vicini, rimane non verificabile finché quel file non viene ripresentato.

Il calendario dietro la settimana

QueryDepositi SEC per sessione e tipo di modulo, 20-24 luglio
L'esatto SQL dietro ogni numero
SELECT toString(filing_date) AS date,
       count() AS filings,
       countIf(form_type = '4') AS form4,
       countIf(form_type = '8-K') AS form8k,
       countIf(form_type = '424B2') AS f424b2
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24'
GROUP BY filing_date
ORDER BY date

La prima sessione archiviata conteneva 3012 documenti, di cui 632 erano rapporti insider Modulo 4 e 166 erano 8-K. L'ultima ne conteneva 3814, con 644 Moduli 4 e 223 8-K. 5 delle sessioni della settimana hanno un indice EDGAR giornaliero archiviato; tale indice arriva secondo la propria tempistica, che occasionalmente è in ritardo rispetto al nastro.

QueryCalendario aziendale della settimana: dividendi, frazionamenti, quotazioni, notizie
L'esatto SQL dietro ogni numero
SELECT
    (SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filings_week,
    (SELECT uniqExact(filing_date) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filing_days_on_file,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS ex_dividends_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS household_ex_dividends_week,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS reverse_splits_week,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS forward_splits_week,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= '2026-07-20' AND listing_date <= '2026-07-24') AS listings_week,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_week,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_publishers_week

Il resto della documentazione settimanale: 17106 depositi SEC in 5 giorni indicizzati, 592 record ex-dividendo, 1 dei quali provenienti dai dieci nomi noti controllati da questo pannello, 25 frazionamenti inversi e 11 frazionamenti diretti, 4 nuove quotazioni e 1704 articoli da 2 editori. Quest'ultima coppia misura l'attenzione di un singolo feed, non quella dei media globali.

Le sessioni, verificate

QueryVerifica sessioni: sessioni, barre, righe festive, chiusure in rialzo e ribasso, prossima chiusura
L'esatto SQL dietro ogni numero
WITH spy AS (
    SELECT d, c, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS p
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY d
    )
)
SELECT
    uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_in_week,
    toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
    toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session,
    count() AS regular_bars_in_week,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-20' AND date <= '2026-07-24') AS holiday_rows_in_week,
    (SELECT countIf(c > p) FROM spy WHERE d >= '2026-07-20') AS up_sessions,
    (SELECT countIf(c < p) FROM spy WHERE d >= '2026-07-20') AS down_sessions,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
  AND window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199

5 sessioni, da 2026-07-20 a 2026-07-24, con 0 righe di festività in qualsiasi punto della finestra. SPY ha stampato 1950 barre minute di sessione regolare su di esse. 2 sessioni hanno chiuso sopra la chiusura precedente e 3 hanno chiuso sotto. La prossima chiusura programmata è Labor Day il 2026-09-07.

In arrivo

La settimana successiva, dai nostri prospetti:

QueryProssima settimana in calendario: chiusure, ex-dividendi, frazionamenti e scadenza opzioni
L'esatto SQL dietro ogni numero
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-27' AND date <= '2026-07-31' AND status != 'open') AS closures_next_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS ex_dividends_next_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS household_ex_div_next_week,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-27' AND execution_date <= '2026-07-31') AS splits_next_week,
    (SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) FROM global_markets.options_trades WHERE sip_timestamp >= '2026-07-24 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00') AS jul31_expiry_pct_of_friday_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-24') AS latest_short_interest_settlement

La tabella festiva mostra 0 chiusure nella settimana successiva. 368 record di stacco cedola cadono al suo interno, 0 del set domestico, insieme a 15 frazionamenti programmati. Del volume di opzioni di venerdì, 14.2% era già in contratti in scadenza il venerdì successivo. La data di regolamento delle vendite allo scoperto più recente archiviata è 2026-07-15, un file pubblicato con un ritardo sufficiente ad avere una propria spiegazione.

FAQ

Come si è comportato il mercato azionario nella settimana del 20 luglio 2026?

SPY è variato del -0.59% da chiusura a chiusura dal 17 al 24 luglio, con QQQ al -1.59%, DIA al -0.38% e IWM al -0.98%. Tra i titoli liquidi, 2437 è salito e 3630 è sceso.

Quale settore ha guidato la settimana del 20 luglio 2026?

Energy, al 3.33%. Il più debole degli undici ETF settoriali SPDR è stato Consumer Discretionary al -5.2%, 8.53 punti percentuali indietro.

Quante sedute di trading ci sono state nella settimana del 20 luglio 2026?

5, da 2026-07-20 a 2026-07-24, con 0 righe di festività nella finestra. La prossima chiusura prevista è Labor Day.

Quale ticker ha scambiato il maggior volume in dollari nella settimana del 20 luglio 2026?

MU, con 158.1 miliardi di dollari di turnover in orario regolare, davanti a SPY con 133.9 miliardi.

Note sui dati

Tutti i timestamp memorizzati sono in UTC; le ore regolari sono 13:30-20:00 UTC per sessione, e i confini settimanali vanno dalla chiusura regolare del 17 luglio a quella del 24 luglio. Ogni pannello close-over-close qui riportato legge l'ultimo barra dei minuti delle ore regolari su ciascun lato del confronto, quindi una stampa in orario prolungato non può mai fissare una chiusura settimanale. Il ranking su anno mobile utilizza i rendimenti settimanali open-to-close, quindi non corrisponderà al tabellone close-over-close; entrambe le definizioni sono etichettate dove appaiono. La breadth settimanale e le bacheche dei movimenti applicano un filtro di turnover di cinque milioni di dollari in ore regolari, e la breadth pubblica il conteggio dei nomi che il filtro ha escluso. Le bacheche dei movimenti escludono qualsiasi nome il cui split sia stato eseguito dopo la chiusura del 17 luglio e fino al 24 luglio, l'esatto intervallo su cui viene misurata la variazione, il che cattura sia uno split timbrato nel fine settimana intermedio sia uno timbrato in una sessione; non escludono gli ETF con leva e inversi, che possono dominare una bacheca in una settimana direzionale. La parte inferiore della bacheca dei ribassisti può attestarsi vicino a una perdita totale del valore quotato per la settimana, e quella bacheca pubblica in quante delle cinque sessioni ciascun nome è stato stampato. Il pannello dello spread di SPY conta le quotazioni unilaterali e incrociate anziché eliminarle silenziosamente, e la mediana viene calcolata sulle quotazioni valide rimanenti. Il file del Tesoro è in ritardo di circa una sessione rispetto al nastro e l'indice giornaliero EDGAR arriva secondo il proprio programma, quindi i pannelli dei tassi e delle comunicazioni riportano quanti giorni contengono effettivamente. Nessun indice di volatilità implicita appare qui: quelle serie non sono concesse in licenza per questo magazzino, quindi la volatilità viene letta dal nastro tramite intervalli, quota delle opzioni same-day e comportamento delle quotazioni.

Metodologia

  • Fonte dei dati di mercato: nastro consolidato. delayed_stocks_minute_aggs per prezzi e volumi, cache_stocks_quotes per il pannello NBBO, options_trades per la settimana delle opzioni.
  • Chiusura: l'ultima barra del minuto della sessione regolare, mai una stampa presunta delle 16:00 né una stampa dell'after-hours.
  • Sessioni: verificate dalla tabella delle festività più le barre osservate, mai presunte dal calendario.
  • Gestione dei fusi orari: le clausole WHERE usano letterali UTC grezzi, e toTimeZone compare solo nelle liste SELECT per le etichette ET.
  • Decimali: le colonne di prezzo, dimensione e volume sono convertite in Float64 prima di qualsiasi divisione o prodotto.
  • Aggregati deterministici: quantili esatti in tutto, e ogni affermazione su ordinamento o segno nel testo è codificata come un vincolo di coerenza.
  • Data del warehouse: 26 luglio 2026.

Collegamenti incrociati: l'edizione precedente di questa serie settimanale, cos'è uno spread denaro-lettera, quando scadono le opzioni, interessi short contro volume short, e lo spread tra il biennale e il decennale.

Ogni query sopra viene eseguita invariata sul terminale Strasmore se si desidera riposizionare una finestra su una settimana diversa.