1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2018 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 cevrndcalculator.hpp 21 \brief risk neutral density calculator for the 22 constant elasticity of variance (CEV) model 23 */ 24 25 #ifndef quantlib_cev_rnd_calculator_hpp 26 #define quantlib_cev_rnd_calculator_hpp 27 28 #include <ql/methods/finitedifferences/utilities/riskneutraldensitycalculator.hpp> 29 30 namespace QuantLib { 31 //! constant elasticity of variance process (absorbing boundary at f=0) 32 /*! \f[ 33 df_t = \alpha f_t^\beta \mathrm{d}W_t 34 \f] 35 */ 36 37 /*! References: 38 39 D.R. Brecher, A.E. Lindsay, Results on the CEV Process, Past and Present 40 https://www.fincad.com/sites/default/files/wysiwyg/Resources-Wiki/cev-process-working-paper.pdf 41 */ 42 43 class CEVRNDCalculator : public RiskNeutralDensityCalculator { 44 public: 45 CEVRNDCalculator(Real f0, Real alpha, Real beta); 46 47 Real massAtZero(Time t) const; 48 49 Real pdf(Real f, Time t) const; 50 Real cdf(Real f, Time t) const; 51 Real invcdf(Real q, Time t) const; 52 53 private: 54 Real X(Real f) const; 55 Real invX(Real f) const; 56 Real sankaranApprox(Real f, Time t, Real x) const; 57 58 const Real f0_, alpha_, beta_, delta_, x0_; 59 }; 60 } 61 62 #endif 63