21#include <ql/exercise.hpp>
22#include <ql/math/integrals/segmentintegral.hpp>
23#include <ql/pricingengines/vanilla/integralengine.hpp>
32 Integrand(ext::shared_ptr<Payoff> payoff,
Real s0,
Rate drift,
Real variance)
33 : payoff_(
std::move(payoff)), s0_(s0), drift_(drift), variance_(variance) {}
35 Real temp = s0_ * std::exp(x);
36 Real result = (*payoff_)(temp);
38 std::exp(-(x - drift_)*(x -drift_)/(2.0*variance_)) ;
41 ext::shared_ptr<Payoff> payoff_;
49 : process_(
std::move(process)) {
56 "not an European Option");
58 ext::shared_ptr<StrikedTypePayoff> payoff =
59 ext::dynamic_pointer_cast<StrikedTypePayoff>(arguments_.payoff);
60 QL_REQUIRE(payoff,
"non-striked payoff given");
63 process_->blackVolatility()->blackVariance(
64 arguments_.exercise->lastDate(), payoff->strike());
68 arguments_.exercise->lastDate());
70 process_->riskFreeRate()->discount(arguments_.exercise->lastDate());
71 Rate drift = std::log(dividendDiscount/riskFreeDiscount)-0.5*variance;
73 Integrand f(arguments_.payoff,
78 Real infinity = 10.0*std::sqrt(variance);
81 arguments_.exercise->lastDate()) /
82 std::sqrt(2.0*M_PI*variance) *
83 integrator(f, drift-infinity, drift+infinity);
void calculate() const override
IntegralEngine(ext::shared_ptr< GeneralizedBlackScholesProcess >)
ext::shared_ptr< GeneralizedBlackScholesProcess > process_
Integral of a one-dimensional function.
Real DiscountFactor
discount factor between dates