Class DividendSchedule

java.lang.Object
com.quantfinlib.pricing.DividendSchedule

public final class DividendSchedule extends Object
Discrete (cash) dividends for equity derivatives — the forward-looking counterpart to 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

    Fields
    Modifier and Type
    Field
    Description
    static final DividendSchedule
    Empty schedule (no dividends): forwards collapse to the yield-free case.
  • Method Summary

    Modifier and Type
    Method
    Description
    double
    adjustedSpot(double spot, double rate, double horizonYears)
    Escrowed spot: what actually diffuses once dividend PV is stripped.
    double
    amount(int i)
    Cash amount per share of dividend i.
    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,
    int
     
    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.
    double
    exTime(int i)
    Ex-dividend time of dividend i, in years from valuation.
    double
    forward(double spot, double rate, double borrow, double horizonYears)
    Equity forward with discrete dividends and a continuous borrow fee.
    of(double[] exTimesYears, double[] amounts)
    Builds a schedule of discrete cash dividends.
    double
    presentValue(double rate, double horizonYears)
    Present value of all dividends with ex-dates on or before horizonYears.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • NONE

      public static final DividendSchedule NONE
      Empty schedule (no dividends): forwards collapse to the yield-free case.
  • Method Details

    • of

      public static DividendSchedule of(double[] exTimesYears, double[] amounts)
      Builds a schedule of discrete cash dividends.
      Parameters:
      exTimesYears - ex-dividend times in years from valuation, ascending
      amounts - 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 before horizonYears.
    • 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 dividend i, in years from valuation.
    • amount

      public double amount(int i)
      Cash amount per share of dividend i.