{"slug":"market-recap-2026-06-30","qid":"options_flow","label":"One row for the whole options day: volume, same-day expiry, SPY's put/call skew by moneyness, the holiday-shifted week","post_title":"Market Recap: June 30, 2026, The Day in Numbers","post_url":"/blog/market-recap-2026-06-30#q-options_flow","columns":["option_prints_m","contracts_m","call_pct_of_volume","same_day_expiry_pct","thu_jul2_expiry_contracts_m","fri_jul3_expiry_prints","spy_contracts_m","qqq_contracts_m","spy_put_call_ratio","spy_0dte_otm_calls_m","spy_0dte_itm_calls_m","spy_0dte_otm_puts_m","spy_0dte_itm_puts_m","top_contract_underlying","top_contract_strike","top_contract_type","top_contract_expiry","top_contract_volume","top_contract_avg_price","top_strike_minus_spy_close"],"rows":[{"option_prints_m":10.06,"contracts_m":61.95,"call_pct_of_volume":57.3,"same_day_expiry_pct":28,"thu_jul2_expiry_contracts_m":10.52,"fri_jul3_expiry_prints":0,"spy_contracts_m":12.04,"qqq_contracts_m":7.1,"spy_put_call_ratio":1.09,"spy_0dte_otm_calls_m":2.28,"spy_0dte_itm_calls_m":1.77,"spy_0dte_otm_puts_m":3.33,"spy_0dte_itm_puts_m":0.63,"top_contract_underlying":"SPY","top_contract_strike":747,"top_contract_type":"C","top_contract_expiry":"2026-06-30","top_contract_volume":821361,"top_contract_avg_price":0.641,"top_strike_minus_spy_close":0.68}],"shape":"scalar","sql":"WITH\n    (\n        SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),\n                any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),\n                sum(size), count(), round(avg(toFloat64(price)), 3))\n        FROM global_markets.options_trades\n        WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'\n        GROUP BY ticker\n        ORDER BY sum(size) DESC\n        LIMIT 1\n    ) AS top_contract,\n    (\n        SELECT round(toFloat64(argMax(close, window_start)), 2)\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY' AND window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'\n    ) AS spy_close\nSELECT\n    round(count() / 1e6, 2) AS option_prints_m,\n    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,\n    round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,\n    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260630') / sum(size), 1) AS same_day_expiry_pct,\n    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,\n    countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,\n    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'))\n        / toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C')), 2) AS spy_put_call_ratio,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'\n        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) > spy_close)) / 1e6, 2) AS spy_0dte_otm_calls_m,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'\n        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) <= spy_close)) / 1e6, 2) AS spy_0dte_itm_calls_m,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'\n        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) < spy_close)) / 1e6, 2) AS spy_0dte_otm_puts_m,\n    round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'\n        AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) >= spy_close)) / 1e6, 2) AS spy_0dte_itm_puts_m,\n    top_contract.1 AS top_contract_underlying,\n    top_contract.2 AS top_contract_strike,\n    top_contract.3 AS top_contract_type,\n    top_contract.4 AS top_contract_expiry,\n    top_contract.5 AS top_contract_volume,\n    round(top_contract.7, 3) AS top_contract_avg_price,\n    round(top_contract.2 - spy_close, 2) AS top_strike_minus_spy_close\nFROM global_markets.options_trades\nWHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'","computed_at":"2026-07-26T05:43:23.807684+00:00","elapsed":5.382248904}