{"slug":"what-is-vanna-and-charm-exposure","qid":"vanna_curve","label":"vanna_curve","post_title":"what-is-vanna-and-charm-exposure","post_url":"/blog/lang/ja/what-is-vanna-and-charm-exposure#q-vanna_curve","columns":["moneyness_band","delta_shift_per_vol_point","pair_count"],"rows":[{"moneyness_band":"ITM 5-12%","delta_shift_per_vol_point":-0.0093,"pair_count":646},{"moneyness_band":"ITM 2-5%","delta_shift_per_vol_point":-0.0122,"pair_count":1327},{"moneyness_band":"ITM 0.5-2%","delta_shift_per_vol_point":-0.0083,"pair_count":1219},{"moneyness_band":"ATM 0.5%以内","delta_shift_per_vol_point":-0.0016,"pair_count":813},{"moneyness_band":"OTM 0.5-2%","delta_shift_per_vol_point":0.0069,"pair_count":1157},{"moneyness_band":"OTM 2-5%","delta_shift_per_vol_point":0.0188,"pair_count":1872},{"moneyness_band":"OTM 5-12%","delta_shift_per_vol_point":0.0116,"pair_count":1166}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        ticker,\n        expiration_date,\n        strike_price,\n        date,\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 BETWEEN 20 AND 45\n),\nsteps AS\n(\n    SELECT\n        ticker,\n        date,\n        moneyness,\n        delta - lagInFrame(delta) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date)     AS delta_change,\n        iv_pt - lagInFrame(iv_pt) OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date)     AS iv_change_pt,\n        spot  / lagInFrame(spot)  OVER (PARTITION BY ticker, expiration_date, strike_price ORDER BY date) - 1 AS spot_change,\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(moneyness < -0.05,  'ITM 5-12%',\n            moneyness < -0.02,  'ITM 2-5%',\n            moneyness < -0.005, 'ITM 0.5-2%',\n            moneyness <  0.005, 'ATM 0.5%以内',\n            moneyness <  0.02,  'OTM 0.5-2%',\n            moneyness <  0.05,  'OTM 2-5%',\n                                'OTM 5-12%')                       AS moneyness_band,\n    round(quantileDeterministic(0.5)(delta_change / iv_change_pt,\n                                     cityHash64(ticker, date)), 4)  AS delta_shift_per_vol_point,\n    count()                                                        AS pair_count\nFROM steps\nWHERE gap_days = 1\n  AND abs(spot_change) < 0.002\n  AND abs(iv_change_pt) >= 0.4\n  AND abs(moneyness) <= 0.12\nGROUP BY moneyness_band\nHAVING count() >= 10\nORDER BY min(moneyness)","computed_at":"2026-09-27T15:20:15.110062+00:00","elapsed":0.013627297}