{"slug":"what-is-vanna-and-charm-exposure","qid":"charm_curve","label":"charm_curve","post_title":"what-is-vanna-and-charm-exposure","post_url":"/blog/lang/ja/what-is-vanna-and-charm-exposure#q-charm_curve","columns":["dte_band","itm_delta_drift","otm_delta_drift","pair_count"],"rows":[{"dte_band":"残り0-2日","itm_delta_drift":0.0399,"otm_delta_drift":-0.0455,"pair_count":124},{"dte_band":"残り3-5日","itm_delta_drift":0.0194,"otm_delta_drift":-0.0114,"pair_count":488},{"dte_band":"残り6-10日","itm_delta_drift":0.007,"otm_delta_drift":-0.0149,"pair_count":1067},{"dte_band":"残り11-20日","itm_delta_drift":0.0038,"otm_delta_drift":-0.0137,"pair_count":847},{"dte_band":"残り21-45日","itm_delta_drift":0.0004,"otm_delta_drift":-0.0077,"pair_count":1760},{"dte_band":"残り46-90日","itm_delta_drift":-0.0008,"otm_delta_drift":-0.0039,"pair_count":1131}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        ticker,\n        expiration_date,\n        strike_price,\n        date,\n        days_to_expiry,\n        toFloat64(delta)                                          AS delta,\n        multiIf(toFloat64(implied_volatility) > 1.5,\n                toFloat64(implied_volatility),\n                toFloat64(implied_volatility) * 100)              AS iv_pt,\n        toFloat64(underlying_close)                               AS spot,\n        toFloat64(strike_price) / toFloat64(underlying_close) - 1 AS moneyness\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND lower(toString(option_type)) LIKE 'c%'\n      AND date >= '2025-09-01'\n      AND date <  '2026-09-01'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry <= 90\n),\nsteps AS\n(\n    SELECT\n        ticker,\n        date,\n        moneyness,\n        days_to_expiry,\n        delta - lagInFrame(delta) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date)        AS delta_change,\n        abs(iv_pt - lagInFrame(iv_pt) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date))   AS iv_move_pt,\n        abs(spot / lagInFrame(spot) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date) - 1) AS spot_move,\n        dateDiff('day', lagInFrame(date) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date), date) AS gap_days\n    FROM daily\n)\nSELECT\n    multiIf(days_to_expiry <=  2, '残り0-2日',\n            days_to_expiry <=  5, '残り3-5日',\n            days_to_expiry <= 10, '残り6-10日',\n            days_to_expiry <= 20, '残り11-20日',\n            days_to_expiry <= 45, '残り21-45日',\n                                  '残り46-90日') AS dte_band,\n    round(quantileDeterministicIf(0.5)(delta_change, cityHash64(ticker, date), moneyness < -0.005), 4) AS itm_delta_drift,\n    round(quantileDeterministicIf(0.5)(delta_change, cityHash64(ticker, date), moneyness >  0.005), 4) AS otm_delta_drift,\n    count()                                                                                           AS pair_count\nFROM steps\nWHERE gap_days = 1\n  AND spot_move < 0.002\n  AND iv_move_pt < 0.5\n  AND abs(moneyness) BETWEEN 0.005 AND 0.03\nGROUP BY dte_band\nHAVING countIf(moneyness < -0.005) >= 10\n   AND countIf(moneyness >  0.005) >= 10\nORDER BY min(days_to_expiry)","computed_at":"2026-09-27T15:20:15.418647+00:00","elapsed":0.074330481}