Table of Contents

Class LogNormalFwdRateBalland

Namespace
NanoQL.Models
Assembly
NanoQL.dll

Balland's predictor-corrector evolver of a displaced log-normal LIBOR market model: each step's drifts corrected with the drifts at the geometric mean of the step's predicted end forwards and its start forwards.

[WorkingType]
public sealed class LogNormalFwdRateBalland : MarketModelEvolver
Inheritance
LogNormalFwdRateBalland
Inherited Members

Remarks

A working type, copying each step's pseudo-root and covariance at construction; one step allocates nothing after a path's warm-up.

The geometric mean is of the displaced forwards at the step's start and end, √((f_end + d)(f_start + d)) − d, where QuantLib's is √(f_end f₀) of the undisplaced forwards with the model's time-zero forward at every step, so the scheme doesn't converge to the model as its steps refine (caplets 5.9 standard errors from Black at eight steps a period) and is NaN once a displaced forward goes below 0 (fixed with an independent check, lognormalfwdrateballand.cpp:127; Divergences/BallandGeometricMeanTests.cs). On one step from time 0 undisplaced, QuantLib's case, it is QuantLib's arithmetic bit for bit.

Constructors

LogNormalFwdRateBalland(MarketModel, BrownianGeneratorFactory, ReadOnlySpan<int>, int)

Initializes a new instance of the LogNormalFwdRateBalland class.

public LogNormalFwdRateBalland(MarketModel marketModel, BrownianGeneratorFactory factory, ReadOnlySpan<int> numeraires, int initialStep = 0)

Parameters

marketModel MarketModel

The model evolved.

factory BrownianGeneratorFactory

The factory of the Brownian generator.

numeraires ReadOnlySpan<int>

The numeraires, one per step, compatible with the evolution.

initialStep int

The step each path starts from, below the number of steps.

Exceptions

ArgumentException

The numeraires aren't compatible with the evolution.

ArgumentOutOfRangeException

initialStep isn't a step.

Properties

CurrentState

Gets the curve state after the last step: the evolver's own, valid until its next step.

public override CurveState CurrentState { get; }

Property Value

CurveState

CurrentStep

Gets the step the next AdvanceStep() takes.

public override int CurrentStep { get; }

Property Value

int

Numeraires

Gets the numeraires, one per step.

public override ImmutableArray<int> Numeraires { get; }

Property Value

ImmutableArray<int>

Methods

AdvanceStep()

Evolves the rates over the current step.

public override double AdvanceStep()

Returns

double

The step's weight.

SetInitialState(CurveState)

Sets the state each path starts from.

public override void SetInitialState(CurveState cs)

Parameters

cs CurveState

The curve state whose rates each path starts from.

Exceptions

ArgumentException

The state's forwards aren't one per rate.

StartNewPath()

Starts a new path.

public override double StartNewPath()

Returns

double

The path's weight.