Class LogNormalFwdRateBalland
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
marketModelMarketModelThe model evolved.
factoryBrownianGeneratorFactoryThe factory of the Brownian generator.
numerairesReadOnlySpan<int>The numeraires, one per step, compatible with the evolution.
initialStepintThe step each path starts from, below the number of steps.
Exceptions
- ArgumentException
The numeraires aren't compatible with the evolution.
- ArgumentOutOfRangeException
initialStepisn'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
CurrentStep
Gets the step the next AdvanceStep() takes.
public override int CurrentStep { get; }
Property Value
Numeraires
Gets the numeraires, one per step.
public override ImmutableArray<int> Numeraires { get; }
Property Value
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
csCurveStateThe 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.