STRASMORE/EXPLORE 2,309 QUERIES

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.

as of table 5×6read in context →
open_vs_lunch — 5 rows by 6 columns, computed from US exchange, SIP and OPRA data.
tickeropening_share_pctlunch_share_pctclosing_share_pctopen_to_lunch_ratiopov_lunch_fill_k_shares
MSFT185.414.53.4145
KO15.64.819.73.356
NVDA17.55.512.43.2586
AAPL16.35.515.73210
SPY11.44.9222.3197
Rows × columns
5 × 6
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 open_vs_lunch, derived from the stored result.
ColumnTypeRangeNotes
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 →