release_ladder
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-25, from figma-lockup-expiration.
| label | volume_ratio | five_session_pct | twenty_session_pct |
|---|---|---|---|
| Sep 5 2025 employee release | 2.59 | -2.73 | -2.79 |
| Nov 7 2025 IPO lockup ends | 3.6 | -16.2 | -18.12 |
| Feb 20 2026 tranche 2 | 2.56 | 13.65 | -8.24 |
| May 18 2026 tranche 3 | 1.96 | -4.19 | -21.55 |
| Aug 7 2026 final tranche | 1.29 | 6.05 | 0.63 |
- Rows × columns
- 5 × 4
- 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 |
|---|---|---|---|
label |
text | 5 distinct values | |
volume_ratio |
number | 1.29 to 3.6 | count |
five_session_pct |
number | -16.2 to 13.65 | percent |
twenty_session_pct |
number | -21.55 to 0.63 | 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 bars AS
(
SELECT
date,
volume,
close,
avg(volume) OVER (ORDER BY date ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS avg_volume_20,
row_number() OVER (ORDER BY date) AS seq
FROM
(
SELECT
date,
argMax(toFloat64(volume), _ingest_time) AS volume,
argMax(toFloat64(close), _ingest_time) AS close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'FIG'
AND date >= '2025-07-31'
GROUP BY date
)
),
releases AS
(
SELECT
tupleElement(r, 1) AS label,
toDate(tupleElement(r, 2)) AS release_date,
toDate(tupleElement(r, 3)) AS base_date
FROM
(
SELECT arrayJoin([
('Sep 5 2025 employee release', '2025-09-05', '2025-09-04'),
('Nov 7 2025 IPO lockup ends', '2025-11-07', '2025-11-06'),
('Feb 20 2026 tranche 2', '2026-02-20', '2026-02-19'),
('May 18 2026 tranche 3', '2026-05-18', '2026-05-15'),
('Aug 7 2026 final tranche', '2026-08-07', '2026-08-06')
]) AS r
)
),
keyed AS
(
SELECT
rel.label AS label,
rel.release_date AS release_date,
rel.base_date AS base_date,
b.seq AS release_seq
FROM releases AS rel
INNER JOIN bars AS b ON b.date = rel.release_date
)
SELECT
k.label AS label,
round(anyIf(b.volume / b.avg_volume_20, b.date = k.release_date), 2) AS volume_ratio,
round(100 * (anyIf(b.close, toInt32(b.seq) = toInt32(k.release_seq) + 5) / anyIf(b.close, b.date = k.base_date) - 1), 2) AS five_session_pct,
round(100 * (anyIf(b.close, toInt32(b.seq) = toInt32(k.release_seq) + 20) / anyIf(b.close, b.date = k.base_date) - 1), 2) AS twenty_session_pct
FROM keyed AS k
CROSS JOIN bars AS b
GROUP BY label, k.release_seq
ORDER BY k.release_seq
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.