Separuh pertama 2026 adalah dua pasaran berbeza yang dicantumkan: suku pertama di mana setiap ETF indeks utama jatuh atau tidak ke mana-mana, dan suku kedua yang lebih daripada membaikinya. SPY menutup separuh tahun dengan kenaikan 8.8%; QQQ naik 18.7%; dan 21.3% IWM adalah separuh pertama terbaik yang pernah dicatatkan oleh ETF modal kecil pada pita yang kami pegang, resit di bawah, dikira semula terhadap setiap tahun sebelumnya dalam satu pertanyaan. Pasaran kadar menceritakan kisahnya sendiri: sebaran 2s10s mengecil daripada 72 mata asas kepada 30 sepanjang separuh tahun tanpa pernah menyongsang. Halaman ini adalah lejar penuh separuh tahun, papan markah, kedudukan sejarah, tangga bulanan, keseluruhan keluk hasil matang demi matang, sebelas sektor, evolusi bulan demi bulan pita opsyen, dan nama-nama tunggal ketara separuh tahun. Setiap nombor di sini adalah hasil pertanyaan tersimpan; kembangkan mana-mana panel untuk SQL.
Separuh di papan
SQL tepat di sebalik setiap nombor
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS h1_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerPembahagian dua suku adalah bentuk utama separuh ini: SPY -5.2% kemudian 14.1%; QQQ -6.9% kemudian 26.5%. IWM adalah pemimpin senyap separuh ini pada 21.3%, saham kecil mengatasi setiap indeks bermodal besar sepanjang enam bulan. Butiran suku ada dalam ringkasan Q2. Nota tentang aritmetik separuh: 8.8% SPY untuk enam bulan jauh lebih rendah daripada Q2 sahaja, kerana separuh merangkumi penurunan dan pemulihan, pengkompaunan -5.2% dan 14.1% menghasilkan angka seperti dalam jadual, dan sebarang tajuk 'pulangan separuh pertama' secara senyap merangkumi seluruh perjalanan pusingan itu.
Separuh pertama berbanding setiap separuh pertama dalam pita
Adakah separuh 8.8% luar biasa? Panel di bawah mengira SEMULA pulangan separuh pertama yang sama, dari bukaan waktu biasa pertama hingga tutup waktu biasa terakhir, Januari hingga Jun, untuk setiap tahun dalam sejarah minit, dalam satu pertanyaan bagi setiap pasangan ETF dengan aritmetik yang sama untuk setiap tahun, kemudian meletakkan separuh ini berbanding yang lain. Tarikh terawal pita minit disahkan dalam metodologi di bawah; separuh pertama lengkap pertama dalam fail adalah yang dinamakan oleh resit.
SQL tepat di sebalik setiap nombor
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASCSQL tepat di sebalik setiap nombor
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASC8.8% SPY berada di kedudukan 6 daripada 23 separuh pertama sejak 2004 (kedudukan 1 = terbaik), sepertiga atas, bukan rekod. 18.7% QQQ berada di kedudukan 3 daripada 16 separuh pertama yang setanding, siri QQQ lebih pendek, dana itu didagangkan di bawah simbol akar yang berbeza untuk beberapa tahun, dan mana-mana tahun dengan kurang daripada seratus sesi separuh pertama bagi sesuatu simbol dikecualikan oleh pengawal kiraan sesi yang ditunjukkan dalam jadual, jadi pengecualian adalah kelihatan dan bukannya senyap.
SQL tepat di sebalik setiap nombor
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
ORDER BY y ASC, ticker ASCSQL tepat di sebalik setiap nombor
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS h1_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS halves_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('DIA', 'IWM')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 100
)
GROUP BY ticker
ORDER BY ticker ASCBaris modal kecil adalah tajuk separuh ini: IWM berada di kedudukan 1 daripada 23 separuh pertama sejak 2004, yang terbaik dalam rekod bagi dana itu, mendahului setiap separuh pemulihan dalam jadual. 8.4% DIA berada di kedudukan 4 daripada 23. Asas, dinyatakan dengan jelas: bukaan-ke-tutup waktu biasa dalam setiap separuh pertama kalendar, aritmetik yang sama setiap tahun, sempadan atas ditetapkan pada akhir tempoh ini supaya set perbandingan tidak boleh berkembang secara senyap apabila tahun-tahun kemudian dimasukkan.
Bulan demi bulan
SQL tepat di sebalik setiap nombor
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start, ticker
ORDER BY period_start, tickerTangga itu naik sedikit, turun, turun, naik mendadak, naik, turun sedikit: April menjadi paksi separuh tahun (SPY 9.9%, QQQ 14.8%, bulan terbaik QQQ dalam enam bulan), dan Jun menutup separuh tahun dengan tenang pada -1.2% untuk SPY. Ringkasan Jun sendiri, dengan pecahan luas di sebalik angka tenang itu, ada di sini. Membaca jadual bulan demi bulan: tahun dibuka hampir rata (SPY 0.9% pada Januari), merosot melalui Februari (-0.5%) dan Mac (-4.2%), kemudian April membalikkan aliran dalam satu bulan, Mei melanjutkannya (4.9%), dan Jun reda. Tiga daripada enam bulan adalah negatif, kiraan bulan seperti lambungan syiling untuk separuh tahun yang berakhir positif kukuh, iaitu bentuk biasa separuh tahun ekuiti dan patut diingat apabila satu bulan dibaca sebagai keputusan muktamad.
Kadar: keseluruhan keluk, matang demi matang
Keluk Perbendaharaan menghabiskan separuh tahun dengan memulas, bukan beralih. Hujung paling depan, iaitu matang yang paling rapat mengikuti dasar, hampir tidak bergerak; dua tahun naik dua pertiga mata peratusan; tiga puluh tahun hampir tidak terjejas. Panel ini memaparkan keseluruhan keluk, dari awal separuh tahun hingga akhir.
SQL tepat di sebalik setiap nombor
SELECT maturity, start_pct, end_pct, round((end_pct - start_pct) * 100, 0) AS change_bp FROM (
SELECT '1-month' AS maturity, (SELECT round(argMin(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS start_pct, (SELECT round(argMax(yield_1_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_month)) AS end_pct, 1 AS o
UNION ALL SELECT '3-month', (SELECT round(argMin(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), (SELECT round(argMax(yield_3_month, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_3_month)), 2
UNION ALL SELECT '1-year', (SELECT round(argMin(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), (SELECT round(argMax(yield_1_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_1_year)), 3
UNION ALL SELECT '2-year', (SELECT round(argMin(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), (SELECT round(argMax(yield_2_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_2_year)), 4
UNION ALL SELECT '5-year', (SELECT round(argMin(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), (SELECT round(argMax(yield_5_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_5_year)), 5
UNION ALL SELECT '10-year', (SELECT round(argMin(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), (SELECT round(argMax(yield_10_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_10_year)), 6
UNION ALL SELECT '30-year', (SELECT round(argMin(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), (SELECT round(argMax(yield_30_year, date), 2) FROM global_markets.treasury_yields WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') AND isNotNull(yield_30_year)), 7
) ORDER BY oBaca lajur perubahan dari atas ke bawah dan pemulasannya jelas: 1-bulan bergerak -2 mata asas dalam enam bulan manakala 2-tahun naik 67 dan 30-tahun hanya 5. Peralihan selari menggerakkan setiap matang bersama-sama; separuh tahun ini menggerakkan bahagian tengah keluk dan menetapkan kedua-dua hujung, kadar pendek terikat dekat dengan dasar, kadar panjang hampir tidak dinilai semula.
Apa yang dilakukan oleh itu terhadap kecerunan
SQL tepat di sebalik setiap nombor
SELECT
round((argMin(yield_10_year - yield_2_year, date)) * 100, 0) AS start_bp,
round((argMax(yield_10_year - yield_2_year, date)) * 100, 0) AS end_bp,
round(min((yield_10_year - yield_2_year)) * 100, 0) AS min_bp,
count() AS prints
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)Hujung pendek yang meningkat lebih cepat daripada hujung panjang itulah yang dimaksudkan dengan perataan: sebaran 2s10s menurun daripada 72 kepada 30 mata asas merentas 124 cetakan, dan cetakan terendah separuh masa itu ialah 27, jadi keluk menjadi rata tanpa pernah menyongsang. Sama ada keluk yang lebih rata "bermakna" sesuatu tentang apa yang akan berlaku seterusnya adalah ramalan, dan jadual ini tidak membuat ramalan.
SQL tepat di sebalik setiap nombor
SELECT toString(date) AS d, round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)
ORDER BY dateSiri harian menunjukkan perataan itu bukan satu peristiwa tetapi satu pengisaran, 124 cetakan menurun sepanjang separuh masa, dengan sebaran bermula tahun pada 72 mata asas dan berakhir pada 30.
Sektor: serakan yang disembunyikan indeks
Bahagian pasaran manakah yang sebenarnya menjana wang pada separuh tahun ini? Sebelas ETF sektor SPDR, dipecahkan kepada separuh dan suku tahun, satu pertanyaan.
SQL tepat di sebalik setiap nombor
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_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 >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerSerakan adalah cerita sebenar: teknologi (XLK) menutup separuh tahun dengan kenaikan 30.8%, dengan suku kedua 42%, manakala perkhidmatan komunikasi (XLC) menutup -9.3%, jurang kira-kira empat puluh mata peratusan antara sektor terbaik dan terburuk dalam tempoh enam bulan. Memiliki "pasaran" bermakna memiliki kedua-dua hujung jurang itu. Tenaga adalah kisah peringatan panel ini tentang tetingkap masa yang panjang: XLE menunjukkan separuh tahun 18.8% yang sihat, dibina daripada suku PERTAMA 36.9% diikuti suku kedua -11%. Ia adalah sektor besar paling kukuh pasaran pada suku ketika indeks jatuh, dan antara yang paling lemah pada suku ketika ia pulih. Kewangan (XLF) memainkan filem yang sama secara terbalik: -9.9% pada S1, kemudian 7.7% pada S2. Angka H1 tunggal meratakan kedua-dua perjalanan pergi balik; pecahan suku tahun adalah pandangan yang jujur.
Kos untuk berdagang setiap sektor
Jadual pulangan ada di mana-mana; pita sebut harga tidak. Panel ini mengukur median spread bida-tawaran setiap ETF sektor merentasi satu sesi penuh yang mewakili, 123 sesi dalam separuh tahun, dan 29 Jun adalah sesi yang diukur di sini, dilabelkan sedemikian, daripada setiap kemas kini NBBO pada hari itu.
SQL tepat di sebalik setiap nombor
SELECT ticker,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bpsSetiap satu daripada sebelas sebut harga pada beberapa mata asas atau kurang, yang termurah pada 0.62 mata asas (XLV), yang terlebar pada 2.23 mata asas (XLRE), yang merupakan maksud praktikal "ETF sektor adalah cair": kos untuk memasuki mana-mana pandangan sektor diukur dalam peratusan peratus. Sebagai skala perbandingan dengan saham individu, penerokaan mendalam 29 Jun mengukur spread nama nipis pada ratusan kali ganda tahap ini, pada sesi yang sama.
Keluasan merentas separuh tahun
Keluasan pada skala separuh tahun hadir dalam dua butiran di sini. Butiran kasar: SPY mencatatkan 64 sesi menaik berbanding 59 sesi menurun sepanjang 123 sesi separuh tahun, hampir sama seperti lambungan duit syiling bagi hari-hari di bawah separuh tahun yang positif kukuh, iaitu rupa dagangan harian bagi kenaikan yang bergelut. Butiran halus, setiap ticker dikira, wujud pada skala bulan: pecahan saham menaik/menurun Jun ada dalam ringkasan Jun (lebih banyak ticker jatuh daripada naik di sana), dan kiraan sempadan suku tahun ada dalam ringkasan Q2. Imbasan tunggal saham menaik seluruh pasaran selama enam bulan melebihi belanjawan pertanyaan yang dijana halaman ini; had ini dinyatakan di sini dan bukannya dikecilkan secara senyap.
SQL tepat di sebalik setiap nombor
SELECT countIf(day_ret > 0) AS up_sessions,
countIf(day_ret < 0) AS down_sessions,
countIf(day_ret = 0) AS flat_sessions,
count() AS sessions_total
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS day_ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 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 d
)Pita opsyen, bulan demi bulan
Apa yang hanya halaman setengah tahun boleh tunjukkan: bagaimana pita opsyen itu sendiri berkembang. Setiap panel di bawah adalah satu imbasan pita penuh bagi satu bulan, jumlah volum kontrak, dan bahagian yang didagangkan pada hari luputnya sendiri (0DTE). Kisah yang diukur: volum berjalan daripada 1316.1 juta kontrak pada Januari kepada 1477.9 juta pada Jun, bulan opsyen paling sibuk pada separuh tahun itu, dan bahagian luput hari sama meningkat daripada 26.5% pada Januari kepada 34.3% pada Jun, bulan tertinggi pada separuh tahun itu. Satu pertiga daripada volum opsyen Jun telah didagangkan pada kontrak yang luput pada hari yang sama.
SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-01-01 00:00:00')
AND window_start < toDateTime('2026-02-01 00:00:00')SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-02-01 00:00:00')
AND window_start < toDateTime('2026-03-01 00:00:00')SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-03-01 00:00:00')
AND window_start < toDateTime('2026-04-01 00:00:00')SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-05-01 00:00:00')SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-05-01 00:00:00')
AND window_start < toDateTime('2026-06-01 00:00:00')SQL tepat di sebalik setiap nombor
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')Kos untuk berdagang, disampel secara bulanan
SQL tepat di sebalik setiap nombor
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND ((sip_timestamp >= toDateTime64('2026-01-14 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-01-14 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-02-11 14:30:00', 9) AND sip_timestamp < toDateTime64('2026-02-11 21:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-03-11 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-03-11 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))
GROUP BY session
ORDER BY session ASCSpread median yang disebut bagi SPY pada hari Rabu kedua setiap bulan: 0.145 bps dalam sampel Januari, 0.144 dalam sampel Februari, kira-kira dua kali ganda sepanjang sampel musim bunga, dan 0.409 bps dalam sampel Jun, yang paling lebar daripada enam sampel. Asas, didedahkan: ini adalah sesi sampel berlabel tunggal (hari Rabu kedua setiap bulan), bukan median sepanjang bulan; imbasan pita sebut harga penuh enam bulan melebihi belanjawan pertanyaan halaman ini. Tarikh sampel ada dalam panel, dan sebut harga tidak sah dikira di sana, bukan digugurkan secara senyap.
Nama-nama terkenal separuh tahun
Diukur berdasarkan populariti, bukan pilihan editorial: senarai di bawah adalah kedudukan teratas dalam skala suku tahun berdasarkan jumlah dagangan dolar, dikira semula di sini supaya halaman ini membawa resitnya sendiri, dan setiap nama yang layak mendapat analisis mendalam dipautkan kepadanya.
SQL tepat di sebalik setiap nombor
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8MU mengatasi dagangan SPY sepanjang suku kedua (2047.5 bilion dolar berbanding 2032 bilion dolar), resit yang sama seperti yang dibawa oleh ringkasan Q2. Untuk enam nama tunggal dalam set peneraju itu, separuh tahun:
SQL tepat di sebalik setiap nombor
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'NVDA', 'TSLA', 'SNDK', 'AMD', 'INTC')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerKompleks memori dan semikonduktor menguasai separuh tahun: SNDK pulangan 830.1% dalam enam bulan, MU 290%, Junnya dihuraikan detik demi detik di sini, dan INTC 269.3%. NVDA, pita terbesar set itu dengan perolehan separuh tahun sebanyak 3287.9 bilion dolar, pulangan 5.2%, angka tunggal manakala nama memori berganda; analisis mendalam Junnya membawa perbezaan itu sesi demi sesi. TSLA adalah satu-satunya penurun dalam set itu pada -8.2%. Penyenaraian mega Jun didagangkan di bawah simbol yang digunakan semula dan dikecualikan daripada imbasan peneraju menunggu pengesahan entiti, bulan pertamanya mempunyai pos resit demi resit sendiri. Asas: SET peneraju dipilih berdasarkan jumlah dagangan dolar waktu biasa Q2 (imbasan di atas); lajur pulangan adalah untuk separuh tahun, dari bukaan waktu biasa pertama hingga tutup waktu biasa terakhir.
Gelombang IPO separuh tahun, bulan demi bulan
SQL tepat di sebalik setiap nombor
SELECT toString(toStartOfMonth(listing_date)) AS m, count() AS listings
FROM global_markets.stocks_ipos
WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')
GROUP BY m
ORDER BY mGelombang penyenaraian tertumpu pada awal tempoh dan tidak sekata: Februari merupakan bulan paling sibuk separuh tahun dengan 47 penyenaraian dan Mac paling sunyi dengan 17 penyenaraian, penyenaraian mega terkenal pada Jun tiba dalam bulan yang sebaliknya mempunyai jumlah biasa (35 penyenaraian).
Kalendar separuh tahun
SQL tepat di sebalik setiap nombor
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-01-01') AND ex_dividend_date <= toDate('2026-06-30')) AS ex_div_events,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-01-01') AND execution_date <= toDate('2026-06-30')) AS splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-01-01') AND listing_date <= toDate('2026-06-30')) AS ipos,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= toDate('2026-01-01') AND filing_date <= toDate('2026-06-30')) AS h1_filings,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-03-31')) AS filings_mar31,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS filings_apr30,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30205 syarikat telah disenaraikan dalam separuh tahun ini, satu gelombang penyenaraian yang kemunculan sulung terbesarnya pada bulan Jun mempunyai catatan penerimaan demi penerimaan tersendiri, bersama 830 pecahan saham dan 28356 peristiwa ex-dividen. Sebagai skala, ini lebih daripada satu penyenaraian baharu setiap sesi dagangan sepanjang separuh tahun tersebut. Jumlah pemfailan membawa pendedahan tiga kali ganda: indeks SEC hampir kosong pada setiap akhir bulan dalam separuh tahun yang hari kalendar terakhirnya adalah hari bekerja (55 pemfailan diindeks pada 31 Mac, 34 pada 30 April, dan 31 pada 30 Jun, berbanding ribuan pada hari-hari berdekatan), oleh itu kiraan pemfailan separuh tahun adalah lebih rendah daripada sebenar sehingga suapan diisi semula, jurang akhir bulan mempunyai nota diagnostik tersendiri.
Resit sesi
SQL tepat di sebalik setiap nombor
SELECT
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS h1_sessionsNota data
Nota data penuh
- Faedah jualan pendek berakhir pada penyelesaian 15 Jun setakat penjanaan (cetakan akhir Jun belum selesai, pendedahan penuh dalam ringkasan Jun; siaran ini akan dijana semula apabila ia tersedia).
- Tiga hari indeks pemfailan akhir bulan 2026 hampir kosong (31 Mac, 30 April, 30 Jun, setiap akhir bulan bagi separuh tahun yang hari kalendar terakhirnya ialah hari bekerja); didedahkan sebaris dengan kiraan, didiagnosis dalam nota jurang akhir bulan. Akhir bulan tahun sebelumnya membawa ribuan pemfailan, jadi ini adalah jurang suapan, bukan cuti pemfailan.
- Papan pendahulu pada skala separuh tahun adalah terhad: imbasan seluruh pasaran selama enam bulan melebihi belanjawan pertanyaan yang dijana oleh halaman ini, jadi set nama terkenal dipilih oleh imbasan pendahulu skala suku tahun yang ditunjukkan sebaris, dan pulangan separuh tahun dikira untuk set tetap itu, asasnya dinyatakan di mana ia digunakan. Ringkasan Q2 dan Jun membawa jadual pendahulu penuh pada skala masing-masing.
- Keluasan seluruh pasaran pada skala separuh tahun juga terhad, pecahan butiran hari ditunjukkan; kiraan butiran ticker wujud pada skala bulan dan suku tahun, dipautkan dalam bahagian keluasan.
- Siri sejarah QQQ lebih pendek daripada SPY: dana tersebut didagangkan di bawah simbol akar yang berbeza untuk beberapa tahun; kawalan kiraan sesi mengecualikan tahun-tahun tersebut secara ketara (kiraan sesi setiap tahun ada dalam jadual).
- Enam panel opsyen adalah imbasan pita penuh bulanan dan sampel arah aliran spread menandakan satu sesi berlabel setiap bulan, kedua-duanya dijalankan pada laluan kelompok; asas sampel dinyatakan sebaris.
- Mikrostruktur terkandung dalam penerokaan mendalam 29 Jun.
Metodologi
- Tempoh adalah 1 Januari – 30 Jun 2026, 123 sesi, disahkan daripada bar yang diperhatikan. Pulangan adalah dari bukaan pertama waktu biasa hingga penutupan terakhir waktu biasa dalam setiap tetingkap, semuanya dikira dalam pertanyaan yang sama yang ditunjukkan.
- Perbandingan sejarah dikira semula SECARA LANGSUNG terhadap sejarah minit penuh pada masa penjanaan, tidak pernah dibaca daripada nilai tersimpan. Pengesahan kedalaman: tarikh bar minit terawal dalam paparan tertunda yang digunakan di sini sepadan dengan jadual asas (September 2003), diperiksa semasa penulisan, jadi separuh pertama lengkap pertama dalam fail adalah 2004. Setiap pertanyaan sejarah menetapkan had atasnya pada akhir tempoh ini (set perbandingan tidak boleh berkembang apabila tahun kemudian ditambahkan) dan menggunakan perlindungan sesi minimum dengan kiraan sesi setiap tahun yang ditunjukkan.
- Cap masa disimpan UTC dengan sempadan UTC mentah. Blok sejarah pelbagai tahun menapis waktu biasa pada jam dinding Timur (9:30–15:59, ditukar setiap baris, satu-satunya konvensyen selamat DST merentas dekad); blok tetingkap tunggal dalam julat EDT sahaja menggunakan jalur UTC mentah yang setara. Kedua-dua konvensyen dinyatakan di sini.
- Penjanaan berjalan melalui laluan baca sahaja yang terkawal; halaman awam tidak pernah membuat pertanyaan secara langsung. Keadaan gudang data pada 5 Julai 2026.
Ini adalah edisi pertama ringkasan semianual tetap; edisi tahun penuh menyusul pada Januari. Butiran suku tahun: S2 2026. Siaran makro yang separuh tahun diperdagangkan adalah dalam gambaran makro.