{"slug":"when-do-options-become-available-after-an-ipo","qid":"chain_ramp","label":"How quickly the forty largest new listings got a traded option chain","post_title":"When Do Options Start Trading After an IPO?","post_url":"/blog/when-do-options-become-available-after-an-ipo#q-chain_ramp","columns":["session_number","pct_with_listed_options","median_share_volume_mm"],"rows":[{"session_number":1,"pct_with_listed_options":0,"median_share_volume_mm":34.47},{"session_number":2,"pct_with_listed_options":2.5,"median_share_volume_mm":10.93},{"session_number":3,"pct_with_listed_options":67.5,"median_share_volume_mm":6.69},{"session_number":4,"pct_with_listed_options":70,"median_share_volume_mm":4.76},{"session_number":5,"pct_with_listed_options":80,"median_share_volume_mm":7.36},{"session_number":6,"pct_with_listed_options":85,"median_share_volume_mm":3.51},{"session_number":7,"pct_with_listed_options":90,"median_share_volume_mm":2.65},{"session_number":8,"pct_with_listed_options":92.5,"median_share_volume_mm":3.35},{"session_number":9,"pct_with_listed_options":95,"median_share_volume_mm":2.51},{"session_number":10,"pct_with_listed_options":95,"median_share_volume_mm":2.3},{"session_number":11,"pct_with_listed_options":95,"median_share_volume_mm":2.29},{"session_number":12,"pct_with_listed_options":95,"median_share_volume_mm":2.65},{"session_number":13,"pct_with_listed_options":95,"median_share_volume_mm":2.54},{"session_number":14,"pct_with_listed_options":95,"median_share_volume_mm":1.9},{"session_number":15,"pct_with_listed_options":95,"median_share_volume_mm":2.41},{"session_number":16,"pct_with_listed_options":97.5,"median_share_volume_mm":2.42},{"session_number":17,"pct_with_listed_options":97.5,"median_share_volume_mm":2.46},{"session_number":18,"pct_with_listed_options":97.5,"median_share_volume_mm":2.74},{"session_number":19,"pct_with_listed_options":97.5,"median_share_volume_mm":2.14},{"session_number":20,"pct_with_listed_options":97.5,"median_share_volume_mm":2.29}],"shape":"ranking","sql":"WITH\nlistings AS (\n    SELECT\n        ticker,\n        min(listing_date) AS listed_on\n    FROM global_markets.stocks_ipos\n    WHERE listing_date >= '2024-01-01'\n      AND listing_date < today()\n      AND ticker NOT IN ('SPCX')\n    GROUP BY ticker\n),\ndebut AS (\n    SELECT\n        a.ticker                                                 AS symbol,\n        min(a.date)                                              AS debut_date,\n        argMin(toFloat64(a.close) * toFloat64(a.volume), a.date) AS debut_turnover\n    FROM global_markets.stocks_daily_aggs AS a\n    INNER JOIN listings AS l ON l.ticker = a.ticker\n    WHERE a.date >= '2024-01-01'\n      AND a.date >= l.listed_on\n    GROUP BY a.ticker\n),\ncohort AS (\n    SELECT\n        symbol,\n        debut_date\n    FROM debut\n    ORDER BY debut_turnover DESC\n    LIMIT 40\n),\nfirst_option AS (\n    SELECT\n        g.underlying_symbol AS symbol,\n        min(g.date)         AS option_date\n    FROM global_markets.options_greeks AS g\n    INNER JOIN cohort AS c ON c.symbol = g.underlying_symbol\n    WHERE g.date >= '2024-01-01'\n      AND g.volume > 0\n      AND g.date >= c.debut_date\n    GROUP BY g.underlying_symbol\n),\nramp AS (\n    SELECT\n        a.ticker                                                 AS symbol,\n        a.date                                                   AS d,\n        row_number() OVER (PARTITION BY a.ticker ORDER BY a.date) AS session_no,\n        toFloat64(a.volume) / 1e6                                AS shares_mm\n    FROM global_markets.stocks_daily_aggs AS a\n    INNER JOIN cohort AS c ON c.symbol = a.ticker\n    WHERE a.date >= '2024-01-01'\n      AND a.date >= c.debut_date\n)\nSELECT\n    r.session_no AS session_number,\n    round(100 * countIf(f.option_date >= toDate('2024-01-01') AND r.d >= f.option_date) / count(), 1) AS pct_with_listed_options,\n    round(quantileDeterministic(r.shares_mm, cityHash64(r.symbol)), 2)                               AS median_share_volume_mm\nFROM ramp AS r\nLEFT JOIN first_option AS f ON f.symbol = r.symbol\nWHERE r.session_no <= 20\nGROUP BY session_number\nORDER BY session_number","computed_at":"2026-09-09T01:23:35.617625+00:00","elapsed":20.607721187}