Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-07-26

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):

QueryThe symbol's trading history by month: the gap and the new entity's arrival
monthminute_barslow_usdhigh_usdshares_m
2025-07-015824.326.40.02
2025-08-01482425.010.02
2025-09-016423.7725.350.02
2025-10-014524.6325.910.02
2025-11-012725.325.730.01
2025-12-0110121.3225.570.04
2026-01-014621.6722.510.02
2026-02-013021.6922.570.01
2026-03-016421.6222.590.04
2026-04-011321.9223.640.01
2026-06-0110960146.88225.642168.65
2026-07-016608145.07176.14485.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 month
Run this yourself

The 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

QuerySPCX, week of July 6, 2026: the slide, receipted
prior_week_closeweek_closeweek_change_pctweek_highweek_lowweek_low_bar_etrth_minutes_below_150underwater_threshold_usdcloses_below_150prior_closing_lownew_low_margin_usdrth_dollar_bnweek_shares_msession_days_observed
161.86145.4-10.2167.9145.072026-07-10 15:597901503152.747.3441.7327.75
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')
Run this yourself

-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

QuerySPCX by session: close, change, shares, dollars
et_dateclose_usdchange_pctshares_mdollar_bn
2026-07-06160.4-0.9109.817.55
2026-07-07149.58-6.774.111.3
2026-07-08148.33-0.857.78.58
2026-07-09152.122.643.36.53
2026-07-10145.4-4.442.76.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_date
Run this yourself

Monday 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.

QueryThe week's news flow: counts, plus the three storyline receipts, quoted verbatim
week_articlespublishersindex_add_headlinesquiet_period_headlinequiet_period_dateresults_headlineresults_dateborrowing_headlineborrowing_date
5135Analysts Go All-In on SpaceX as the Quiet Period Ends2026-07-07SpaceX Lost $4.28 Billion on $4.7 Billion in Revenue Last Quarter2026-07-09SpaceX Borrowed $25 Billion and Is Buying Up AI Companies2026-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')
Run this yourself

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

QueryEvery week of the new entity's life: open-to-close return and RTH dollars (entity-bounded)
period_startweek_return_pctweek_rth_dollar_bnsessions
2026-06-087.581.21
2026-06-157.7166.54
2026-06-22-13.2745
2026-06-292.945.34
2026-07-06-12.441.75
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_start
Run this yourself

Five 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.

QueryLarge recent debuts, first month on one ruler: first trade to the day-28 close (ET regular hours)
tickerlistedissue_pxfirst_trade_openday28_closeopen_to_day28_pctissue_to_day28_pctis_spcx
VG2025-01-242524.0515.39-36-38.40
CBRS2026-05-14185350227-35.122.70
KLAR2025-09-10405242.17-18.95.40
SPCX2026-06-12135150145.4-3.17.71
LINE2024-07-25788284.382.98.20
CRWV2025-03-28403941.566.63.90
MDLN2025-12-17293543.3823.949.60
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_pct
Run this yourself

On 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

QueryThe week's heaviest tickers by regular-hours dollar volume: where the newcomer now sits
tickerregular_hours_dollar_bnpct_of_leaderis_spcx
MU1641000
SPY137.383.70
NVDA107.165.30
QQQ103.463.10
SNDK8853.70
TSLA69.342.20
META58.335.50
AMD5835.40
AAPL50.530.80
INTC47.929.20
SPCX41.725.41
MSFT41.125.10
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
Run this yourself
QueryRank receipt: the week's dollar volume against every other ticker
spcx_rankspcx_dollar_bnpct_of_leader
1141.725.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
)
Run this yourself

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

QueryPrint-size anatomy and quote census: full week
prints_mmedian_print_sharesodd_lot_pct_of_printsnbbo_updates_mclean_two_sided_pct
5.521080.12.299.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)
Run this yourself

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

QueryMedian quoted spread by session, regular hours (bps of midpoint)
sessionmed_spread_bpsquote_updates
2026-07-063.12417594
2026-07-073.93498486
2026-07-084.07384283
2026-07-093.99341861
2026-07-102.7350334
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 session
Run this yourself

Median 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

QueryOptions on the new entity, full week: contracts, put-call, busiest contract
contracts_traded_mweek_put_call_ratiopremium_notional_busdbusiest_contract
3.140.81.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)
Run this yourself

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:

QueryThe week's contracts by strike bucket ($20 buckets; tails capped at $80 and $240)
strike_bucketcall_contractsput_contractsput_share_pctexpiring_by_jul17_pctpct_of_biggest_bucket
$8039499137895.91.87.8
$100747411833494.19.310.3
$1201429733314995.946.228.5
$14047448674591461.183.2100
$1604616888494615.577.944.8
$18021437869513.170.418.1
$2001047631679513.864.910
$2204657311802.571.73.9
$24041335622290.583.734.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 bucket
Run this yourself

The 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

QueryFINRA daily short volume during the week: short shares and their off-exchange share
dshort_shares_moffexchange_total_mshort_pct_of_offexchange
2026-07-0623.735.566.8
2026-07-0818.725.373.8
2026-07-0912.118.565.4
2026-07-1012.217.370.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 date
Run this yourself

Reported 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:

QueryThe new entity's short-interest prints to date, with implied days-to-cover
settlementshares_short_mavg_daily_volume_mvendor_days_to_coverimplied_days_to_cover
2026-06-1523.369.210.34
2026-06-30111.3151.610.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_date
Run this yourself

Between 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, FINRA stocks_short_volume and stocks_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.