Logo
Reference manual - version qle_version
McMultiLegBaseEngine Class Reference
Inheritance diagram for McMultiLegBaseEngine:

Classes

struct  CashflowInfo
class  RegressionModel
class  MultiLegBaseAmcCalculator

Public Types

enum  RegressorModel {
  Simple , Lagged , LaggedIR , LaggedFX ,
  LaggedEQ
}
enum  VarGroupMode { Global , Trivial }

Public Member Functions

 McMultiLegBaseEngine (const Handle< CrossAssetModel > &model, const SequenceType calibrationPathGenerator, const SequenceType pricingPathGenerator, const Size calibrationSamples, const Size pricingSamples, const Size calibrationSeed, const Size pricingSeed, const Size polynomOrder, const LsmBasisSystem::PolynomialType polynomType, const SobolBrownianGenerator::Ordering ordering, const SobolRsg::DirectionIntegers directionIntegers, const std::vector< Handle< YieldTermStructure > > &discountCurves=std::vector< Handle< YieldTermStructure > >(), const std::vector< Date > &simulationDates=std::vector< Date >(), const std::vector< Date > &stickyCloseOutDates=std::vector< Date >(), const std::vector< Size > &externalModelIndices=std::vector< Size >(), const bool minimalObsDate=true, const RegressorModel regressorModel=RegressorModel::Simple, const Real regressionVarianceCutoff=Null< Real >(), const bool recalibrateOnStickyCloseOutDates=false, const bool reevaluateExerciseInStickyRun=false, const Size cfOnCpnMaxSimTimes=1, const Period &cfOnCpnAddSimTimesCutoff=Period(), const Size regressionMaxSimTimesIr=0, const Size regressionMaxSimTimesFx=0, const Size regressionMaxSimTimesEq=0, const VarGroupMode regressionVarGroupMode=VarGroupMode::Global)
virtual ~McMultiLegBaseEngine ()
 Destructor.
void calculate () const
QuantLib::ext::shared_ptr< AmcCalculatoramcCalculator () const
virtual RandomVariable overwritePathValueUndDirty (double t, const RandomVariable &pathValueUndDirty, const std::set< Real > &exerciseXvaTimes, const std::vector< std::vector< QuantExt::RandomVariable > > &paths) const
virtual bool useOverwritePathValueUndDirty () const
void generatePathValues (const std::vector< Real > &simulationTimes, std::vector< std::vector< RandomVariable > > &pathValues) const
void calculateModels (const std::set< Real > &simulationTimes, const std::set< Real > &exerciseXvaTimes, const std::set< Real > &exerciseTimes, const std::set< Real > &xvaTimes, const std::vector< CashflowInfo > &cashflowInfo, const std::vector< std::vector< RandomVariable > > &pathValues, const std::vector< std::vector< const RandomVariable * > > &pathValuesRef, std::vector< RegressionModel > &regModelUndDirty, std::vector< RegressionModel > &regModelUndExInto, std::vector< RegressionModel > &regModelRebate, std::vector< RegressionModel > &regModelContinuationValue, std::vector< RegressionModel > &regModelOption, RandomVariable &pathValueUndDirty, RandomVariable &pathValueUndExInto, RandomVariable &pathValueOption) const
Real time (const Date &d) const
CashflowInfo createCashflowInfo (QuantLib::ext::shared_ptr< CashFlow > flow, const Currency &payCcy, bool payer, Size legNo, Size cfNo) const
Size timeIndex (const Time t, const std::set< Real > &simulationTimes) const
RandomVariable cashflowPathValue (const CashflowInfo &cf, const std::vector< std::vector< RandomVariable > > &pathValues, const std::set< Real > &simulationTimes) const

Public Attributes

std::vector< Leg > leg_
std::vector< Currency > currency_
std::vector< boolpayer_
QuantLib::ext::shared_ptr< Exercise > exercise_
Settlement::Type optionSettlement_ = Settlement::Physical
std::vector< QuantLib::Date > cashSettlementDates_
bool exerciseIntoIncludeSameDayFlows_ = false
Handle< CrossAssetModelmodel_
SequenceType calibrationPathGenerator_
SequenceType pricingPathGenerator_
Size calibrationSamples_
Size pricingSamples_
Size calibrationSeed_
Size pricingSeed_
Size polynomOrder_
LsmBasisSystem::PolynomialType polynomType_
SobolBrownianGenerator::Ordering ordering_
SobolRsg::DirectionIntegers directionIntegers_
std::vector< Handle< YieldTermStructure > > discountCurves_
std::vector< Date > simulationDates_
std::vector< Date > stickyCloseOutDates_
std::vector< Size > externalModelIndices_
bool minimalObsDate_
RegressorModel regressorModel_
Real regressionVarianceCutoff_
bool recalibrateOnStickyCloseOutDates_
bool reevaluateExerciseInStickyRun_
Size cfOnCpnMaxSimTimes_
Period cfOnCpnAddSimTimesCutoff_
Size regressionMaxSimTimesIr_
Size regressionMaxSimTimesFx_
Size regressionMaxSimTimesEq_
VarGroupMode regressionVarGroupMode_
bool includeTodaysCashflows_
bool includeReferenceDateEvents_
QuantLib::ext::shared_ptr< AmcCalculatoramcCalculator_
Real resultUnderlyingNpv_
Real resultValue_
Date today_
std::vector< LgmVectorisedlgmVectorised_

Static Public Attributes

static constexpr Real tinyTime = 1E-10

Constructor & Destructor Documentation

◆ McMultiLegBaseEngine()

McMultiLegBaseEngine ( const Handle< CrossAssetModel > & model,
const SequenceType calibrationPathGenerator,
const SequenceType pricingPathGenerator,
const Size calibrationSamples,
const Size pricingSamples,
const Size calibrationSeed,
const Size pricingSeed,
const Size polynomOrder,
const LsmBasisSystem::PolynomialType polynomType,
const SobolBrownianGenerator::Ordering ordering,
const SobolRsg::DirectionIntegers directionIntegers,
const std::vector< Handle< YieldTermStructure > > & discountCurves = std::vector< Handle< YieldTermStructure > >(),
const std::vector< Date > & simulationDates = std::vector< Date >(),
const std::vector< Date > & stickyCloseOutDates = std::vector< Date >(),
const std::vector< Size > & externalModelIndices = std::vector< Size >(),
const bool minimalObsDate = true,
const RegressorModel regressorModel = RegressorModel::Simple,
const Real regressionVarianceCutoff = Null< Real >(),
const bool recalibrateOnStickyCloseOutDates = false,
const bool reevaluateExerciseInStickyRun = false,
const Size cfOnCpnMaxSimTimes = 1,
const Period & cfOnCpnAddSimTimesCutoff = Period(),
const Size regressionMaxSimTimesIr = 0,
const Size regressionMaxSimTimesFx = 0,
const Size regressionMaxSimTimesEq = 0,
const VarGroupMode regressionVarGroupMode = VarGroupMode::Global )

The npv is computed in the model's base currency, discounting curves are taken from the model. simulationDates are additional simulation dates. The cross asset model here must be consistent with the multi path that is the input to AmcCalculator::simulatePath().

Current limitations:

  • the parameter minimalObsDate is ignored, the corresponding optimization is not implemented yet
  • pricingSamples are ignored, the npv from the training phase is used alway