Logo
Reference manual - version orea_version
HistoricalScenarioGenerator Class Reference

Historical Scenario Generator. More...

#include <orea/scenario/historicalscenariogenerator.hpp>

Inheritance diagram for HistoricalScenarioGenerator:

Classes

struct  HistoricalScenarioCalculationDetails

Public Member Functions

 HistoricalScenarioGenerator (const QuantLib::ext::shared_ptr< HistoricalScenarioLoader > &historicalScenarioLoader, const QuantLib::ext::shared_ptr< ScenarioFactory > &scenarioFactory, const QuantLib::ext::shared_ptr< ReturnConfiguration > &returnConfiguration, const QuantLib::Calendar &cal, const QuantLib::ext::shared_ptr< ore::data::AdjustmentFactors > &adjFactors=nullptr, const Size mporDays=10, const bool overlapping=true, const std::string &labelPrefix="", const bool generateDifferenceScenarios=false)
 Default constructor.
 HistoricalScenarioGenerator (const QuantLib::ext::shared_ptr< HistoricalScenarioLoader > &historicalScenarioLoader, const QuantLib::ext::shared_ptr< ScenarioFactory > &scenarioFactory, const QuantLib::ext::shared_ptr< ReturnConfiguration > &returnConfiguration, const QuantLib::ext::shared_ptr< ore::data::AdjustmentFactors > &adjFactors=nullptr, const std::string &labelPrefix="", const bool generateDifferenceScenarios=false)
 Constructor with no mporDays/Calendar, construct historical shift scenario between each scneario.
QuantLib::ext::shared_ptr< Scenario > & baseScenario ()
 Set base scenario, this also defines the asof date.
virtual const QuantLib::ext::shared_ptr< Scenario > & baseScenario () const
 Get base scenario.
const QuantLib::Calendar & cal () const
 Get calendar.
QuantLib::Size mporDays () const
 Get mpor days.
bool overlapping () const
 Are scenarios overlapping.
const QuantLib::ext::shared_ptr< ReturnConfiguration > & returnConfiguration () const
 Return configuration.
virtual QuantLib::Real scaling (const RiskFactorKey &key, const QuantLib::Real &keyReturn)
 Scaling.
QuantLib::ext::shared_ptr< Scenarionext (const QuantLib::Date &d) override
 Return the next scenario for the given date.
const std::vector< HistoricalScenarioCalculationDetails > & lastHistoricalScenarioCalculationDetails () const
 Return the calculation details of the last generated scenario *‍/.
void reset () override
 Reset the generator so calls to next() return the first scenario.
virtual QuantLib::Size numScenarios () const
 Number of scenarios this generator can generate.
virtual void setDates ()
 set the start and end dates, can be overwritten in derived class
const std::vector< QuantLib::Date > & startDates () const
 start dates from which the scenarios were generated from
const std::vector< QuantLib::Date > & endDates () const
 end dates from which the scenarios were generated from
const QuantLib::ext::shared_ptr< HistoricalScenarioLoader > & scenarioLoader () const
 Get the HistoricalScenarioLoader.
const QuantLib::ext::shared_ptr< ScenarioFactory > & scenarioFactory () const
 Get the ScenarioFactory.
const QuantLib::ext::shared_ptr< ore::data::AdjustmentFactors > & adjFactors () const
 Get the adj factors.
std::vector< std::pair< QuantLib::Date, QuantLib::Date > > filteredScenarioDates (const ore::data::TimePeriod &period) const
 Get (start, end) scenario date pairs filtered on the given period.
const std::string & labelPrefix () const
 Get the scenario label prefix.
void setGenerateDifferenceScenarios (const bool b)
const bool generateDifferenceScenarios () const
Public Member Functions inherited from ScenarioGenerator
virtual ~ScenarioGenerator ()
 Default destructor.
virtual QuantLib::ext::shared_ptr< Scenarionext (const Date &d)=0
 Return the next scenario for the given date.

Protected Member Functions

std::pair< QuantLib::ext::shared_ptr< Scenario >, QuantLib::ext::shared_ptr< Scenario > > scenarioPair ()
 The Scenario Pairs for a given index.
QuantLib::Real adjustedPrice (RiskFactorKey key, QuantLib::Date d, QuantLib::Real price)
 Returns the adjusted price.

Protected Attributes

