Coverage Report

Created: 2026-09-28 06:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quantlib/ql/pricingengines/swaption/jamshidianswaptionengine.hpp
Line
Count
Source
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
 <https://www.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
#include <utility>
33
34
namespace QuantLib {
35
36
    //! Jamshidian swaption engine
37
    /*! \ingroup swaptionengines
38
        \warning The engine might assume that the exercise date equals the
39
                 start date of the passed swap unless the model provides
40
                 an implementation of the discountBondOption method with
41
                 start delay 
42
    */
43
44
    class JamshidianSwaptionEngine
45
        : public GenericModelEngine<OneFactorAffineModel,
46
                                    Swaption::arguments,
47
                                    Swaption::results > {
48
      public:
49
        /*! \note the term structure is only needed when the short-rate
50
                  model cannot provide one itself.
51
        */
52
        explicit JamshidianSwaptionEngine(
53
            const ext::shared_ptr<OneFactorAffineModel>& model,
54
            Handle<YieldTermStructure> termStructure = Handle<YieldTermStructure>())
55
        : GenericModelEngine<OneFactorAffineModel, Swaption::arguments, Swaption::results>(model),
56
0
          termStructure_(std::move(termStructure)) {
57
0
            registerWith(termStructure_);
58
0
        }
59
        void calculate() const override;
60
61
      private:
62
        Handle<YieldTermStructure> termStructure_;
63
        class rStarFinder;
64
    };
65
66
}
67
68
69
#endif
70