Class DividendSchedule
data.CorporateActions' historical back-adjustment.
A continuous dividend yield misprices single stocks: dividends arrive as dated cash amounts, and an option spanning an ex-date is worth measurably less (calls) or more (puts) than the yield approximation says. This class implements the escrowed dividend model: the PV of all dividends with ex-dates before expiry is stripped from spot, and the remainder diffuses lognormally,
S* = S − Σ dᵢ·e^{−r·tᵢ} (tᵢ ≤ T), F = S*·e^{(r−borrow)T}
Borrow cost enters exactly like a continuous yield (carry in
BlackScholes) — hard-to-borrow names price calls down and puts up
the same way a dividend yield does.
The escrowed model applies the volatility to S* for the whole life of
the option, which understates the variance of a spot that only drops at
the ex-date; the error grows with the dividend size, the time from the
ex-date to expiry and the option's maturity (Haug, Haug and Lewis 2003,
"Back to basics: a new approach to the discrete dividend problem",
Wilmott). bosVandermarkPrice(BlackScholes.OptionType, double, double, double, double, double, double) splits each dividend between spot
and strike by its timing (Bos and Vandermark 2002, "Finessing fixed
dividends", Risk) and is markedly closer to the exact jump model for
European options. Neither adjustment is right for American exercise just
before an ex-date; that needs a tree or grid with the cash drop applied at
the ex-date: DividendTree.
A dividend with ex-time equal to the horizon is included (the holder at expiry does not receive it in the convention used here).
Instances are immutable; all queries are allocation-free.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final DividendScheduleEmpty schedule (no dividends): forwards collapse to the yield-free case. -
Method Summary
Modifier and TypeMethodDescriptiondoubleadjustedSpot(double spot, double rate, double horizonYears) Escrowed spot: what actually diffuses once dividend PV is stripped.doubleamount(int i) Cash amount per share of dividendi.doublebosVandermarkPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double borrow, double vol, double timeYears) European price with the Bos-Vandermark (2002) split: for dividends dᵢ at tᵢ ≤ T,intcount()doubleeuropeanPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double borrow, double vol, double timeYears) European price under the escrowed model: Black-Scholes on the adjusted spot, with borrow as the carry.doubleexTime(int i) Ex-dividend time of dividendi, in years from valuation.doubleforward(double spot, double rate, double borrow, double horizonYears) Equity forward with discrete dividends and a continuous borrow fee.static DividendScheduleof(double[] exTimesYears, double[] amounts) Builds a schedule of discrete cash dividends.doublepresentValue(double rate, double horizonYears) Present value of all dividends with ex-dates on or beforehorizonYears.
-
Field Details
-
NONE
Empty schedule (no dividends): forwards collapse to the yield-free case.
-
-
Method Details
-
of
Builds a schedule of discrete cash dividends.- Parameters:
exTimesYears- ex-dividend times in years from valuation, ascendingamounts- cash amounts per share, aligned with the times
-
presentValue
public double presentValue(double rate, double horizonYears) Present value of all dividends with ex-dates on or beforehorizonYears. -
adjustedSpot
public double adjustedSpot(double spot, double rate, double horizonYears) Escrowed spot: what actually diffuses once dividend PV is stripped. -
forward
public double forward(double spot, double rate, double borrow, double horizonYears) Equity forward with discrete dividends and a continuous borrow fee. -
europeanPrice
public double europeanPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double borrow, double vol, double timeYears) European price under the escrowed model: Black-Scholes on the adjusted spot, with borrow as the carry. With no dividends and no borrow this is exactly the plain Black-Scholes price. -
bosVandermarkPrice
public double bosVandermarkPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double borrow, double vol, double timeYears) European price with the Bos-Vandermark (2002) split: for dividends dᵢ at tᵢ ≤ T,S' = S − Σ ((T − tᵢ)/T)·dᵢ·e^{−r tᵢ}, K' = K + Σ (tᵢ/T)·dᵢ·e^{r(T − tᵢ)}and Black-Scholes on (S', K') with borrow as the carry. Early dividends come mostly off spot, late ones mostly onto the strike.
-
count
public int count() -
exTime
public double exTime(int i) Ex-dividend time of dividendi, in years from valuation. -
amount
public double amount(int i) Cash amount per share of dividendi.
-