STRASMORE/EXPLORE 3,293 QUERIES

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.

as of table 3×5read in context →
range_pricing — 3 rows by 5 columns, computed from US exchange, SIP and OPRA data.
esito_del_bookbuildingnumero_debuttiquota_pctrendimento_mediano_primo_giorno_pctchiusi_sotto_il_prezzo_pct
sotto la forchetta68.3050
dentro la forchetta5880.65.232.8
sopra la forchetta811.142.10
Rows × columns
3 × 5
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for range_pricing, derived from the stored result.
ColumnTypeRangeNotes
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)
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.