{"slug":"box-spreads-and-the-implied-loan-rate","qid":"itm_liquidity","label":"Where SPY option volume sits, by strike distance from spot (June 2026)","post_title":"Box Spread Options and the Implied Loan Rate","post_url":"/blog/box-spreads-and-the-implied-loan-rate#q-itm_liquidity","columns":["moneyness_bucket","contracts_pct","turnover_pct"],"rows":[{"moneyness_bucket":"more than 15% below spot","contracts_pct":23.06,"turnover_pct":25.03},{"moneyness_bucket":"5% to 15% below spot","contracts_pct":21.91,"turnover_pct":17.56},{"moneyness_bucket":"within 5% of spot","contracts_pct":34.99,"turnover_pct":43},{"moneyness_bucket":"5% to 15% above spot","contracts_pct":12.67,"turnover_pct":10.8},{"moneyness_bucket":"more than 15% above spot","contracts_pct":7.37,"turnover_pct":3.61}],"shape":"ranking","sql":"WITH\n    chain AS\n    (\n        SELECT\n            multiIf(\n                toFloat64(strike_price) / toFloat64(underlying_close) < 0.85, 1,\n                toFloat64(strike_price) / toFloat64(underlying_close) < 0.95, 2,\n                toFloat64(strike_price) / toFloat64(underlying_close) < 1.05, 3,\n                toFloat64(strike_price) / toFloat64(underlying_close) < 1.15, 4,\n                5)                          AS bucket_key,\n            multiIf(\n                bucket_key = 1, 'more than 15% below spot',\n                bucket_key = 2, '5% to 15% below spot',\n                bucket_key = 3, 'within 5% of spot',\n                bucket_key = 4, '5% to 15% above spot',\n                'more than 15% above spot') AS moneyness_bucket,\n            volume\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n          AND date >= '2026-06-01'\n          AND date <  '2026-07-01'\n          AND iv_converged = 1\n          AND volume > 0\n          AND days_to_expiry BETWEEN 30 AND 400\n    ),\n    totals AS\n    (\n        SELECT\n            sum(volume) AS all_volume,\n            count()     AS all_rows\n        FROM chain\n    )\nSELECT\n    moneyness_bucket,\n    round(100 * count() / any(all_rows), 2)       AS contracts_pct,\n    round(100 * sum(volume) / any(all_volume), 2) AS turnover_pct\nFROM chain\nCROSS JOIN totals\nGROUP BY bucket_key, moneyness_bucket\nORDER BY bucket_key","computed_at":"2026-08-06T15:52:50.600702+00:00","elapsed":0.003476831}