20#include <ql/exercise.hpp>
21#include <ql/methods/finitedifferences/solvers/fdm2dblackscholessolver.hpp>
22#include <ql/methods/finitedifferences/utilities/fdminnervaluecalculator.hpp>
23#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>
24#include <ql/methods/finitedifferences/meshers/fdmmeshercomposite.hpp>
25#include <ql/methods/finitedifferences/stepconditions/fdmstepconditioncomposite.hpp>
26#include <ql/methods/finitedifferences/meshers/fdmblackscholesmesher.hpp>
27#include <ql/pricingengines/basket/fd2dblackscholesvanillaengine.hpp>
32 const ext::shared_ptr<GeneralizedBlackScholesProcess>& p1,
33 const ext::shared_ptr<GeneralizedBlackScholesProcess>& p2,
39 Real illegalLocalVolOverwrite)
42 correlation_(correlation),
43 xGrid_(xGrid), yGrid_(yGrid), tGrid_(tGrid),
44 dampingSteps_(dampingSteps),
45 schemeDesc_(schemeDesc),
47 illegalLocalVolOverwrite_(illegalLocalVolOverwrite) {
54 const ext::shared_ptr<BasketPayoff> payoff =
59 const ext::shared_ptr<Fdm1dMesher> em1(
63 std::pair<Real, Real>(
p1_->x0(), 0.1)));
65 const ext::shared_ptr<Fdm1dMesher> em2(
69 std::pair<Real, Real>(
p2_->x0(), 0.1)));
71 const ext::shared_ptr<FdmMesher> mesher (
75 const ext::shared_ptr<FdmInnerValueCalculator> calculator(
79 const ext::shared_ptr<FdmStepConditionComposite> conditions =
83 p1_->riskFreeRate()->referenceDate(),
84 p1_->riskFreeRate()->dayCounter());
91 conditions, calculator,
94 ext::shared_ptr<Fdm2dBlackScholesSolver> solver(
105 results_.delta = solver->deltaXat(x, y) + solver->deltaYat(x, y);
106 results_.gamma = solver->gammaXat(x, y) + solver->gammaYat(x, y)
107 + 2*solver->gammaXYat(x, y);
108 results_.theta = solver->thetaAt(x, y);
const ext::shared_ptr< GeneralizedBlackScholesProcess > p1_
void calculate() const override
const ext::shared_ptr< GeneralizedBlackScholesProcess > p2_
Fd2dBlackScholesVanillaEngine(const ext::shared_ptr< GeneralizedBlackScholesProcess > &p1, const ext::shared_ptr< GeneralizedBlackScholesProcess > &p2, Real correlation, Size xGrid=100, Size yGrid=100, Size tGrid=50, Size dampingSteps=0, const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer(), bool localVol=false, Real illegalLocalVolOverwrite=-Null< Real >())
const FdmSchemeDesc schemeDesc_
const Real illegalLocalVolOverwrite_
static ext::shared_ptr< FdmStepConditionComposite > vanillaComposite(const DividendSchedule &schedule, const ext::shared_ptr< Exercise > &exercise, const ext::shared_ptr< FdmMesher > &mesher, const ext::shared_ptr< FdmInnerValueCalculator > &calculator, const Date &refDate, const DayCounter &dayCounter)
BasketOption::results results_
BasketOption::arguments arguments_
Shared handle to an observable.
template class providing a null value for a given type.
std::pair< iterator, bool > registerWith(const ext::shared_ptr< Observable > &)
ext::shared_ptr< Exercise > exercise
ext::shared_ptr< Payoff > payoff
Real Time
continuous quantity with 1-year units
std::size_t Size
size of a container
std::vector< ext::shared_ptr< Dividend > > DividendSchedule
OperatorTraits< FdmLinearOp >::bc_set FdmBoundaryConditionSet