{"slug":"what-is-option-rho","qid":"rho_by_tenor","label":"Average SPY option rho by time to expiration, indexed to the front month","post_title":"What Is Option Rho? The Interest Rate Greek","post_url":"/blog/what-is-option-rho#q-rho_by_tenor","columns":["dte_bucket","call_rho_ratio","put_rho_ratio","contract_count"],"rows":[{"dte_bucket":"21-45d","call_rho_ratio":1,"put_rho_ratio":1,"contract_count":20031},{"dte_bucket":"46-90d","call_rho_ratio":2.12,"put_rho_ratio":2.05,"contract_count":13449},{"dte_bucket":"91-180d","call_rho_ratio":4.32,"put_rho_ratio":4.01,"contract_count":9212},{"dte_bucket":"181-365d","call_rho_ratio":8.39,"put_rho_ratio":7.7,"contract_count":5532},{"dte_bucket":"366-545d","call_rho_ratio":14.77,"put_rho_ratio":13.33,"contract_count":1639},{"dte_bucket":"546-760d","call_rho_ratio":20.26,"put_rho_ratio":18.12,"contract_count":1595}],"shape":"ranking","sql":"SELECT\n    b.dte_bucket                                AS dte_bucket,\n    round(b.call_rho / f.front_call_rho, 2)     AS call_rho_ratio,\n    round(b.put_rho  / f.front_put_rho,  2)     AS put_rho_ratio,\n    b.contract_count                            AS contract_count\nFROM\n(\n    SELECT\n        multiIf(days_to_expiry <=  45, '21-45d',\n                days_to_expiry <=  90, '46-90d',\n                days_to_expiry <= 180, '91-180d',\n                days_to_expiry <= 365, '181-365d',\n                days_to_expiry <= 545, '366-545d',\n                                       '546-760d')                     AS dte_bucket,\n        min(days_to_expiry)                                            AS sort_key,\n        avgIf(rho, startsWith(lower(toString(option_type)), 'c'))      AS call_rho,\n        avgIf(rho, startsWith(lower(toString(option_type)), 'p'))      AS put_rho,\n        count()                                                        AS contract_count\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date >= '2026-05-01'\n      AND date <  '2026-08-01'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 21 AND 760\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.03\n    GROUP BY dte_bucket\n    HAVING countIf(startsWith(lower(toString(option_type)), 'c')) > 0\n       AND countIf(startsWith(lower(toString(option_type)), 'p')) > 0\n) AS b\nCROSS JOIN\n(\n    SELECT\n        avgIf(rho, startsWith(lower(toString(option_type)), 'c')) AS front_call_rho,\n        avgIf(rho, startsWith(lower(toString(option_type)), 'p')) AS front_put_rho\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND date >= '2026-05-01'\n      AND date <  '2026-08-01'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 21 AND 45\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.03\n) AS f\nORDER BY b.sort_key","computed_at":"2026-08-07T16:31:04.493038+00:00","elapsed":0.004765004}