Strasmore Research
Learn Matt ConnorBy Matt Connor

Why stocks drop on the ex-dividend date

Why do stocks drop on the ex-dividend date? The drop is a mechanical price adjustment. See how far real payers actually opened below the prior close.

Stocks drop on the ex-dividend date as a scheduled adjustment rather than a sell-off. A buyer on the ex-date does not receive the upcoming payment, so the share changes hands carrying one fewer dividend than it did the afternoon before, and the exchange marks the previous session's close down by the dividend amount for charting and order-price purposes. Where the stock actually opens is a separate question, and the panels below measure it across five years of ex-dates in a group of large dividend payers.

Why stocks drop on the ex-dividend date: the adjustment

A dividend runs through four dates. The declaration date is when the board announces the payment. The ex-dividend date is the first session on which the stock trades without the right to it. The record date is when the company reads its shareholder list, and the pay date is when the cash lands. Our ex-dividend date guide walks the whole sequence, and record date versus ex-dividend date separates the two that get confused most often.

Before anyone trades on the ex-date, the exchange performs two mechanical adjustments:

  • The prior session's closing price is marked down by the dividend for reference purposes. Charts, percentage-change fields, moving averages, and the reference price quoted against the opening auction all use the adjusted number.
  • Open orders resting below the market are reduced by the dividend amount.

Neither adjustment is a trade. No shares change hands and no volume prints. The stock starts the day measured from a lower reference point, and a price series that ignores the adjustment will show a phantom decline every quarter.

Do exchanges lower your open orders on the ex-date?

Yes, for the order types that sit below the current price. Exchanges reduce open buy limit orders and open sell stop orders (sell stop limit orders included) by the dividend amount on the ex-date. A buy limit at $50.00 ahead of a $0.50 dividend opens the ex-date as a buy limit at $49.50. Orders resting above the market, a sell limit or a buy stop, are left alone. The reduction keeps a resting order roughly the same distance from the market that its owner chose the day before, and it is expressed in whole cents, since US equities quote in cents.

DNR, short for Do Not Reduce, is the instruction that exempts an order. Attach it and the $50.00 buy limit stays at $50.00 through the ex-date. Not every retail platform exposes DNR on the order ticket; where it exists it usually sits beside time in force as a checkbox or a special-instruction dropdown. A matching instruction, DNI (Do Not Increase), covers the share-count side of the plumbing after stock dividends and splits, which due bills and stock splits takes apart.

How far does the price actually drop on the ex-date?

The panel below takes a group of large dividend payers and every ex-date from 2021 through 2025. None of them split its stock inside that window, so raw prices and raw cash amounts stay directly comparable. For each ex-date it measures the prior session's close against the ex-date open, then totals the drop against the total dividend paid.

QueryOpening drop per dollar of dividend paid, ex-dates 2021 to 2025
The exact SQL behind every number
WITH
prices AS
(
    SELECT
        ticker,
        date,
        open_px,
        any(close_px) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prior_close
    FROM
    (
        SELECT
            ticker,
            date,
            toFloat64(max(open))  AS open_px,
            toFloat64(max(close)) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
          AND date >= '2020-12-01'
          AND date <  '2026-01-01'
        GROUP BY ticker, date
    )
),
ex_days AS
(
    SELECT
        ticker,
        ex_dividend_date            AS ex_date,
        toFloat64(max(cash_amount)) AS dividend
    FROM global_markets.stocks_dividends
    WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
      AND ex_dividend_date >= '2021-01-01'
      AND ex_dividend_date <  '2026-01-01'
      AND cash_amount > 0
    GROUP BY ticker, ex_dividend_date
)
SELECT
    e.ticker                                                   AS ticker,
    count()                                                    AS payment_count,
    round(avg(e.dividend), 4)                                  AS avg_dividend_usd,
    round(sum(p.prior_close - p.open_px) / sum(e.dividend), 2) AS drop_per_dollar_paid
FROM ex_days AS e
INNER JOIN prices AS p ON p.ticker = e.ticker AND p.date = e.ex_date
WHERE p.prior_close > 0
GROUP BY e.ticker
ORDER BY drop_per_dollar_paid DESC
Run this yourself

Read the last column as dollars of opening drop per dollar of dividend paid. Across the 10 names the figure runs from 0.28 at the bottom of the panel to 1.23 at the top, the top belonging to ABBV over 20 payments. A value of 1.00 would mean the stock opened the full dividend under the prior close on average.

Pooling every payment by calendar year shows how much the answer moves with the sample you happen to pick.

