range_pricing
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-18, from what-is-an-ipo.
| esito_del_bookbuilding | numero_debutti | quota_pct | rendimento_mediano_primo_giorno_pct | chiusi_sotto_il_prezzo_pct |
|---|---|---|---|---|
| sotto la forchetta | 6 | 8.3 | 0 | 50 |
| dentro la forchetta | 58 | 80.6 | 5.2 | 32.8 |
| sopra la forchetta | 8 | 11.1 | 42.1 | 0 |
- Rows × columns
- 3 × 5
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
esito_del_bookbuilding |
text | 3 distinct values | |
numero_debutti |
number | 6 to 58 | |
quota_pct |
number | 8.3 to 80.6 | percent |
rendimento_mediano_primo_giorno_pct |
number | 0 to 42.1 | percent |
chiusi_sotto_il_prezzo_pct |
number | 0 to 50 | percent |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH
offerte AS
(
SELECT
ticker,
argMax(toDate(listing_date), _ingest_time) AS data_quotazione,
argMax(toFloat64(final_issue_price), _ingest_time) AS prezzo_offerta,
argMax(toFloat64(lowest_offer_price), _ingest_time) AS forchetta_min,
argMax(toFloat64(highest_offer_price), _ingest_time) AS forchetta_max
FROM global_markets.stocks_ipos
WHERE toDate(listing_date) >= '2026-01-01'
AND toDate(listing_date) < '2026-07-01'
AND lower(ifNull(ipo_status, '')) NOT IN ('pending', 'postponed', 'withdrawn', 'rumor', 'direct_listing_process')
AND final_issue_price >= 4
AND lowest_offer_price > 0
AND highest_offer_price >= lowest_offer_price
AND lower(ifNull(issuer_name, '')) NOT LIKE '%acquisition%'
AND lower(ifNull(security_description, '')) NOT LIKE '%unit%'
AND lower(ifNull(security_description, '')) NOT LIKE '%warrant%'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
),
prime_sedute AS
(
SELECT
o.ticker AS simbolo,
o.prezzo_offerta AS prezzo_coll,
o.forchetta_min AS range_min,
o.forchetta_max AS range_max,
argMin(toFloat64(a.close), a.date) AS prima_chiusura
FROM global_markets.stocks_daily_aggs AS a
INNER JOIN offerte AS o ON a.ticker = o.ticker
WHERE a.ticker IN (SELECT ticker FROM offerte)
AND a.date >= '2026-01-01'
AND a.date < '2026-07-10'
AND a.date >= o.data_quotazione
AND a.date <= o.data_quotazione + 5
AND a.volume > 0
GROUP BY o.ticker, o.prezzo_offerta, o.forchetta_min, o.forchetta_max
)
SELECT
multiIf(prezzo_coll > range_max, 'sopra la forchetta',
prezzo_coll < range_min, 'sotto la forchetta',
'dentro la forchetta') AS esito_del_bookbuilding,
count() AS numero_debutti,
round(count() / sum(count()) OVER () * 100, 1) AS quota_pct,
round(quantileExact(0.5)(prima_chiusura / prezzo_coll * 100 - 100), 1) AS rendimento_mediano_primo_giorno_pct,
round(countIf(prima_chiusura < prezzo_coll) / count() * 100, 1) AS chiusi_sotto_il_prezzo_pct
FROM prime_sedute
GROUP BY esito_del_bookbuilding
ORDER BY multiIf(esito_del_bookbuilding = 'sotto la forchetta', 1,
esito_del_bookbuilding = 'dentro la forchetta', 2, 3)
Lavora con questi dati nel tuo assistente IA
Si apre pronto per le query, con i dati di questa pagina. Gratis, senza account.