Coverage Report

Created: 2026-01-25 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quantlib/ql/indexes/swapindex.hpp
Line
Count
Source
1
/*
2
 Copyright (C) 2006, 2009 Ferdinando Ametrano
3
 Copyright (C) 2006, 2007, 2009 StatPro Italia srl
4
5
 This file is part of QuantLib, a free-software/open-source library
6
 for financial quantitative analysts and developers - http://quantlib.org/
7
8
 QuantLib is free software: you can redistribute it and/or modify it
9
 under the terms of the QuantLib license.  You should have received a
10
 copy of the license along with this program; if not, please email
11
 <quantlib-dev@lists.sf.net>. The license is also available online at
12
 <https://www.quantlib.org/license.shtml>.
13
14
15
 This program is distributed in the hope that it will be useful, but
16
 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17
 or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */
18
19
/*! \file swapindex.hpp
20
    \brief swap-rate indexes
21
*/
22
23
#ifndef quantlib_swapindex_hpp
24
#define quantlib_swapindex_hpp
25
26
#include <ql/indexes/interestrateindex.hpp>
27
#include <ql/termstructures/yieldtermstructure.hpp>
28
#include <ql/cashflows/rateaveraging.hpp>
29
30
namespace QuantLib {
31
32
    class Schedule;
33
34
    class IborIndex;
35
    class VanillaSwap;
36
37
    class OvernightIndex;
38
    class OvernightIndexedSwap;
39
40
    //! base class for swap-rate indexes
41
    class SwapIndex : public InterestRateIndex {
42
      public:
43
        SwapIndex(const std::string& familyName,
44
                  const Period& tenor,
45
                  Natural settlementDays,
46
                  const Currency& currency,
47
                  const Calendar& fixingCalendar,
48
                  const Period& fixedLegTenor,
49
                  BusinessDayConvention fixedLegConvention,
50
                  const DayCounter& fixedLegDayCounter,
51
                  ext::shared_ptr<IborIndex> iborIndex);
52
        SwapIndex(const std::string& familyName,
53
                  const Period& tenor,
54
                  Natural settlementDays,
55
                  const Currency& currency,
56
                  const Calendar& fixingCalendar,
57
                  const Period& fixedLegTenor,
58
                  BusinessDayConvention fixedLegConvention,
59
                  const DayCounter& fixedLegDayCounter,
60
                  ext::shared_ptr<IborIndex> iborIndex,
61
                  Handle<YieldTermStructure> discountingTermStructure);
62
        //! \name InterestRateIndex interface
63
        //@{
64
        Date maturityDate(const Date& valueDate) const override;
65
        //@}
66
        //! \name Inspectors
67
        //@{
68
0
        Period fixedLegTenor() const { return fixedLegTenor_; }
69
        BusinessDayConvention fixedLegConvention() const;
70
0
        ext::shared_ptr<IborIndex> iborIndex() const { return iborIndex_; }
71
        Handle<YieldTermStructure> forwardingTermStructure() const;
72
        Handle<YieldTermStructure> discountingTermStructure() const;
73
        bool exogenousDiscount() const;
74
        /*! \warning Relinking the term structure underlying the index will
75
                     not have effect on the returned swap.
76
        */
77
        ext::shared_ptr<VanillaSwap> underlyingSwap(
78
                                                const Date& fixingDate) const;
79
        //@}
80
        //! \name Other methods
81
        //@{
82
        //! returns a copy of itself linked to a different forwarding curve
83
        virtual ext::shared_ptr<SwapIndex> clone(
84
                        const Handle<YieldTermStructure>& forwarding) const;
85
        //! returns a copy of itself linked to different curves
86
        virtual ext::shared_ptr<SwapIndex> clone(
87
                        const Handle<YieldTermStructure>& forwarding,
88
                        const Handle<YieldTermStructure>& discounting) const;
89
        //! returns a copy of itself with different tenor
90
        virtual ext::shared_ptr<SwapIndex> clone(
91
                        const Period& tenor) const;
92
        // @}
93
      protected:
94
        Rate forecastFixing(const Date& fixingDate) const override;
95
        Period tenor_;
96
        ext::shared_ptr<IborIndex> iborIndex_;
97
        Period fixedLegTenor_;
98
        BusinessDayConvention fixedLegConvention_;
99
        bool exogenousDiscount_;
100
        Handle<YieldTermStructure> discount_;
101
        // cache data to avoid swap recreation when the same fixing date
102
        // is used multiple time to forecast changing fixing
103
        mutable ext::shared_ptr<VanillaSwap> lastSwap_;
104
        mutable Date lastFixingDate_;
105
    };
106
107
108
    //! base class for overnight indexed swap indexes
109
    class OvernightIndexedSwapIndex : public SwapIndex {
110
      public:
111
        OvernightIndexedSwapIndex(
112
                  const std::string& familyName,
113
                  const Period& tenor,
114
                  Natural settlementDays,
115
                  const Currency& currency,
116
                  const ext::shared_ptr<OvernightIndex>& overnightIndex,
117
                  bool telescopicValueDates = false,
118
                  RateAveraging::Type averagingMethod = RateAveraging::Compound);
119
        //! \name Inspectors
120
        //@{
121
        ext::shared_ptr<OvernightIndex> overnightIndex() const;
122
        /*! \warning Relinking the term structure underlying the index will
123
                     not have effect on the returned swap.
124
        */
125
        ext::shared_ptr<OvernightIndexedSwap> underlyingSwap(
126
                                                const Date& fixingDate) const;
127
        //@}
128
      protected:
129
        ext::shared_ptr<OvernightIndex> overnightIndex_;
130
        bool telescopicValueDates_;
131
        RateAveraging::Type averagingMethod_;
132
        // cache data to avoid swap recreation when the same fixing date
133
        // is used multiple time to forecast changing fixing
134
        mutable ext::shared_ptr<OvernightIndexedSwap> lastSwap_;
135
        mutable Date lastFixingDate_;
136
    };
137
138
    // inline definitions
139
140
0
    inline BusinessDayConvention SwapIndex::fixedLegConvention() const {
141
0
        return fixedLegConvention_;
142
0
    }
143
144
0
    inline bool SwapIndex::exogenousDiscount() const {
145
0
        return exogenousDiscount_;
146
0
    }
147
148
    inline ext::shared_ptr<OvernightIndex>
149
0
    OvernightIndexedSwapIndex::overnightIndex() const {
150
0
        return overnightIndex_;
151
0
    }
152
153
}
154
155
#endif