QueryPooled opening drop per dollar paid, by calendar year
The exact SQL behind every number
WITH
prices AS
(
    SELECT
        ticker,
        date,
        open_px,
        any(close_px) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prior_close
    FROM
    (
        SELECT
            ticker,
            date,
            toFloat64(max(open))  AS open_px,
            toFloat64(max(close)) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
          AND date >= '2020-12-01'
          AND date <  '2026-01-01'
        GROUP BY ticker, date
    )
),
ex_days AS
(
    SELECT
        ticker,
        ex_dividend_date            AS ex_date,
        toFloat64(max(cash_amount)) AS dividend
    FROM global_markets.stocks_dividends
    WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
      AND ex_dividend_date >= '2021-01-01'
      AND ex_dividend_date <  '2026-01-01'
      AND cash_amount > 0
    GROUP BY ticker, ex_dividend_date
)
SELECT
    toString(toYear(e.ex_date))                                AS year,
    count()                                                    AS payment_count,
    round(sum(p.prior_close - p.open_px) / sum(e.dividend), 2) AS drop_per_dollar_paid
FROM ex_days AS e
INNER JOIN prices AS p ON p.ticker = e.ticker AND p.date = e.ex_date
WHERE p.prior_close > 0
GROUP BY year
ORDER BY year
Run this yourself

The pooled figure came out at 0.85 across 40 payments in 2021, and 0.81 across 40 payments in 2025. Any confident claim that the ex-date drop is a fixed share of the dividend is one draw from a distribution this wide.

Why one ex-date tells you nothing

Coca-Cola, KO, has paid on a steady quarterly schedule for decades. Plotting its dividend per share against the realised opening drop at each ex-date puts the measurement problem in a single chart.

QueryKO: dividend per share against the realised opening drop, every ex-date 2021 to 2025
The exact SQL behind every number
WITH
prices AS
(
    SELECT
        date,
        open_px,
        any(close_px) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prior_close
    FROM
    (
        SELECT
            date,
            toFloat64(max(open))  AS open_px,
            toFloat64(max(close)) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'KO'
          AND date >= '2020-12-01'
          AND date <  '2026-01-01'
        GROUP BY date
    )
),
ex_days AS
(
    SELECT
        ex_dividend_date            AS ex_date,
        toFloat64(max(cash_amount)) AS dividend
    FROM global_markets.stocks_dividends
    WHERE ticker = 'KO'
      AND ex_dividend_date >= '2021-01-01'
      AND ex_dividend_date <  '2026-01-01'
      AND cash_amount > 0
    GROUP BY ex_dividend_date
)
SELECT
    toString(e.ex_date)                 AS ex_date,
    concat(monthName(e.ex_date), ' ', toString(toDayOfMonth(e.ex_date)), ', ', toString(toYear(e.ex_date))) AS ex_date_label,
    round(e.dividend, 4)                AS dividend_per_share,
    round(p.prior_close - p.open_px, 2) AS drop_at_open
FROM ex_days AS e
INNER JOIN prices AS p ON p.date = e.ex_date
WHERE p.prior_close > 0
ORDER BY e.ex_date
Run this yourself

The dividend line is close to flat, stepping up once a year. The drop line swings around it, with ex-dates that opened far under the adjustment and ex-dates that opened above the prior close outright. KO paid $0.42 per share on March 12, 2021 and $0.51 on December 1, 2025, over the 20 ex-dates in the window.

The single-day picture is unreadable at this scale. A quarterly dividend on a large-cap payer is worth well under one percent of the share price, and ordinary overnight moves cover similar ground. The panel below sets the two against each other in basis points, one basis point being a hundredth of a percentage point, and counts how often an ordinary overnight move on its own was larger than an entire quarterly payment.

QueryQuarterly dividend against ordinary overnight moves, 2021 to 2025
The exact SQL behind every number
WITH
prices AS
(
    SELECT
        ticker,
        date,
        open_px,
        any(close_px) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prior_close
    FROM
    (
        SELECT
            ticker,
            date,
            toFloat64(max(open))  AS open_px,
            toFloat64(max(close)) AS close_px
        FROM global_markets.stocks_daily_aggs
        WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
          AND date >= '2020-12-01'
          AND date <  '2026-01-01'
        GROUP BY ticker, date
    )
),
ex_days AS
(
    SELECT
        ticker,
        ex_dividend_date            AS ex_date,
        toFloat64(max(cash_amount)) AS dividend
    FROM global_markets.stocks_dividends
    WHERE ticker IN ('KO','PG','JNJ','PEP','XOM','CVX','MCD','HD','VZ','ABBV')
      AND ex_dividend_date >= '2021-01-01'
      AND ex_dividend_date <  '2026-01-01'
      AND cash_amount > 0
    GROUP BY ticker, ex_dividend_date
),
div_size AS
(
    SELECT
        e.ticker                                AS ticker,
        avg(e.dividend / p.prior_close) * 10000 AS dividend_bps
    FROM ex_days AS e
    INNER JOIN prices AS p ON p.ticker = e.ticker AND p.date = e.ex_date
    WHERE p.prior_close > 0
    GROUP BY e.ticker
),
ordinary AS
(
    SELECT
        ticker,
        date,
        abs(open_px / prior_close - 1) * 10000 AS abs_gap_bps
    FROM prices
    WHERE prior_close > 0
      AND date >= '2021-01-01'
      AND (ticker, date) NOT IN (SELECT ticker, ex_date FROM ex_days)
)
SELECT
    o.ticker                                                              AS ticker,
    round(max(d.dividend_bps), 1)                                         AS dividend_bps,
    round(quantileDeterministic(0.5)(o.abs_gap_bps, toUInt32(o.date)), 1) AS median_gap_bps,
    round(100 * countIf(o.abs_gap_bps > d.dividend_bps) / count(), 1)     AS sessions_over_dividend_pct
