{"slug":"what-does-dte-mean-in-options","qid":"atm_decay","label":"The price of time: at-the-money SPY call price by DTE, midday July 8, 2026","post_title":"DTE Meaning in Options: Days to Expiration","post_url":"/blog/what-does-dte-mean-in-options#q-atm_decay","columns":["days_to_expiration","atm_call_price","premium_per_remaining_day"],"rows":[{"days_to_expiration":"0 DTE","atm_call_price":1.65,"premium_per_remaining_day":1.65},{"days_to_expiration":"1 DTE","atm_call_price":2.92,"premium_per_remaining_day":2.92},{"days_to_expiration":"2 DTE","atm_call_price":3.84,"premium_per_remaining_day":1.92},{"days_to_expiration":"7 DTE","atm_call_price":6.09,"premium_per_remaining_day":0.87},{"days_to_expiration":"14 DTE","atm_call_price":9.25,"premium_per_remaining_day":0.66},{"days_to_expiration":"30 DTE","atm_call_price":13.85,"premium_per_remaining_day":0.46},{"days_to_expiration":"54 DTE","atm_call_price":18.84,"premium_per_remaining_day":0.35},{"days_to_expiration":"84 DTE","atm_call_price":24.08,"premium_per_remaining_day":0.29},{"days_to_expiration":"176 DTE","atm_call_price":41.87,"premium_per_remaining_day":0.24},{"days_to_expiration":"344 DTE","atm_call_price":68.34,"premium_per_remaining_day":0.2},{"days_to_expiration":"891 DTE","atm_call_price":125.64,"premium_per_remaining_day":0.14}],"shape":"series","sql":"WITH spot AS (\n    SELECT avg(close) AS px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2026-07-08 11:30:00', 'America/New_York')\n      AND window_start < toDateTime('2026-07-08 13:00:00', 'America/New_York')\n),\nchain AS (\n    SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,\n           toFloat64(substring(ticker, length(ticker) - 7, 8)) / 1000 AS strike,\n           avg(close) AS opt_px\n    FROM global_markets.options_minute_aggs\n    WHERE ticker LIKE 'O:SPY2%'\n      AND substring(ticker, length(ticker) - 8, 1) = 'C'\n      AND window_start >= toDateTime('2026-07-08 11:30:00', 'America/New_York')\n      AND window_start < toDateTime('2026-07-08 13:00:00', 'America/New_York')\n    GROUP BY expiry, strike\n    HAVING sum(volume) > 0\n       AND abs(strike - (SELECT px FROM spot)) <= 3\n       AND dateDiff('day', toDate('2026-07-08'), expiry) >= 0\n),\natm AS (\n    SELECT dateDiff('day', toDate('2026-07-08'), expiry) AS dte,\n           argMin(opt_px, (abs(strike - (SELECT px FROM spot)), strike)) AS call_price\n    FROM chain\n    GROUP BY expiry\n),\ntargets AS (\n    SELECT arrayJoin([0, 1, 2, 7, 14, 30, 60, 90, 180, 365, 730]) AS target\n),\nnearest AS (\n    SELECT argMin(dte, (abs(dte - target), dte)) AS pick_dte,\n           argMin(call_price, (abs(dte - target), dte)) AS pick_px\n    FROM targets CROSS JOIN atm\n    GROUP BY target\n)\nSELECT concat(toString(pick_dte), ' DTE') AS days_to_expiration,\n       round(pick_px, 2) AS atm_call_price,\n       round(pick_px / greatest(pick_dte, 1), 2) AS premium_per_remaining_day\nFROM nearest\nGROUP BY days_to_expiration, atm_call_price, premium_per_remaining_day, pick_dte\nORDER BY pick_dte","computed_at":"2026-08-11T14:10:56.898573+00:00","elapsed":0.140214854}