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 bsmrndcalculator.hpp 22 \brief risk neutral terminal density calculator for the 23 Black-Scholes-Merton model with constant volatility 24 */ 25 26 #ifndef quantlib_bsm_risk_neutral_density_calculator_hpp 27 #define quantlib_bsm_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 GeneralizedBlackScholesProcess; 34 35 class BSMRNDCalculator : public RiskNeutralDensityCalculator { 36 public: 37 explicit BSMRNDCalculator( 38 const ext::shared_ptr<GeneralizedBlackScholesProcess>& process); 39 40 // x = ln(S) 41 Real pdf(Real x, Time t) const; 42 Real cdf(Real x, Time t) const; 43 Real invcdf(Real q, Time t) const; 44 45 private: 46 std::pair<Real, Volatility> distributionParams(Real x, Time t) const; 47 48 const ext::shared_ptr<GeneralizedBlackScholesProcess> process_; 49 }; 50 } 51 52 #endif 53