Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

SpaceX Stock's Round Trip: Peak to IPO Price

SpaceX stock peaked at $225.64 on June 16, 2026 and closed July 7 at $149.58 — below its $150 IPO opening print. The full round trip, measured in SQL.

SpaceX went public on June 12, 2026 at $150 a share — and by the close on July 7, the round trip was complete. SPCX peaked at $225.64 on 2026-06-16, up 50.4% from the IPO opening trade, then gave all of it back: July 7 closed at $149.58, $0.42 below the first regular-hours print, off a late-day low of $148.86. Peak to that close measures a 33.7% decline. Over the same window the S&P 500 ETF (SPY) rose 0.94% — this was one stock's repricing, not a market move. Every number below is a stored query result from the consolidated tape and quote feed; expand any panel for the exact SQL.

The arc: IPO open to round trip

The scoreboard row tells it in one line: issue price $135, first regular-hours trade $150 (an 11:46 a.m. opening cross — the first-month deep dive carries the listing-day mechanics), peak $225.64 on 2026-06-16, and a $149.58 close on July 7. The peak printed mid-morning inside regular hours and is traced by its neighboring bars (data notes); the July 7 session low, $148.86, printed at 15:55 ET — inside the final half hour.

QueryThe arc on one row: IPO open, peak, July 7 close, and the decline
The exact SQL behind every number
WITH
    peak_stats AS (
        SELECT
            round(toFloat64(max(high)), 2) AS peak_hi,
            toDate(toTimeZone(argMax(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start)))), 'America/New_York')) AS peak_d
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPCX'
          AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-07-08 00:00:00'
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    ),
    ipo_open AS (
        SELECT round(toFloat64(argMin(open, window_start)), 2) AS ipo_open_px
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPCX'
          AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-06-13 00:00:00'
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    ),
    issue_price AS (
        SELECT toFloat64(final_issue_price) AS issue_px
        FROM global_markets.stocks_ipos
        WHERE ticker = 'SPCX'
        ORDER BY listing_date DESC LIMIT 1
    ),
    jul7 AS (
        SELECT
            round(toFloat64(argMax(close, window_start)), 2) AS jul7_c,
            round(toFloat64(min(low)), 2) AS jul7_lo,
            argMin(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start)))) AS low_bar
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPCX'
          AND window_start >= '2026-07-07 00:00:00' AND window_start < '2026-07-08 00:00:00'
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    ),
    spy_ret AS (
        SELECT round((toFloat64(argMax(close, window_start)) / toFloat64(argMin(open, window_start)) - 1) * 100, 2) AS spy_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-07-08 00:00:00'
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    )
SELECT
    toString(round(ip.issue_px, 2)) AS issue_price,
    io.ipo_open_px AS ipo_open,
    ps.peak_hi AS peak_price,
    toString(ps.peak_d) AS peak_date,
    toMonth(ps.peak_d) AS peak_month,
    toDayOfMonth(ps.peak_d) AS peak_day,
    j.jul7_c AS jul7_close,
    j.jul7_lo AS jul7_low,
    formatDateTime(toTimeZone(j.low_bar, 'America/New_York'), '%H:%i') AS jul7_low_et,
    toHour(toTimeZone(j.low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(j.low_bar, 'America/New_York')) AS jul7_low_et_minute,
    round(io.ipo_open_px - j.jul7_c, 2) AS close_below_ipo_usd,
    round(io.ipo_open_px - j.jul7_lo, 2) AS low_below_ipo_usd,
    round((ps.peak_hi - io.ipo_open_px) / io.ipo_open_px * 100, 1) AS peak_above_ipo_pct,
    round((ps.peak_hi - j.jul7_c) / ps.peak_hi * 100, 1) AS decline_from_peak_pct,
    sr.spy_pct AS spy_period_pct
FROM peak_stats ps, ipo_open io, issue_price ip, jul7 j, spy_ret sr

Session by session: the descent

SPCX traded 16 sessions between its listing and July 7 — the June 19 Juneteenth and July 3 Independence Day closures account for the calendar gaps. It opened its first session at $150, printed the $225.64 peak two sessions later, and arrived at July 7 with a $149.58 close on a $148.86 low. The volume cooled as the story aged: 495.6 million shares on day one, 274.5 million on the peak session, 66.2 million on July 7.

QueryRegular-hours session scoreboard: open, close, low, high, volume for every SPCX session
The exact SQL behind every number
SELECT
    toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
    round(toFloat64(argMin(open, window_start)), 2) AS rth_open,
    round(toFloat64(argMax(close, window_start)), 2) AS rth_close,
    round(toFloat64(min(low)), 2) AS rth_low,
    round(toFloat64(max(high)), 2) AS rth_high,
    round(toFloat64(sum(volume)) / 1e6, 1) AS vol_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
  AND window_start >= '2026-06-12 00:00:00' AND window_start < '2026-07-08 00:00:00'
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY session_date
ORDER BY session_date

July 7: the day the line broke

July 7 was also SPCX's first session inside the Nasdaq-100 — the index-add trade measures the record closing cross that preceded it on July 6, auction by auction. On the day itself, the selling was front- and back-loaded. SPCX opened at $158.92 and the opening half hour alone turned over 13.4 million shares, carrying the stock to $153.08 by 10:00 a.m. Midday held above the IPO print — from mid-morning through 3 p.m. the half-hour closes sat between roughly $150.42 and $152.59 — and then the final half hour broke it: 10.9 million shares, the session low of $148.86 printing at 15:55 ET, and a $149.58 finish. That close is $0.42 below the IPO opening trade — the first closing print below that line in the stock's short life.

QueryJuly 7 intraday path: half-hour closes, lows, and volume
The exact SQL behind every number
SELECT
    formatDateTime(toTimeZone(toStartOfInterval(window_start, INTERVAL 30 MINUTE), 'America/New_York'), '%H:%i') AS et_time,
    round(toFloat64(argMax(close, window_start)), 2) AS close_px,
    round(toFloat64(min(low)), 2) AS bucket_low,
    round(toFloat64(sum(volume)) / 1e6, 1) AS vol_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPCX'
  AND window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY et_time
ORDER BY et_time

The spread narrowed as the price fell

One thing that did not worsen during the decline was the cost to trade. The bid-ask spread — the toll every marketable order pays — averaged 10.74 bps of the midpoint on IPO day, 7.14 bps on the peak session, and 4.18 bps on July 7. Depth at the touch thinned as the crowd moved on: an average of 9506 shares on day one against 3265 on July 7. The quote feed settled even as the price fell.

QueryStock quote spread and depth by session (invalid records counted per row)
The exact SQL behind every number
SELECT
    toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
    round(avgIf((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price > bid_price), 2) AS avg_spread_bps,
    round(avgIf((toFloat64(ask_size) + toFloat64(bid_size)) / 2, bid_price > 0 AND ask_price > bid_price), 0) AS avg_depth,
    countIf(NOT (bid_price > 0 AND ask_price > bid_price)) AS dropped_invalid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPCX'
  AND sip_timestamp >= '2026-06-12 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY session_date
ORDER BY session_date

Options: puts at the IPO price, no 0DTE to trade

On July 7 the busiest SPCX contract was the 330-strike call (28906 contracts), and the 150-strike put21261 contracts — sits exactly on the $150 IPO opening price. All five of the busiest contracts expire on 2026-07-10, the Friday weekly: SPCX lists weekly and monthly expiries, so a Tuesday session has no same-day 0DTE contract to trade. The put/call volume ratio moved from 0.61 on July 1 to 0.83 on July 7.

QueryJuly 7: top 10 SPCX option contracts by volume
The exact SQL behind every number
SELECT
    concat('20', substring(ticker, 7, 2), '-', substring(ticker, 9, 2), '-', substring(ticker, 11, 2)) AS expiry_date,
    if(substring(ticker, 13, 1) = 'C', 'call', 'put') AS call_or_put,
    toUInt32OrZero(substring(ticker, 14, 8)) / 1000 AS strike,
    concat(toString(toUInt32OrZero(substring(ticker, 14, 8)) / 1000), '-strike ', if(substring(ticker, 13, 1) = 'C', 'call', 'put')) AS label,
    sum(size) AS volume,
    round(sum(toFloat64(size) * toFloat64(price)) / 1e6, 2) AS notional_m,
    if(substring(ticker, 7, 6) = '260710', 1, 0) AS expires_jul10
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPCX%'
  AND length(ticker) = 21
  AND sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
GROUP BY expiry_date, call_or_put, strike, label, expires_jul10
ORDER BY volume DESC
LIMIT 10
QueryPut/call volume ratio by session
The exact SQL behind every number
SELECT
    toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
    round(sumIf(size, substring(ticker, 13, 1) = 'P') / sumIf(size, substring(ticker, 13, 1) = 'C'), 2) AS pc_ratio,
    sumIf(size, substring(ticker, 13, 1) = 'C') AS call_vol,
    sumIf(size, substring(ticker, 13, 1) = 'P') AS put_vol
FROM global_markets.options_trades
WHERE ticker LIKE 'O:SPCX%'
  AND length(ticker) = 21
  AND sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
GROUP BY session_date
ORDER BY session_date

The options quote feed stayed wide

While the stock's spread narrowed to single-digit basis points, the option chain quoted wide throughout: the average quoted spread across SPCX contracts measured 1086.65 bps on July 1, 1059.11 on July 2, and 1183.25 bps on July 6 — hundreds of times the stock's own touch on the same days (both panels carry the receipts). Average size at the best quote ran 231 contracts on July 1 and 200 on July 6. July 7's option quotes had not been ingested at authoring — that table carries the warehouse's longest lag — so this panel stops at July 6 and says so.

QueryOptions quote spread by session, July 1-6 (July 7 not yet ingested at authoring)
The exact SQL behind every number
SELECT
    toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session_date,
    round(avgIf((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price > bid_price), 2) AS opt_spread_bps,
    round(avgIf((toFloat64(ask_size) + toFloat64(bid_size)) / 2, bid_price > 0 AND ask_price > bid_price), 0) AS avg_size,
    countIf(NOT (bid_price > 0 AND ask_price > bid_price)) AS dropped_invalid,
    count() AS quotes
FROM global_markets.cache_options_quotes
WHERE ticker LIKE 'O:SPCX%'
  AND sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-07 00:00:00'
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY session_date
ORDER BY session_date

SPY barely moved

Over the June 12 to July 7 window, SPY rose 0.94% (first regular-hours open to last regular-hours close). Session by session in July the divergence is plain: on July 7 SPY printed -0.34% open-to-close while SPCX printed -5.87%.

QuerySPY vs SPCX open-to-close, regular hours (July sessions)
The exact SQL behind every number
SELECT
    a.session_date AS session_date,
    round(a.spx_pct, 2) AS spy_pct,
    round(b.spcx_pct, 2) AS spcx_pct
FROM (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        (toFloat64(argMax(close, window_start)) / toFloat64(argMin(open, window_start)) - 1) * 100 AS spx_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= '2026-07-01 00:00:00' AND window_start < '2026-07-08 00:00:00'
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY session_date
) a
INNER JOIN (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        (toFloat64(argMax(close, window_start)) / toFloat64(argMin(open, window_start)) - 1) * 100 AS spcx_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPCX'
      AND window_start >= '2026-07-01 00:00:00' AND window_start < '2026-07-08 00:00:00'
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY session_date
) b ON a.session_date = b.session_date
ORDER BY a.session_date

FAQ

How far did SpaceX stock fall from its peak?

SPCX peaked at $225.64 on 2026-06-16 and closed at $149.58 on July 7, 2026 — a 33.7% decline from the peak print to that close.

Did SpaceX stock go below its IPO price?

Yes — twice over. The first regular-hours prints below the $150 IPO opening trade came on June 26 (session low $148.51), and on July 7 the stock closed below it, at $149.58. The $135 issue price is a different line: SPCX has not traded near it.

How wide is the SPCX bid-ask spread?

On July 7 the average stock spread was 4.18 basis points of the midpoint, down from 10.74 bps on the June 12 IPO day. The option chain quoted far wider — 1183.25 bps on July 6, the last session with options quotes on file.

Was the SPCX decline a market-wide move?

No. Over the same window SPY rose 0.94%, and on July 7 itself SPY printed -0.34% open-to-close while SPCX printed -5.87%.

What SpaceX options traded the most on July 7?

The 330-strike call led with 28906 contracts, and the 150-strike put — the strike sitting on the $150 IPO opening price — traded 21261. All five of the busiest expire 2026-07-10, the Friday weekly.

Data notes

  • Entity verification (reused symbol): the SPCX symbol previously identified an unrelated company whose tape ran through April 2026; nothing before the June 12, 2026 listing is attributed to SpaceX. The scoreboard's issue-price receipt reads the stocks_ipos record (Space Exploration Technologies Corp., listed 2026-06-12); the first-month deep dive carries the full verification receipts.
  • The peak passed the lone-print cross-check: the $225.64 high printed across two consecutive minutes (10:02–10:03 a.m. ET on the peak session) with neighboring bars within about two dollars — a traced extreme, not a stray print.
  • Quote panels exclude one-sided, crossed, or locked records and count what they drop in a dropped_invalid column of the same panel.
  • July 7's OPTION quotes had not landed at authoringcache_options_quotes carries the warehouse's longest ingest lag; the options-quote panel covers July 1–6 and is labeled accordingly. Equity quotes and trades for July 7 are complete.
  • Volumes are minute-bar sums over regular hours only; extended-hours prints (including the pre-market June 23 low noted in the first-month post) sit outside every panel on this page.

Methodology

  • SPCX traded 16 sessions from June 12 through July 7, 2026 — the June 19 (Juneteenth) and July 3 (Independence Day) closures were verified from observed bars, never assumed. Timestamps are stored in UTC and converted to New York time inside the queries; regular hours are 13:30–19:59 UTC (9:30 a.m.–4:00 p.m. ET in summer); "close" means the last regular-session minute bar; prices come from the delayed consolidated view.
  • Decimal columns are cast to 64-bit floats before ratio arithmetic. Option expiry, type, and strike are parsed from the OCC ticker (positions 7/13/14 for this four-character root; length(ticker) = 21 pins the root exactly, so look-alike roots cannot leak in).
  • This is a pinned post: every query uses explicit date literals and reproduces these figures at any later date. Warehouse state as of July 9, 2026.

This post is the third in the SPCX series, following the first-month deep dive and the Nasdaq-100 index-add trade. Every figure is a stored query result — run the SQL yourself on the Strasmore terminal.