1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb 5 Copyright (C) 2013 Peter Caspers 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 jamshidianswaptionengine.hpp 22 \brief Swaption engine using Jamshidian's decomposition 23 Concerning the start delay cf. http://ssrn.com/abstract=2246054 24 */ 25 26 #ifndef quantlib_pricers_jamshidian_swaption_hpp 27 #define quantlib_pricers_jamshidian_swaption_hpp 28 29 #include <ql/instruments/swaption.hpp> 30 #include <ql/models/shortrate/onefactormodel.hpp> 31 #include <ql/pricingengines/genericmodelengine.hpp> 32 33 namespace QuantLib { 34 35 //! Jamshidian swaption engine 36 /*! \ingroup swaptionengines 37 \warning The engine might assume that the exercise date equals the 38 start date of the passed swap unless the model provides 39 an implementation of the discountBondOption method with 40 start delay 41 */ 42 43 class JamshidianSwaptionEngine 44 : public GenericModelEngine<OneFactorAffineModel, 45 Swaption::arguments, 46 Swaption::results > { 47 public: 48 /*! \note the term structure is only needed when the short-rate 49 model cannot provide one itself. 50 */ JamshidianSwaptionEngine(const ext::shared_ptr<OneFactorAffineModel> & model,const Handle<YieldTermStructure> & termStructure=Handle<YieldTermStructure> ())51 JamshidianSwaptionEngine( 52 const ext::shared_ptr<OneFactorAffineModel>& model, 53 const Handle<YieldTermStructure>& termStructure = 54 Handle<YieldTermStructure>()) 55 : GenericModelEngine<OneFactorAffineModel, 56 Swaption::arguments, 57 Swaption::results>(model), 58 termStructure_(termStructure) { 59 registerWith(termStructure_); 60 } 61 void calculate() const; 62 private: 63 Handle<YieldTermStructure> termStructure_; 64 class rStarFinder; 65 friend class rStarFinder; 66 }; 67 68 } 69 70 71 #endif 72 73