Docs / nablatensor-quant / com.nablatensor.quant

class

MertonJumpModel

Merton jump-diffusion as a composable step block (Seam 5):

dS/S = (r - lambda kappa) dt + sigma dW + (Y - 1) dN
ln Y ~ N(muJ, deltaJ^2)
kappa = E[Y - 1] = exp(muJ + deltaJ^2 / 2) - 1

Each step draws a diffusion normal and, from a uniform, a smoothed indicator 1{U < lambda dt} for at most one jump (exact as the monitoring gets fine, since P(>= 2 jumps per step) = O((lambda dt)^2)). The jump count is not differentiated; muJ, deltaJ and the compensator are, so one adjoint sweep returns the jump-parameter risk next to the spot / vol / rate Greeks.

Validated against the exact MertonJumpDiffusion Poisson-series price (agrees to Monte-Carlo error). The smoothed jump indicator leaves an O(0.1%) martingale bias in E[S_T] — negligible for option prices, visible only in a put-call-parity check at high path counts — that shrinks with the indicator width.

Constructors

MertonJumpModel(Nabla.Inputs<MertonJumpMarket> in, double maturity, int steps, double indicatorWidth)

Methods

ADouble start(Nabla.Inputs<MertonJumpMarket> in)
ADouble step(AadRecorder rec, ADouble s, ADouble z, ADouble u, ADouble zJump)

One step. z drives the diffusion, u selects whether a jump occurs this step, zJump is its (log) size.

static BiConsumer<AadRecorder, Nabla.Inputs<MertonJumpMarket>> european(OptionType type, double maturity, int steps)

European call/put on the terminal spot, discounted at the flat rate.

static BiConsumer<AadRecorder, Nabla.Inputs<MertonJumpMarket>> european(OptionType type, double maturity, int steps, double indicatorWidth)