Table of Contents

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

option VanillaOption

The option, on a plain vanilla payoff.

context EvaluationContext

The evaluation context.

process GeneralizedBlackScholesProcess

The underlying's process.

dividends ImmutableArray<Dividend>

The dividends.

cashDividendModel CashDividendEuropeanEngineCashDividendModel

The 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.