FROM ordinary AS o
INNER JOIN div_size AS d ON d.ticker = o.ticker
GROUP BY o.ticker
ORDER BY sessions_over_dividend_pct DESC
Run this yourself

The median ordinary overnight move for HD measured 40.5 basis points against a quarterly dividend worth 60.7, and on 33.2 percent of ordinary sessions the overnight move alone came out larger than the whole payment. At the other end of the panel, VZ cleared its dividend that way on 3.2 percent of sessions. One ex-date is a single sample of that distribution with a dividend layered underneath it.

Why the drop is usually smaller than the dividend

Two mechanisms hold the observed drop under the full payment.

The first is tax. A dollar of dividend and a dollar of share price are not worth the same after tax to a taxable holder: the dividend is taxed in the year it arrives, while an unrealised gain is taxed only on sale, at whatever rate applies then. If the marginal holder values a dollar of dividend at one minus the dividend rate, and a dollar of price at one minus the capital gains rate, indifference sits at a drop of the dividend times (1 - td) / (1 - tg). Take an illustrative pair of rates rather than current law. A holder taxed 20 percent on a qualified dividend and 15 percent on a long-term gain values the payment at 0.80 / 0.85, roughly 94 cents on the dollar, which supports a drop near $0.47 on a $0.50 dividend. Move that same holder to 37 percent and 20 percent and the ratio becomes 0.63 / 0.80, near 79 cents, or about $0.39 of drop on the identical payment. Which rates apply turns on holding period and account type, and the qualified dividend holding period sets out the test. Rates change over time; the shape of the arithmetic does not.

The second is the tick. Prices trade in whole cents, and a dividend of $0.235 has no exact expression in an opening print.

Can you buy the day before to collect the dividend?

Run the arithmetic. A stock closes at $50.00 the afternoon before its ex-date with a $0.50 dividend attached. Buy 100 shares at that close and you hold $5,000 of stock. The next morning the adjusted reference close is $49.50, the 100 shares are marked near $4,950, and you hold a $50 dividend receivable that settles on the pay date weeks later. Pre-tax, both sides of the ex-date leave you with $5,000. You converted $50 of share price into $50 of cash and, in a taxable account, a tax event.

Buying the day before an ex-date decides when you take income. Whether the open lands above or below the adjusted reference on any particular morning is the noise in the KO chart above. The approach that trades that gap on purpose has a name, and the dividend capture strategy walks through what it costs to run. For the exit-side mechanics, selling on the ex-dividend date answers the question directly.

How these panels were built

Large US payers with continuous quarterly dividend histories were selected, none of which split its stock between 2021 and 2025, so unadjusted opens and cash amounts stay comparable across the whole window. The prior close for each ex-date is the previous row in that ticker's own daily session series, which handles weekends and holidays without a hardcoded calendar. Dividend rows are deduplicated per ticker and ex-date. The ratio panels total the drop against the total dividend rather than averaging per-event ratios, which keeps one small payment from dominating the figure.

FAQ

Why does a stock price drop on the ex-dividend date?

On the ex-dividend date a buyer no longer receives the upcoming payment, and the exchange marks the prior close down by the dividend for reference and order-price purposes. The drop is written into the mechanics of the date and happens before any trading takes place.

Does a stock always fall by exactly the dividend?

No. The adjustment to the reference close is exactly the dividend, while the opening print is wherever the auction clears. Averaged over many ex-dates the drop tends to land under the full payment, and on a single morning ordinary price movement is often larger than the dividend itself.

What is a DNR order?

DNR stands for Do Not Reduce. It is an instruction attached to an open buy limit or sell stop order telling the exchange to leave that order price alone on the ex-dividend date instead of reducing it by the dividend amount.

Do I get the dividend if I buy on the ex-dividend date?

No. Buying on the ex-date or later leaves the upcoming payment with the seller. Receiving it requires owning the shares before the ex-date opens, which is what the date marks.

Does the ex-dividend drop mean I lost money?

Pre-tax, value moves from the share price into cash. A holder through the ex-date sees the position marked down and a dividend receivable appear alongside it. Taxes and the timing of the pay date are what make the two sides differ in practice.


Every panel here ships with the exact SQL underneath it, so you can see which sessions were counted and which were skipped. To run the same comparison on a payer you already hold, ask the question in plain English on the Strasmore terminal.