{"slug":"dividend-capture-strategy","qid":"drop_distribution","label":"Ex-dividend openings sorted by decline as a multiple of the dividend: US quarterly payers, Jan 2024 to Jun 2026","post_title":"Does Dividend Capture Actually Work?","post_url":"/blog/dividend-capture-strategy#q-drop_distribution","columns":["drop_bucket","ex_dates","share_pct"],"rows":[{"drop_bucket":"opened higher","ex_dates":6627,"share_pct":20.8},{"drop_bucket":"fell under half","ex_dates":4360,"share_pct":13.7},{"drop_bucket":"fell half to full","ex_dates":8217,"share_pct":25.8},{"drop_bucket":"fell 1 to 1.5x","ex_dates":5492,"share_pct":17.3},{"drop_bucket":"fell over 1.5x","ex_dates":7114,"share_pct":22.4}],"shape":"ranking","sql":"WITH divs AS (\n    SELECT ticker, ex_dividend_date AS d, max(cash_amount) AS div_amount\n    FROM global_markets.stocks_dividends\n    WHERE distribution_type = 'recurring'\n      AND frequency = 4\n      AND cash_amount > 0\n      AND ex_dividend_date BETWEEN toDate('2024-01-01') AND toDate('2026-06-30')\n    GROUP BY ticker, d\n),\npx AS (\n    SELECT ticker,\n           date,\n           toFloat64(open) AS day_open,\n           lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date\n                                              ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n    FROM global_markets.stocks_daily_aggs\n    WHERE date BETWEEN toDate('2023-12-01') AND toDate('2026-06-30')\n      AND open > 0 AND close > 0\n),\nev AS (\n    SELECT (px.prev_close - px.day_open) / divs.div_amount AS ratio\n    FROM px\n    INNER JOIN divs ON px.ticker = divs.ticker AND px.date = divs.d\n    WHERE px.prev_close >= 5\n      AND divs.div_amount / px.prev_close BETWEEN 0.001 AND 0.05\n)\nSELECT multiIf(ratio < 0, 'opened higher',\n               ratio < 0.5, 'fell under half',\n               ratio < 1, 'fell half to full',\n               ratio < 1.5, 'fell 1 to 1.5x',\n               'fell over 1.5x') AS drop_bucket,\n       count() AS ex_dates,\n       round(100 * count() / (SELECT count() FROM ev), 1) AS share_pct\nFROM ev\nGROUP BY drop_bucket\nORDER BY multiIf(drop_bucket = 'opened higher', 0,\n                 drop_bucket = 'fell under half', 1,\n                 drop_bucket = 'fell half to full', 2,\n                 drop_bucket = 'fell 1 to 1.5x', 3, 4)","computed_at":"2026-08-01T02:21:38.189294+00:00","elapsed":0.004411608}