Size i_
QuantLib::ext::shared_ptr< HistoricalScenarioLoaderhistoricalScenarioLoader_
std::vector< QuantLib::Date > startDates_
std::vector< QuantLib::Date > endDates_
QuantLib::ext::shared_ptr< ScenarioFactoryscenarioFactory_
QuantLib::ext::shared_ptr< ScenariobaseScenario_
std::vector< HistoricalScenarioCalculationDetailscalculationDetails_
QuantLib::Calendar cal_
QuantLib::Size mporDays_ = 10

Detailed Description

Historical Scenario Generator.

A Scenario Generator that takes historical scenarios and builds new scenarios by applying historical shifts to the base scenario (which typically comes from todays market).

This generator can be used for historical VAR and backtesting calculations, unlike a PRNG based generator it is limited in the number of scenarios it can generate.

The scenarios generated are based on the scenario differences between t and t+mpor, these differences are typically a relative change and this change is then applied to the baseScenario to give a new scenario which is asof Today or Today+mpor.

Constructor & Destructor Documentation

◆ HistoricalScenarioGenerator() [1/2]

HistoricalScenarioGenerator ( const QuantLib::ext::shared_ptr< HistoricalScenarioLoader > & historicalScenarioLoader,
const QuantLib::ext::shared_ptr< ScenarioFactory > & scenarioFactory,
const QuantLib::ext::shared_ptr< ReturnConfiguration > & returnConfiguration,
const QuantLib::Calendar & cal,
const QuantLib::ext::shared_ptr< ore::data::AdjustmentFactors > & adjFactors = nullptr,
const Size mporDays = 10,
const bool overlapping = true,
const std::string & labelPrefix = "",
const bool generateDifferenceScenarios = false )

Default constructor.

Parameters
historicalScenarioLoaderHistorical Scenario Loader containing all scenarios
scenarioFactoryScenario factory to use
returnConfigurationreturn configuration
calCalendar to use
adjFactorsoptional adjustment factors for stock splits etc
mporDaysMpor days or step size
overlappingoverlapping scenarios
labelPrefixstring prepended to label of all scenarios generated
generateDifferenceScenariosindicates if the generated sceanrios will be absolute or difference

◆ HistoricalScenarioGenerator() [2/2]

HistoricalScenarioGenerator ( const QuantLib::ext::shared_ptr< HistoricalScenarioLoader > & historicalScenarioLoader,
const QuantLib::ext::shared_ptr< ScenarioFactory > & scenarioFactory,
const QuantLib::ext::shared_ptr< ReturnConfiguration > & returnConfiguration,
const QuantLib::ext::shared_ptr< ore::data::AdjustmentFactors > & adjFactors = nullptr,
const std::string & labelPrefix = "",
const bool generateDifferenceScenarios = false )

Constructor with no mporDays/Calendar, construct historical shift scenario between each scneario.

Parameters
historicalScenarioLoaderHistorical Scenario Loader containing all scenarios
scenarioFactoryScenario factory to use
returnConfigurationreturn configuration
adjFactorsoptional adjustment factors for stock splits etc
labelPrefixstring prepended to label of all scenarios generated
generateDifferenceScenariosindicates if the generated sceanrios will be absolute or difference

Member Function Documentation

◆ baseScenario()

virtual const QuantLib::ext::shared_ptr< Scenario > & baseScenario ( ) const
virtual

Get base scenario.

Reimplemented in ZeroToParScenarioGenerator.

◆ next()

QuantLib::ext::shared_ptr< Scenario > next ( const QuantLib::Date & d)
override

Return the next scenario for the given date.

Date should be asof or asof+mporDays, this class only checks that date is >= the asof date. Whatever you put in here will be in the returned scenario.

Generator returns scenarios in order of shifts and throws if we have run out of historicals

If Mpor > 1 than the scenarios will overlap.

◆ reset()

void reset ( )
overridevirtual

Reset the generator so calls to next() return the first scenario.

This allows re-generation of scenarios if required.

Implements ScenarioGenerator.

Reimplemented in HistoricalScenarioGeneratorRandom, and HistoricalScenarioGeneratorWithFilteredDates.

◆ adjustedPrice()

QuantLib::Real adjustedPrice ( RiskFactorKey key,
QuantLib::Date d,
QuantLib::Real price )
protected

Returns the adjusted price.

Scenarios may contian unadjusted market prices e.g equity spot prices, apply adjustment factors to ensure no jumps between 2 scenarios Only handles equity spot adjustments at the moment