rejection_by_excess
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-10-01, from buy-side-vs-sell-side-liquidity.
| excess_above_high | sessions | closed_back_below | rejection_rate_pct |
|---|---|---|---|
| 0.00-0.10% | 122 | 104 | 85.2 |
| 0.10-0.25% | 168 | 101 | 60.1 |
| 0.25-0.50% | 199 | 50 | 25.1 |
| 0.50-1.00% | 150 | 12 | 8 |
| over 1.00% | 43 | 5 | 11.6 |
- 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 |
|---|---|---|---|
excess_above_high |
text | 5 distinct values (0.00-0.10%, 0.10-0.25%, 0.25-0.50%…) | |
sessions |
number | 43 to 199 | |
closed_back_below |
number | 5 to 104 | |
rejection_rate_pct |
number | 8 to 85.2 | 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,
max(toFloat64(high)) AS day_high,
max(toFloat64(close)) AS day_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2015-01-01'
AND date < '2026-10-01'
GROUP BY date
),
flagged AS
(
SELECT
day_high,
day_close,
max(day_high) OVER (ORDER BY date ASC ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS prior_high
FROM bars
),
cleared AS
(
SELECT
round(100 * (day_high / prior_high - 1), 4) AS excess_pct,
day_close < prior_high AS below_at_close
FROM flagged
WHERE prior_high > 0
AND day_high > prior_high
)
SELECT
multiIf(excess_pct < 0.10, '0.00-0.10%',
excess_pct < 0.25, '0.10-0.25%',
excess_pct < 0.50, '0.25-0.50%',
excess_pct < 1.00, '0.50-1.00%',
'over 1.00%') AS excess_above_high,
count() AS sessions,
countIf(below_at_close) AS closed_back_below,
round(100 * countIf(below_at_close) / count(), 1) AS rejection_rate_pct
FROM cleared
GROUP BY excess_above_high
ORDER BY min(excess_pct)
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.