Dividends
Dividends enter option pricing by escrow, not by yield. For every quote, the platform discounts each expected dividend back to the quote date, subtracts the total from the raw spot, and prices on that dividend-escrowed spot with a dividend yield of zero. The schedule that drives the escrow is built point-in-time from two sources: dividends already declared on or before the quote, escrowed at their announced amounts and dates, plus a projected continuation of the regular payment at the trailing run-rate for the dates a company had not yet announced. One mechanism prices every tenor, and a backtest never sees a dividend it could not have known.
Discrete escrow, not a yield
A continuous dividend yield approximates lumpy, irregular cash payments as a smooth rate. That misprices options whose life spans a small number of large payments, and it forces a boundary between a discrete treatment for short tenors and a continuous one for long tenors. The escrow removes both problems with a single construction.
For each option row, the escrow sums the present value of every dividend whose ex-date falls in (quote_date, expiration] and subtracts it from the raw spot S:
S_adjusted = S - sum( amount_i * e^(-r * (ex_i - quote_date) / 365) )The solve then runs on S_adjusted with q = 0. The entire dividend effect already sits in the adjusted spot, so there is no continuous-versus-discrete switch at any maturity, and lumpy or irregular schedules price exactly across all tenors.
Point-in-time projection
The schedule is the union of two sets, and the split between them is what keeps it honest.
Declared dividends are those announced on or before the quote (declaration_date <= quote_date) with an ex-date still ahead. These were public at the quote minute, so they are escrowed at their actual announced amounts and dates.
Not-yet-declared dividends are projected. The market prices a longer-dated option assuming the regular dividend keeps being paid, so escrowing only the one or two declared dividends would systematically under-adjust the spot for long tenors and bias their IV. The projection places ex_k = anchor + k * period_days at the run-rate amount, which is the cash amount of the most recent past dividend. The anchor is the last declared ex-date if one exists, otherwise the last known ex-date, and period_days comes from the payment frequency. Projected dates fill only the window strictly after the last declared dividend, so a declared near-term payment always overrides a projected one and nothing is double-counted.
Only what was known at the quote minute drives any of this. The run-rate amount is a past fact and is always knowable. A dividend announced after the quote is never escrowed at its actual amount; only its existence is approximated through the run-rate projection. So when a company raises from $0.50 to $1.00, the projection keeps using $0.50 until the $1.00 dividend actually goes ex, and the specific declared $1.00 payment is escrowed at $1.00 only once it has been announced. A raise never shows up before it goes public.
Which dividends count
Only regular cash dividends enter options pricing. Special, long-term, and short-term distributions are excluded, and the reason is the OCC contract-adjustment convention:
- The OCC does not adjust option contracts for ordinary cash dividends, so the market prices the expected ex-date price drop into the option. Those must be modeled in the escrow.
- The OCC does adjust the contract for a special or extraordinary distribution, typically a strike reduction or a deliverable change, which neutralizes it in the contract terms. Adding those to the escrow would double-count: the escrow would lower the forward and the strike would later drop too. That distorts IV.
The total-return stock series includes every distribution, because the shareholder receives all of them. The option escrow includes only the regular ones, because the contract terms absorb the specials. Both are correct for their own instrument.
Recognized payment frequencies are 1, 2, 4, 12, 24, or 52 payments per year. A frequency outside that set, whether zero, null, or vendor noise, falls back to quarterly.
The active-payer guard
A payer is treated as active only if it has a declared future dividend, or its last ex-date was within 1.5 times its payment period of the quote. A company that has stopped paying gets no projected schedule: S_adjusted = S, escrow zero. The guard prevents a phantom dividend stream for a suspended payer, where a stale run-rate would keep subtracting cash the market no longer expects.
The projection is sized to reach the longest option's expiration on any given quote day, with headroom, so no realistic tenor is truncated. A multi-year payer is escrowed to its full horizon rather than being cut short.
q is informational only
The published dividend yield q is the effective run-rate yield: the run-rate amount times the payment frequency, over the raw spot. It reads zero for a suspended payer.
This value is reporting only. It is not used in the IV solve and not used in the Greeks, both of which run on S_adjusted with q = 0. It exists as a convenient summary of the dividend run rate, decoupled from whether a dividend actually falls inside any particular option's life. Reading q off a quote and feeding it into a continuous-yield model of your own would double-count the dividend, since the escrowed spot already carries the full effect.
Dividends are not split-adjusted
The dividend cash amounts are kept in the as-paid, per-share terms of their own era. The spot and strikes the solver receives are raw, in the as-traded terms of their own era, and the dividend series matches them.
Split-adjusting the dividends would put them on a current-share-count basis while the spot and strikes stayed raw, and that mismatch would bias the escrow by the split factor for any quote dated before the symbol's own split. Splits are applied only to the separate total-return stock series, which is decoupled from options pricing.
What you read
None of the dividend machinery is directly readable. The dividend-escrowed spot, the informational yield q, and the next ex-date are all computed for every quote, but no accessor exposes them. The dividend treatment reaches you only through the values it shapes.
Those values are the implied volatility and Greeks you read. Both are solved on the escrowed spot, so the dividend adjustment is already inside every number they return. Read 30-DTE mid IV, the mid-quote default the escrow feeds, and the adjustment is baked in:
// 30-DTE mid IV, sampled to daily. The dividend escrow is already
// inside this value: it was solved on the dividend-escrowed spot,
// so no separate dividend term belongs on top of it.
option.iv(30, sampling=sampling(period="day", time="close"))The implied forward is derived from the same escrowed spot and is likewise not exposed. The next ex-date, one of the unexposed quantities, is commonly null for short-dated SPY between ex-dates anyway, since no dividend falls before a near-term expiration. For the full picture of which methodology quantities are readable through an accessor and which are not, see how every number is produced and the symbol coverage table.