Class CashDividendEuropeanEngine
- Namespace
- NanoQL.PricingEngines
- Assembly
- NanoQL.dll
The (semi-)analytic engine for European options on an underlying paying cash dividends: J. Healy, "The Pricing of Vanilla Options with Cash Dividends as a Classic Vanilla Basket Option Problem" (2021), https://arxiv.org/pdf/2106.12971.
public static class CashDividendEuropeanEngine
- Inheritance
-
CashDividendEuropeanEngine
- Inherited Members
Remarks
Under the spot model the option is a basket of the dividends and the strike against the spot, priced by ChoiBasketEngine with QuantLib's arguments (λ 10, 2,000 steps, the control variate); a single dividend on the risk-free curve's date, or the escrowed model, is priced by AnalyticDividendEuropeanEngine, and no dividend by AnalyticEuropeanEngine. The value alone, as QuantLib's. Stateless: the dividends' processes are built per call, as QuantLib builds them.
The settlement and the time to maturity are the process's clock's (Clock(GeneralizedBlackScholesProcess, FdmQuantoHelper?)), from
its earliest structure date, and the curves and the volatility are read by date, accruing nothing before their
dates, where QuantLib's settlement and time are the risk-free curve's, so a dividend before that curve's date is
dropped, and its reads throw for an expiry before it (Divergences/TwoAssetMismatchedTimesTests.cs). Each
dividend's flat volatility is dated and counted on the clock, so its variance to expiry is the one read by date,
where QuantLib's is dated and counted on the volatility's own clock and sized on the risk-free curve's, its variance
scaled by the ratio of the two times. On structures dated and counted alike the clock is the risk-free curve and
the reads are QuantLib's. The dividends are ordered by date by a stable sort, where QuantLib's sort leaves
dividends of one date in no set order.
Methods
Calculate(VanillaOption, EvaluationContext, GeneralizedBlackScholesProcess, ImmutableArray<Dividend>, CashDividendEuropeanEngineCashDividendModel)
Prices a European option on an underlying paying cash dividends: QuantLib's calculate.
public static OneAssetOptionResults Calculate(VanillaOption option, EvaluationContext context, GeneralizedBlackScholesProcess process, ImmutableArray<Dividend> dividends, CashDividendEuropeanEngineCashDividendModel cashDividendModel = CashDividendEuropeanEngineCashDividendModel.Spot)
Parameters
optionVanillaOptionThe option, on a plain vanilla payoff.
contextEvaluationContextThe evaluation context.
processGeneralizedBlackScholesProcessThe underlying's process.
dividendsImmutableArray<Dividend>The dividends.
cashDividendModelCashDividendEuropeanEngineCashDividendModelThe dividends' model.
Returns
- OneAssetOptionResults
The option's results: the value.
Exceptions
- ArgumentNullException
An argument is null.
- ArgumentOutOfRangeException
The model isn't one of its values.
- NanoQLException
The exercise isn't European, or the payoff isn't plain vanilla.