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.
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 srSession 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.
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_dateJuly 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.
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_timeThe 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.
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_dateOptions: 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 put — 21261 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.
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 10The 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_dateThe 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.
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_dateSPY 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%.
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_dateFAQ
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_iposrecord (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_invalidcolumn of the same panel. - July 7's OPTION quotes had not landed at authoring —
cache_options_quotescarries 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) = 21pins 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.