1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2014 Klaus Spanderen 5 6 This file is part of QuantLib, a free-software/open-source library 7 for financial quantitative analysts and developers - http://quantlib.org/ 8 9 QuantLib is free software: you can redistribute it and/or modify it 10 under the terms of the QuantLib license. You should have received a 11 copy of the license along with this program; if not, please email 12 <quantlib-dev@lists.sf.net>. The license is also available online at 13 <http://quantlib.org/license.shtml>. 14 15 This program is distributed in the hope that it will be useful, but WITHOUT 16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 17 FOR A PARTICULAR PURPOSE. See the license for more details. 18 */ 19 20 /*! \file analyticpdfhestonengine.hpp 21 \brief Analytic engine for arbitrary European payoffs under the Heston model 22 */ 23 24 #ifndef quantlib_analytic_pdf_heston_engine_hpp 25 #define quantlib_analytic_pdf_heston_engine_hpp 26 27 #include <ql/instruments/vanillaoption.hpp> 28 #include <ql/models/equity/hestonmodel.hpp> 29 #include <ql/pricingengines/genericmodelengine.hpp> 30 31 namespace QuantLib { 32 33 //! Analytic engine for arbitrary European payoffs under the Heston model 34 35 /*! References: 36 37 The formulas are taken from A. Dragulescu, V. Yakovenko, 2002. 38 Probability distribution of returns in the Heston model 39 with stochastic volatility. 40 http://arxiv.org/pdf/cond-mat/0203046.pdf 41 42 \test the correctness of the returned value is tested by 43 reproducing digital prices using call spreads and the 44 AnalyticHestonEngine. 45 46 */ 47 class AnalyticPDFHestonEngine 48 : public GenericModelEngine<HestonModel, 49 VanillaOption::arguments, 50 VanillaOption::results> { 51 public: 52 explicit AnalyticPDFHestonEngine(const ext::shared_ptr<HestonModel>& model, 53 Real gaussLobattoEps = 1e-6, 54 Size gaussLobattoIntegrationOrder = 10000UL); 55 void calculate() const; 56 57 58 // probability in x_t = ln(s_t) 59 Real Pv(Real x_t, Time t) const; 60 61 // cumulative distribution function Pr(x < X) 62 Real cdf(Real X, Time t) const; 63 64 private: 65 Real weightedPayoff(Real x_t, Time t) const; 66 67 const Size maxIntegrationIterations_; 68 const Real integrationEps_; 69 70 const ext::shared_ptr<HestonModel> model_; 71 }; 72 } 73 74 75 #endif 76