1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2015 Johannes Göttker-Schnetmann 5 Copyright (C) 2015 Klaus Spanderen 6 7 This file is part of QuantLib, a free-software/open-source library 8 for financial quantitative analysts and developers - http://quantlib.org/ 9 10 QuantLib is free software: you can redistribute it and/or modify it 11 under the terms of the QuantLib license. You should have received a 12 copy of the license along with this program; if not, please email 13 <quantlib-dev@lists.sf.net>. The license is also available online at 14 <http://quantlib.org/license.shtml>. 15 16 This program is distributed in the hope that it will be useful, but WITHOUT 17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 18 FOR A PARTICULAR PURPOSE. See the license for more details. 19 */ 20 21 /*! \file hestonrndcalculator.hpp 22 \brief risk neutral terminal density calculator for the 23 Heston stochastic volatility model 24 */ 25 26 #ifndef quantlib_heston_risk_neutral_density_calculator_hpp 27 #define quantlib_heston_risk_neutral_density_calculator_hpp 28 29 #include <ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp> 30 #include <ql/shared_ptr.hpp> 31 32 namespace QuantLib { 33 class HestonProcess; 34 35 //! Risk neutral terminal probability density for the Heston model 36 37 /*! References: 38 39 The formulas are taken from A. Dragulescu, V. Yakovenko, 2002. 40 Probability distribution of returns in the Heston model 41 with stochastic volatility. 42 http://arxiv.org/pdf/cond-mat/0203046.pdf 43 */ 44 45 class HestonRNDCalculator : public RiskNeutralDensityCalculator { 46 public: 47 explicit HestonRNDCalculator(const ext::shared_ptr<HestonProcess>& hestonProcess, 48 Real integrationEps = 1e-6, 49 Size maxIntegrationIterations = 10000UL); 50 51 // x=ln(S) 52 Real pdf(Real x, Time t) const; 53 Real cdf(Real x, Time t) const; 54 Real invcdf(Real q, Time t) const; 55 56 private: 57 Real x_t(Real x, Time t) const; 58 59 const ext::shared_ptr<HestonProcess> hestonProcess_; 60 const Real x0_; 61 const Real integrationEps_; 62 const Size maxIntegrationIterations_; 63 }; 64 } 65 66 #endif 67