Longstaff-Schwarz Monte Carlo engine for early exercise options. More...
#include <ql/pricingengines/mclongstaffschwartzengine.hpp>
Public Types | |
typedef MC< RNG >::path_type | path_type |
typedef McSimulation< MC, RNG, S >::stats_type | stats_type |
typedef McSimulation< MC, RNG, S >::path_pricer_type | path_pricer_type |
typedef McSimulation< MC, RNG, S >::path_generator_type | path_generator_type |
typedef McSimulation< MC, RNG_Calibration, S >::path_generator_type | path_generator_type_calibration |
![]() | |
typedef boost::unordered_set< ext::shared_ptr< Observable > > | set_type |
typedef set_type::iterator | iterator |
![]() | |
typedef MonteCarloModel< MC, RNG, Statistics >::path_generator_type | path_generator_type |
typedef MonteCarloModel< MC, RNG, Statistics >::path_pricer_type | path_pricer_type |
typedef MonteCarloModel< MC, RNG, Statistics >::stats_type | stats_type |
typedef MonteCarloModel< MC, RNG, Statistics >::result_type | result_type |
Public Member Functions | |
MCLongstaffSchwartzEngine (const ext::shared_ptr< StochasticProcess > &process, Size timeSteps, Size timeStepsPerYear, bool brownianBridge, bool antitheticVariate, bool controlVariate, Size requiredSamples, Real requiredTolerance, Size maxSamples, BigNatural seed, Size nCalibrationSamples=Null< Size >(), boost::optional< bool > brownianBridgeCalibration=boost::none, boost::optional< bool > antitheticVariateCalibration=boost::none, BigNatural seedCalibration=Null< Size >()) | |
void | calculate () const |
![]() | |
PricingEngine::arguments * | getArguments () const |
const PricingEngine::results * | getResults () const |
void | reset () |
void | update () |
![]() | |
Observable (const Observable &) | |
Observable & | operator= (const Observable &) |
void | notifyObservers () |
![]() | |
Observer (const Observer &) | |
Observer & | operator= (const Observer &) |
std::pair< iterator, bool > | registerWith (const ext::shared_ptr< Observable > &) |
void | registerWithObservables (const ext::shared_ptr< Observer > &) |
Size | unregisterWith (const ext::shared_ptr< Observable > &) |
void | unregisterWithAll () |
virtual void | deepUpdate () |
![]() | |
result_type | value (Real tolerance, Size maxSamples=QL_MAX_INTEGER, Size minSamples=1023) const |
add samples until the required absolute tolerance is reached | |
result_type | valueWithSamples (Size samples) const |
simulate a fixed number of samples | |
result_type | errorEstimate () const |
error estimated using the samples simulated so far | |
const stats_type & | sampleAccumulator () const |
access to the sample accumulator for richer statistics | |
void | calculate (Real requiredTolerance, Size requiredSamples, Size maxSamples) const |
basic calculate method provided to inherited pricing engines | |
Protected Member Functions | |
virtual ext::shared_ptr< LongstaffSchwartzPathPricer< path_type > > | lsmPathPricer () const =0 |
TimeGrid | timeGrid () const |
ext::shared_ptr< path_pricer_type > | pathPricer () const |
ext::shared_ptr< path_generator_type > | pathGenerator () const |
![]() | |
McSimulation (bool antitheticVariate, bool controlVariate) | |
virtual ext::shared_ptr< path_pricer_type > | pathPricer () const=0 |
virtual ext::shared_ptr< path_generator_type > | pathGenerator () const=0 |
virtual TimeGrid | timeGrid () const=0 |
virtual ext::shared_ptr< path_pricer_type > | controlPathPricer () const |
virtual ext::shared_ptr< path_generator_type > | controlPathGenerator () const |
virtual ext::shared_ptr< PricingEngine > | controlPricingEngine () const |
virtual result_type | controlVariateValue () const |
Protected Attributes | |
ext::shared_ptr< StochasticProcess > | process_ |
const Size | timeSteps_ |
const Size | timeStepsPerYear_ |
const bool | brownianBridge_ |
const Size | requiredSamples_ |
const Real | requiredTolerance_ |
const Size | maxSamples_ |
const BigNatural | seed_ |
const Size | nCalibrationSamples_ |
const bool | brownianBridgeCalibration_ |
const bool | antitheticVariateCalibration_ |
const BigNatural | seedCalibration_ |
ext::shared_ptr< LongstaffSchwartzPathPricer< path_type > > | pathPricer_ |
ext::shared_ptr< MonteCarloModel< MC, RNG_Calibration, S > > | mcModelCalibration_ |
![]() | |
ArgumentsType | arguments_ |
ResultsType | results_ |
![]() | |
ext::shared_ptr< MonteCarloModel< MC, RNG, Statistics > > | mcModel_ |
bool | antitheticVariate_ |
bool | controlVariate_ |
Additional Inherited Members | |
![]() | |
static Real | maxError (const Sequence &sequence) |
static Real | maxError (Real error) |
Longstaff-Schwarz Monte Carlo engine for early exercise options.
References:
Francis Longstaff, Eduardo Schwartz, 2001. Valuing American Options by Simulation: A Simple Least-Squares Approach, The Review of Financial Studies, Volume 14, No. 1, 113-147
MCLongstaffSchwartzEngine | ( | const ext::shared_ptr< StochasticProcess > & | process, |
Size | timeSteps, | ||
Size | timeStepsPerYear, | ||
bool | brownianBridge, | ||
bool | antitheticVariate, | ||
bool | controlVariate, | ||
Size | requiredSamples, | ||
Real | requiredTolerance, | ||
Size | maxSamples, | ||
BigNatural | seed, | ||
Size | nCalibrationSamples = Null<Size>() , |
||
boost::optional< bool > | brownianBridgeCalibration = boost::none , |
||
boost::optional< bool > | antitheticVariateCalibration = boost::none , |
||
BigNatural | seedCalibration = Null<Size>() |
||
) |
If the parameters brownianBridge and antitheticVariate are not given they are chosen to be identical to the respective parameters for pricing; the seed for calibration is chosen to be zero if the pricing seed is zero and otherwise as the pricing seed plus some offset to avoid identical paths in calibration and pricing; note however that this has no effect for low discrepancy RNGs usually, it is therefore recommended to use pseudo random generators for the calibration phase always (and possibly quasi monte carlo in the subsequent pricing).