SPCX: The Week It Went Underwater
SPCX's week of July 6, 2026: the index-add flow left, three of five closes printed under the June first-trade price, and Friday set a new post-listing low.
SPCX spent the week of July 6, 2026 doing what young listings are never supposed to do: it went underwater. From the prior week's $161.86 close, the stock fell -10.2% across five sessions to $145.4, closing under the $150 first-trade price on 3 of 5 sessions and printing a new post-listing closing low on Friday. The week opened with the last surge of index-add flow and closed on the quietest tape since listing, the first analyst ratings and first public-life quarterly numbers landing in between. Every number below is a stored query, expand any panel for the SQL.
First, the receipts: which SPCX this is
SPCX previously belonged to a different, unrelated security, so every window here is bound to the entity that listed June 12, 2026, Space Exploration Technologies Corp. (the first-month deep-dive carries the full verification):
| month | minute_bars | low_usd | high_usd | shares_m |
|---|---|---|---|---|
| 2025-07-01 | 58 | 24.3 | 26.4 | 0.02 |
| 2025-08-01 | 48 | 24 | 25.01 | 0.02 |
| 2025-09-01 | 64 | 23.77 | 25.35 | 0.02 |
| 2025-10-01 | 45 | 24.63 | 25.91 | 0.02 |
| 2025-11-01 | 27 | 25.3 | 25.73 | 0.01 |
| 2025-12-01 | 101 | 21.32 | 25.57 | 0.04 |
| 2026-01-01 | 46 | 21.67 | 22.51 | 0.02 |
| 2026-02-01 | 30 | 21.69 | 22.57 | 0.01 |
| 2026-03-01 | 64 | 21.62 | 22.59 | 0.04 |
| 2026-04-01 | 13 | 21.92 | 23.64 | 0.01 |
| 2026-06-01 | 10960 | 146.88 | 225.64 | 2168.65 |
| 2026-07-01 | 6608 | 145.07 | 176.14 | 485.33 |
The exact SQL behind every number
SELECT
toStartOfMonth(window_start) AS month,
count() AS minute_bars,
round(min(toFloat64(low)), 2) AS low_usd,
round(max(toFloat64(high)), 2) AS high_usd,
round(toFloat64(sum(volume)) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2025-07-01 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY month
ORDER BY monthThe months-long gap is the old entity leaving the tape; the heavy bars from June 2026 onward are the new one, everything below concerns only those prints.
The week on one row
| prior_week_close | week_close | week_change_pct | week_high | week_low | week_low_bar_et | rth_minutes_below_150 | underwater_threshold_usd | closes_below_150 | prior_closing_low | new_low_margin_usd | rth_dollar_bn | week_shares_m | session_days_observed |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 161.86 | 145.4 | -10.2 | 167.9 | 145.07 | 2026-07-10 15:59 | 790 | 150 | 3 | 152.74 | 7.34 | 41.7 | 327.7 | 5 |
The exact SQL behind every number
WITH
(
SELECT argMax(toFloat64(close), window_start) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX' AND window_start >= toDateTime('2026-07-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
) AS pw_close,
(
SELECT min(toFloat64(low)) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX' AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
) AS lo,
(
SELECT max(toFloat64(high)) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX' AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
) AS hi,
(
SELECT min(c) FROM (
SELECT argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX' AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY toDate(toTimeZone(window_start, 'America/New_York'))
)
) AS prior_low_close,
(
SELECT countIf(c < 150) FROM (
SELECT argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX' AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY toDate(toTimeZone(window_start, 'America/New_York'))
)
) AS closes_under_150
SELECT
round(pw_close, 2) AS prior_week_close,
round(toFloat64(argMaxIf(close, window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)), 2) AS week_close,
round((toFloat64(argMaxIf(close, window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)) / pw_close - 1) * 100, 1) AS week_change_pct,
round(hi, 2) AS week_high,
round(lo, 2) AS week_low,
formatDateTime(toTimeZone(minIf(window_start, toFloat64(low) <= lo + 0.011), 'America/New_York'), '%Y-%m-%d %H:%i') AS week_low_bar_et,
countIf(toFloat64(close) < 150 AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS rth_minutes_below_150,
150 AS underwater_threshold_usd,
closes_under_150 AS closes_below_150,
round(prior_low_close, 2) AS prior_closing_low,
round(prior_low_close - toFloat64(argMaxIf(close, window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)), 2) AS new_low_margin_usd,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / 1e9, 1) AS rth_dollar_bn,
round(toFloat64(sum(volume)) / 1e6, 1) AS week_shares_m,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS session_days_observed
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')-10.2% on the week, a $167.9 high to a $145.07 low (printed 2026-07-10 15:59 ET), and 790 regular-session minutes below the $150 first-trade price. Friday's $145.4 close undercut the prior post-listing closing low of $152.74.
One anchor note: "underwater" means under the June 12 opening-cross price, what public buyers first paid, receipted in the first-month deep-dive; against the lower offering price, the listing remains above water. Total regular-hours dollars: 41.7B across 5 sessions.
Session by session: the flow leaves
| et_date | close_usd | change_pct | shares_m | dollar_bn |
|---|---|---|---|---|
| 2026-07-06 | 160.4 | -0.9 | 109.8 | 17.55 |
| 2026-07-07 | 149.58 | -6.7 | 74.1 | 11.3 |
| 2026-07-08 | 148.33 | -0.8 | 57.7 | 8.58 |
| 2026-07-09 | 152.12 | 2.6 | 43.3 | 6.53 |
| 2026-07-10 | 145.4 | -4.4 | 42.7 | 6.31 |
The exact SQL behind every number
SELECT
et_date,
close_usd,
round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
shares_m,
dollar_bn
FROM (
SELECT et_date, close_usd, shares_m, dollar_bn,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS close_usd,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-07-02 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2026-07-06')
ORDER BY et_dateMonday carried 17.55B, the tail of the index-add flow receipted in the index-add deep-dive. Then the flow left: 11.3B Tuesday (the -6.7% session with the first sub-$150 close, per the decline-from-peak note), fading to 6.31B by Friday, roughly a third of Monday's tape. Thursday's +2.6% bounce did not hold; Friday closed -4.4% lower at $145.4.
What the news feed actually said
What was the feed writing while the tape sank? The titles carry what a bare count cannot.
| week_articles | publishers | index_add_headlines | quiet_period_headline | quiet_period_date | results_headline | results_date | borrowing_headline | borrowing_date |
|---|---|---|---|---|---|---|---|---|
| 51 | 3 | 5 | Analysts Go All-In on SpaceX as the Quiet Period Ends | 2026-07-07 | SpaceX Lost $4.28 Billion on $4.7 Billion in Revenue Last Quarter | 2026-07-09 | SpaceX Borrowed $25 Billion and Is Buying Up AI Companies | 2026-07-07 |
The exact SQL behind every number
WITH
(
SELECT (arrayElement(splitByString('. ', argMin(title, published_utc)), 1), toString(min(toDate(toTimeZone(published_utc, 'America/New_York')))))
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX') AND published_utc >= toDateTime('2026-07-06 04:00:00') AND published_utc < toDateTime('2026-07-11 04:00:00')
AND title ILIKE '%quiet period%'
) AS quiet,
(
SELECT (arrayElement(splitByString('. ', argMin(title, published_utc)), 1), toString(min(toDate(toTimeZone(published_utc, 'America/New_York')))))
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX') AND published_utc >= toDateTime('2026-07-06 04:00:00') AND published_utc < toDateTime('2026-07-11 04:00:00')
AND title ILIKE '%lost%revenue%'
) AS results,
(
SELECT (arrayElement(splitByString('. ', argMin(title, published_utc)), 1), toString(min(toDate(toTimeZone(published_utc, 'America/New_York')))))
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX') AND published_utc >= toDateTime('2026-07-06 04:00:00') AND published_utc < toDateTime('2026-07-11 04:00:00')
AND title ILIKE '%borrowed%'
) AS borrow
SELECT
count() AS week_articles,
uniqExact(JSONExtractString(publisher, 'name')) AS publishers,
countIf(title ILIKE '%nasdaq-100%') AS index_add_headlines,
quiet.1 AS quiet_period_headline,
quiet.2 AS quiet_period_date,
results.1 AS results_headline,
results.2 AS results_date,
borrow.1 AS borrowing_headline,
borrow.2 AS borrowing_date
FROM global_markets.stocks_news
WHERE has(tickers, 'SPCX')
AND published_utc >= toDateTime('2026-07-06 04:00:00')
AND published_utc < toDateTime('2026-07-11 04:00:00')51 tagged articles from 3 publishers; three storylines dominate the titles. On 2026-07-07, the feed's own framing was "Analysts Go All-In on SpaceX as the Quiet Period Ends", the underwriters' post-IPO silence lifting and ratings arriving, the same day as the -6.7% session. On 2026-07-09: "SpaceX Lost $4.28 Billion on $4.7 Billion in Revenue Last Quarter", the first quarterly figures of the stock's public life reaching the feed. Running alongside, the balance-sheet thread, "SpaceX Borrowed $25 Billion and Is Buying Up AI Companies" (2026-07-07), plus 5 headlines on the Nasdaq-100 add itself. The usual discipline: one aggregated feed's attention, not the world's media, and the slide and the storylines merely share a calendar; co-occurrence is all this table can attest.
The entity's whole weekly table so far
| period_start | week_return_pct | week_rth_dollar_bn | sessions |
|---|---|---|---|
| 2026-06-08 | 7.5 | 81.2 | 1 |
| 2026-06-15 | 7.7 | 166.5 | 4 |
| 2026-06-22 | -13.2 | 74 | 5 |
| 2026-06-29 | 2.9 | 45.3 | 4 |
| 2026-07-06 | -12.4 | 41.7 | 5 |
The exact SQL behind every number
SELECT
toString(wk) AS period_start,
round(ret, 1) AS week_return_pct,
round(dollar_bn, 1) AS week_rth_dollar_bn,
sessions
FROM (
SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100 AS ret,
sumIf(toFloat64(close) * toFloat64(volume), (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / 1e9 AS dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-06-12 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY wk
)
ORDER BY period_startFive calendar weeks of existence on one small table, the listing pop, the peak, the fade, and now this: a -12.4% open-to-close week on 41.7B of dollars. The baseline is the entity's own prior tape, computed live, every new week still rewrites a fifth of the history.
Is this fade normal? Six other big debuts, same ruler
Is this ordinary post-IPO seasoning or something worse? The check: apply one measurement, regular-hours first trade to the day-28 regular-hours close, to other billion-dollar-plus debuts of the past two years.
| ticker | listed | issue_px | first_trade_open | day28_close | open_to_day28_pct | issue_to_day28_pct | is_spcx |
|---|---|---|---|---|---|---|---|
| VG | 2025-01-24 | 25 | 24.05 | 15.39 | -36 | -38.4 | 0 |
| CBRS | 2026-05-14 | 185 | 350 | 227 | -35.1 | 22.7 | 0 |
| KLAR | 2025-09-10 | 40 | 52 | 42.17 | -18.9 | 5.4 | 0 |
| SPCX | 2026-06-12 | 135 | 150 | 145.4 | -3.1 | 7.7 | 1 |
| LINE | 2024-07-25 | 78 | 82 | 84.38 | 2.9 | 8.2 | 0 |
| CRWV | 2025-03-28 | 40 | 39 | 41.56 | 6.6 | 3.9 | 0 |
| MDLN | 2025-12-17 | 29 | 35 | 43.38 | 23.9 | 49.6 | 0 |
The exact SQL behind every number
SELECT
b.ticker AS ticker,
toString(any(i.ld)) AS listed,
round(any(i.ipx), 2) AS issue_px,
round(argMinIf(toFloat64(b.open), b.window_start, rth), 2) AS first_trade_open,
round(argMaxIf(toFloat64(b.close), b.window_start, rth), 2) AS day28_close,
round((argMaxIf(toFloat64(b.close), b.window_start, rth) / argMinIf(toFloat64(b.open), b.window_start, rth) - 1) * 100, 1) AS open_to_day28_pct,
round((argMaxIf(toFloat64(b.close), b.window_start, rth) / any(i.ipx) - 1) * 100, 1) AS issue_to_day28_pct,
toUInt8(b.ticker = 'SPCX') AS is_spcx
FROM global_markets.delayed_stocks_minute_aggs AS b
INNER JOIN (
SELECT ticker, max(listing_date) AS ld, argMax(toFloat64(final_issue_price), listing_date) AS ipx
FROM global_markets.stocks_ipos
WHERE ticker IN ('SPCX', 'CRWV', 'CBRS', 'KLAR', 'VG', 'MDLN', 'LINE')
GROUP BY ticker
) AS i ON b.ticker = i.ticker
WHERE b.ticker IN ('SPCX', 'CRWV', 'CBRS', 'KLAR', 'VG', 'MDLN', 'LINE')
AND b.window_start >= toDateTime('2024-07-25 00:00:00')
AND b.window_start < toDateTime('2026-07-11 00:00:00')
AND toDate(toTimeZone(b.window_start, 'America/New_York')) >= i.ld
AND toDate(toTimeZone(b.window_start, 'America/New_York')) <= i.ld + 28
AND ((toHour(toTimeZone(b.window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(b.window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth
GROUP BY b.ticker
ORDER BY open_to_day28_pctOn this ruler SPCX's -3.1% sits mid-table. VG (-36%), CBRS (-35.1%) and KLAR (-18.9%) all fell harder from their first public trade; MDLN gained 23.9% over its own first month. Against the offering price instead, SPCX's +7.7% lands where most of this table does, above issue, below the opening print; VG is the one debut here that sat below its own issue at day 28. On this evidence a first-month give-back from the opening print is a common shape for a large debut, not a distress signature.
Still a heavyweight, but a fading one
| ticker | regular_hours_dollar_bn | pct_of_leader | is_spcx |
|---|---|---|---|
| MU | 164 | 100 | 0 |
| SPY | 137.3 | 83.7 | 0 |
| NVDA | 107.1 | 65.3 | 0 |
| QQQ | 103.4 | 63.1 | 0 |
| SNDK | 88 | 53.7 | 0 |
| TSLA | 69.3 | 42.2 | 0 |
| META | 58.3 | 35.5 | 0 |
| AMD | 58 | 35.4 | 0 |
| AAPL | 50.5 | 30.8 | 0 |
| INTC | 47.9 | 29.2 | 0 |
| SPCX | 41.7 | 25.4 | 1 |
| MSFT | 41.1 | 25.1 | 0 |
The exact SQL behind every number
SELECT
ticker,
round(sum(toFloat64(volume) * toFloat64(close)) / 1e9, 1) AS regular_hours_dollar_bn,
round(100 * sum(toFloat64(volume) * toFloat64(close)) / max(sum(toFloat64(volume) * toFloat64(close))) OVER (), 1) AS pct_of_leader,
toUInt8(ticker = 'SPCX') AS is_spcx
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
ORDER BY regular_hours_dollar_bn DESC
LIMIT 12| spcx_rank | spcx_dollar_bn | pct_of_leader |
|---|---|---|
| 11 | 41.7 | 25.4 |
The exact SQL behind every number
WITH (
SELECT sum(toFloat64(volume) * toFloat64(close))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
) AS spcx_d
SELECT
countIf(d > spcx_d AND ticker != 'SPCX') + 1 AS spcx_rank,
round(spcx_d / 1e9, 1) AS spcx_dollar_bn,
round(100 * spcx_d / max(d), 1) AS pct_of_leader
FROM (
SELECT ticker, sum(toFloat64(volume) * toFloat64(close)) AS d
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker
)Rank eleventh by dollars for the week, still among the tape's heaviest names, at 25.4% of the week's leader, where June's post-listing window had it in the market's top handful. The basis: every ticker's regular-hours dollars over the five sessions, subject included with a receipt flag rather than excluded, this page's topic IS the verified entity.
What the tape was made of
| prints_m | median_print_shares | odd_lot_pct_of_prints | nbbo_updates_m | clean_two_sided_pct |
|---|---|---|---|---|
| 5.52 | 10 | 80.1 | 2.2 | 99.35 |
The exact SQL behind every number
WITH
(
SELECT (round(count() / 1e6, 2),
round(100.0 * countIf(bid_price > 0 AND ask_price > 0 AND ask_price > bid_price) / count(), 2))
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-07-06 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)
) AS quote_census
SELECT
round(count() / 1e6, 2) AS prints_m,
quantileDeterministic(0.5)(toFloat64(size), toUInt64(abs(sequence_number))) AS median_print_shares,
round(100.0 * countIf(size < 100) / count(), 1) AS odd_lot_pct_of_prints,
quote_census.1 AS nbbo_updates_m,
quote_census.2 AS clean_two_sided_pct
FROM global_markets.stocks_trades
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-07-06 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)5.52 million prints, 80.1% of them odd lots, against 2.2 million NBBO updates (99.35% clean two-sided). A month past listing, the microstructure reads like any large active stock's.
The spread: seasoning continues
| session | med_spread_bps | quote_updates |
|---|---|---|
| 2026-07-06 | 3.12 | 417594 |
| 2026-07-07 | 3.93 | 498486 |
| 2026-07-08 | 4.07 | 384283 |
| 2026-07-09 | 3.99 | 341861 |
| 2026-07-10 | 2.7 | 350334 |
The exact SQL behind every number
SELECT
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), 2) AS med_spread_bps,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
AND sip_timestamp >= toDateTime64('2026-07-06 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session
ORDER BY sessionMedian regular-hours spreads opened at 3.12 bps Monday, widened to 4.07 bps by midweek, and eased to 2.7 bps by Friday, a young listing's spread churning in big-name territory even while its price fell. Liquidity provision and price direction are different machines; this week separated them cleanly.
Options: puts below the market, lottery calls above it
| contracts_traded_m | week_put_call_ratio | premium_notional_busd | busiest_contract |
|---|---|---|---|
| 3.14 | 0.8 | 1.71 | $450 call, expiry 2026-07-17 |
The exact SQL behind every number
WITH
(
SELECT concat('$', toString(round(toFloat64(toUInt32OrZero(substring(ticker, 14, 8))) / 1000, 2)),
if(substring(ticker, 13, 1) = 'P', ' put', ' call'),
', expiry 20', substring(ticker, 7, 2), '-', substring(ticker, 9, 2), '-', substring(ticker, 11, 2))
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-07-06 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)
GROUP BY ticker ORDER BY sum(size) DESC LIMIT 1
) AS busiest_name
SELECT
round(sum(size) / 1e6, 2) AS contracts_traded_m,
round(toFloat64(sumIf(size, substring(ticker, 13, 1) = 'P')) / toFloat64(sumIf(size, substring(ticker, 13, 1) = 'C')), 2) AS week_put_call_ratio,
round(sum(toFloat64(price) * size) * 100 / 1e9, 2) AS premium_notional_busd,
busiest_name AS busiest_contract
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND sip_timestamp >= toDateTime64('2026-07-06 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)The book traded 3.14 million contracts at a put-call ratio of 0.8, calls still outnumbered puts, but far more put-weighted than a typical single stock (NVDA's same-week book ran roughly half that ratio). A ratio cannot say WHERE the puts sit. The strike map can:
| strike_bucket | call_contracts | put_contracts | put_share_pct | expiring_by_jul17_pct | pct_of_biggest_bucket |
|---|---|---|---|---|---|
| $80 | 3949 | 91378 | 95.9 | 1.8 | 7.8 |
| $100 | 7474 | 118334 | 94.1 | 9.3 | 10.3 |
| $120 | 14297 | 333149 | 95.9 | 46.2 | 28.5 |
| $140 | 474486 | 745914 | 61.1 | 83.2 | 100 |
| $160 | 461688 | 84946 | 15.5 | 77.9 | 44.8 |
| $180 | 214378 | 6951 | 3.1 | 70.4 | 18.1 |
| $200 | 104763 | 16795 | 13.8 | 64.9 | 10 |
| $220 | 46573 | 1180 | 2.5 | 71.7 | 3.9 |
| $240 | 413356 | 2229 | 0.5 | 83.7 | 34.1 |
The exact SQL behind every number
SELECT
concat('$', toString(toUInt32(bucket))) AS strike_bucket,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'C')) AS call_contracts,
toUInt64(sumIf(size, substring(ticker, 13, 1) = 'P')) AS put_contracts,
round(100.0 * sumIf(size, substring(ticker, 13, 1) = 'P') / sum(size), 1) AS put_share_pct,
round(100.0 * sumIf(size, substring(ticker, 7, 6) <= '260717') / sum(size), 1) AS expiring_by_jul17_pct,
round(100 * sum(size) / max(sum(size)) OVER (), 1) AS pct_of_biggest_bucket
FROM global_markets.options_trades
WHERE startsWith(ticker, 'O:SPCX') AND length(ticker) = 21
AND toUInt32OrZero(substring(ticker, 14, 8)) > 0
AND sip_timestamp >= toDateTime64('2026-07-06 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-11 00:00:00', 9)
GROUP BY least(greatest(floor(toFloat64(toUInt32OrZero(substring(ticker, 14, 8))) / 1000 / 20) * 20, 80), 240) AS bucket
ORDER BY bucketThe shape is a barbell. Below the trading range the book is almost pure put: 95.9% puts in the $120 bucket (333149 contracts), every bucket beneath it above ninety percent too. The at-the-money $140 bucket took the most volume of any bucket, 61.1% puts, 83.2% of it expiring by July 17. Above the range the polarity flips (15.5% puts at $160), and the far tail is nearly all call: 413356 call contracts in the $240-and-up bucket, home of the week's single busiest contract (the $450 call, expiry 2026-07-17). What this table can say: puts stacked at and below the market, the classic footprint of downside protection, with long-shot calls far above. What it cannot: whether those puts hedge stock or express outright bearish views; prints carry neither identity nor intent (the put-call ratio explainer draws that boundary).
The shorts, with a denominator this time
| d | short_shares_m | offexchange_total_m | short_pct_of_offexchange |
|---|---|---|---|
| 2026-07-06 | 23.7 | 35.5 | 66.8 |
| 2026-07-08 | 18.7 | 25.3 | 73.8 |
| 2026-07-09 | 12.1 | 18.5 | 65.4 |
| 2026-07-10 | 12.2 | 17.3 | 70.5 |
The exact SQL behind every number
SELECT toString(date) AS d,
round(toFloat64(any(short_volume)) / 1e6, 1) AS short_shares_m,
round(toFloat64(any(total_volume)) / 1e6, 1) AS offexchange_total_m,
round(100 * toFloat64(any(short_volume)) / toFloat64(any(total_volume)), 1) AS short_pct_of_offexchange
FROM global_markets.stocks_short_volume
WHERE ticker = 'SPCX' AND date >= toDate('2026-07-06') AND date <= toDate('2026-07-10')
GROUP BY date
ORDER BY dateReported short volume eased from 23.7M shares Monday to 12.2M Friday, tracking the total tape lower; as a share of off-exchange volume it held a band around 66.8%, mostly market-maker plumbing (shorting to fill customer buys), not a directional bet, as the short-volume explainer unpacks. Two caveats: July 7's market-wide file arrived truncated (receipted in the weekly market recap), so the week shows 4 daily files rather than five, and short volume is a flow, not a position. The position lives in the short-interest series:
| settlement | shares_short_m | avg_daily_volume_m | vendor_days_to_cover | implied_days_to_cover |
|---|---|---|---|---|
| 2026-06-15 | 23.3 | 69.2 | 1 | 0.34 |
| 2026-06-30 | 111.3 | 151.6 | 1 | 0.73 |
The exact SQL behind every number
SELECT toString(settlement_date) AS settlement,
round(toFloat64(max(short_interest)) / 1e6, 1) AS shares_short_m,
round(toFloat64(max(avg_daily_volume)) / 1e6, 1) AS avg_daily_volume_m,
max(days_to_cover) AS vendor_days_to_cover,
round(toFloat64(max(short_interest)) / toFloat64(max(avg_daily_volume)), 2) AS implied_days_to_cover
FROM global_markets.stocks_short_interest
WHERE ticker = 'SPCX' AND settlement_date >= toDate('2026-06-01') AND settlement_date <= toDate('2026-06-30')
GROUP BY settlement_date
ORDER BY settlement_dateBetween the 2026-06-15 and 2026-06-30 settlements, shares short grew from 23.3M to 111.3M, but the denominator matters: against the vendor's 151.6M-share average day, that is an implied days-to-cover of just 0.73 (the vendor's own field floors at 1), the entire short book could cover inside one average session. One disclosure stands: the source has already restated the June 15 print once since the first-month page first published, these figures are its current record, re-run and bounds-checked at every regeneration.
What to watch from here
Four threads stay open. The index-add flow is one-time by construction, index funds buy at inclusion, then hold, so Monday's 17.55B tape is a ceiling that mechanism will not rebuild. The July 17 expiry retires most of the at-the-money options traffic (83.2% of the biggest strike bucket); where the put wall rebuilds is the cleanest read on whether the protection bid persists. The next short-interest settlement publishes on FINRA's usual lag and will show whether shares short kept growing into the slide. And every IPO's standing supply date, the lock-up expiration, is taken up in the FAQ below.
FAQ
Is SPCX still above its IPO price?
Above the offering price, below the first public trade. SPCX ended the week at $145.4, 7.7% above the $135 offering price, but under the $150 opening cross where public trading began June 12.
What does SPCX's put-call ratio actually mean?
0.8 puts traded per call, calls still outnumbered puts, but roughly double the same-week tilt in NVDA's options book. A ratio alone cannot separate hedging from bearish bets; the strike map shows puts concentrated at and below the market, the shape protection takes.
Why did the index-add buying disappear?
Index inclusion is a one-time rebalance: tracking funds buy around the effective date, then simply hold. The giant July 6 closing cross was that purchase happening; the mechanism never buys again.
Is the June first-trade price a support level for SPCX?
That $150 mark is where the June 12 opening cross printed, a reference point, not a mechanical floor. The tape spent 790 regular-session minutes below it this week and closed under it 3 times, so as a hard floor it has already given way.
When does the SPCX IPO lock-up expire?
The prospectus sets the date; the customary term is 180 days from the offering, for a June 12, 2026 listing, early December 2026. Until it passes, most insider and pre-IPO shares cannot be sold; the lock-up expiration is the standard supply date on every IPO calendar.
Data notes
All timestamps are UTC; regular hours are the 810-1199 UTC-minute band (the EDT session); the debut-comparison panel instead filters the 9:30-16:00 ET clock so winter listings stay on the true session. The week runs July 6-10 with the prior close from Thursday July 2 (July 3 holiday). This symbol is on the ambiguity guard list: every SPCX window starts at or after the June 12, 2026 listing of the verified entity, and the symbol-history panel makes the old entity's boundary visible. The "underwater" measure counts regular-session minutes and closes below the first-trade price (the June 12 opening cross, emitted as a declared column), not the offering price. The debut comparison runs each listing from its own first regular-hours trade to its own day-28 close, same ruler, different calendars, with issue prices from the IPO record. OCC option tickers are parsed positionally; unparseable strikes are excluded by a strike > 0 filter. News counts and quoted headlines measure ONE aggregated feed; headline receipts are first-sentence trims. Short-volume inherits its source file's completeness, flagged above; the short-interest series has been restated before.
Methodology
- Source: consolidated tape,
delayed_stocks_minute_aggs,stocks_trades,cache_stocks_quotes,options_trades,stocks_news,stocks_ipos, FINRAstocks_short_volumeandstocks_short_interest. - Entity discipline: verified_tickers assertion; windows bounded to the post-listing entity; the reuse receipt leads the page.
- Deterministic aggregates; prior-period and cross-listing comparisons computed live, never quoted from other posts.
- Warehouse as-of: July 12, 2026.
Cross-links: the first month, the index add, the decline from peak, and the week's market recap. Every panel is one stored object, chart, table, SQL, and every query runs on the Strasmore terminal.