open_vs_lunch
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-17, from twap-vs-vwap-vs-pov-orders.
| ticker | opening_share_pct | lunch_share_pct | closing_share_pct | open_to_lunch_ratio | pov_lunch_fill_k_shares |
|---|---|---|---|---|---|
| MSFT | 18 | 5.4 | 14.5 | 3.4 | 145 |
| KO | 15.6 | 4.8 | 19.7 | 3.3 | 56 |
| NVDA | 17.5 | 5.5 | 12.4 | 3.2 | 586 |
| AAPL | 16.3 | 5.5 | 15.7 | 3 | 210 |
| SPY | 11.4 | 4.9 | 22 | 2.3 | 197 |
- Rows × columns
- 5 × 6
- 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 |
|---|---|---|---|
ticker |
text | 5 distinct values (AAPL, KO, MSFT…) | |
opening_share_pct |
number | 11.4 to 18 | percent |
lunch_share_pct |
number | 4.8 to 5.5 | percent |
closing_share_pct |
number | 12.4 to 22 | percent |
open_to_lunch_ratio |
number | 2.3 to 3.4 | US dollars |
pov_lunch_fill_k_shares |
number | 56 to 586 | count |
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.
the exact SQL behind every number
WITH bars AS
(
SELECT
ticker,
toTimeZone(window_start, 'America/New_York') AS et,
toHour(et) * 60 + toMinute(et) AS minute_of_day,
toDate(et) AS et_date,
toFloat64(volume) AS shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO')
AND window_start >= toDateTime('2026-06-01 00:00:00', 'UTC')
AND window_start < toDateTime('2026-09-01 00:00:00', 'UTC')
)
SELECT
ticker,
round(100 * sumIf(shares, minute_of_day < 600) / sum(shares), 1) AS opening_share_pct,
round(100 * sumIf(shares, minute_of_day >= 750 AND minute_of_day < 780) / sum(shares), 1) AS lunch_share_pct,
round(100 * sumIf(shares, minute_of_day >= 930) / sum(shares), 1) AS closing_share_pct,
round(sumIf(shares, minute_of_day < 600)
/ sumIf(shares, minute_of_day >= 750 AND minute_of_day < 780), 1) AS open_to_lunch_ratio,
toUInt32(round(0.10 * sumIf(shares, minute_of_day >= 750 AND minute_of_day < 780)
/ countDistinct(et_date) / 1e3)) AS pov_lunch_fill_k_shares
FROM bars
WHERE minute_of_day >= 570
AND minute_of_day < 960
GROUP BY ticker
HAVING sumIf(shares, minute_of_day >= 750 AND minute_of_day < 780) > 0
ORDER BY open_to_lunch_ratio DESC
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysistwap-vs-vwap-vs-pov-orders
volume_curve
series 13×4
→
lunch_pov
series 13×4
→
curve_dispersion
series 13×4
→
The 2s10s spread, every print of the half
table 124×2
→
The 2s10s spread, every print of the half
table 124×2
→
Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s print
table 100×7
→
See all 2,309 queries →