1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
5  Copyright (C) 2003, 2004, 2005, 2006 StatPro Italia srl
6  Copyright (C) 2006 Katiuscia Manzoni
7  Copyright (C) 2006 Chiara Fornarola
8  Copyright (C) 2009 Roland Lichters
9  Copyright (C) 2009 Ferdinando Ametrano
10 
11  This file is part of QuantLib, a free-software/open-source library
12  for financial quantitative analysts and developers - http://quantlib.org/
13 
14  QuantLib is free software: you can redistribute it and/or modify it
15  under the terms of the QuantLib license.  You should have received a
16  copy of the license along with this program; if not, please email
17  <quantlib-dev@lists.sf.net>. The license is also available online at
18  <http://quantlib.org/license.shtml>.
19 
20  This program is distributed in the hope that it will be useful, but WITHOUT
21  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22  FOR A PARTICULAR PURPOSE.  See the license for more details.
23 */
24 
25 /*! \file euribor.hpp
26     \brief %Euribor index
27 */
28 
29 #ifndef quantlib_euribor_hpp
30 #define quantlib_euribor_hpp
31 
32 #include <ql/indexes/iborindex.hpp>
33 
34 namespace QuantLib {
35 
36     //! %Euribor index
37     /*! Euribor rate fixed by the ECB.
38 
39         \warning This is the rate fixed by the ECB. Use EurLibor
40                  if you're interested in the London fixing by BBA.
41     */
42     class Euribor : public IborIndex {
43       public:
44         Euribor(const Period& tenor,
45                 const Handle<YieldTermStructure>& h =
46                                     Handle<YieldTermStructure>());
47     };
48 
49     //! Actual/365 %Euribor index
50     /*! Euribor rate adjusted for the mismatch between the actual/360
51         convention used for Euribor and the actual/365 convention
52         previously used by a few pre-EUR currencies.
53     */
54     class Euribor365 : public IborIndex {
55       public:
56         Euribor365(const Period& tenor,
57                    const Handle<YieldTermStructure>& h =
58                                     Handle<YieldTermStructure>());
59     };
60 
61     //! 1-week %Euribor index
62     class EuriborSW : public Euribor {
63       public:
EuriborSW(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())64         explicit EuriborSW(const Handle<YieldTermStructure>& h =
65                                     Handle<YieldTermStructure>())
66         : Euribor(Period(1, Weeks), h) {}
67     };
68 
69     //! 2-weeks %Euribor index
70     class Euribor2W : public Euribor {
71       public:
Euribor2W(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())72         explicit Euribor2W(const Handle<YieldTermStructure>& h =
73                                     Handle<YieldTermStructure>())
74         : Euribor(Period(2, Weeks), h) {}
75     };
76 
77     //! 3-weeks %Euribor index
78     class Euribor3W : public Euribor {
79       public:
Euribor3W(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())80         explicit Euribor3W(const Handle<YieldTermStructure>& h =
81                                     Handle<YieldTermStructure>())
82         : Euribor(Period(3, Weeks), h) {}
83     };
84 
85     //! 1-month %Euribor index
86     class Euribor1M : public Euribor {
87       public:
Euribor1M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())88         explicit Euribor1M(const Handle<YieldTermStructure>& h =
89                                     Handle<YieldTermStructure>())
90         : Euribor(Period(1, Months), h) {}
91     };
92 
93     //! 2-months %Euribor index
94     class Euribor2M : public Euribor {
95       public:
Euribor2M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())96         explicit Euribor2M(const Handle<YieldTermStructure>& h =
97                                     Handle<YieldTermStructure>())
98         : Euribor(Period(2, Months), h) {}
99     };
100 
101     //! 3-months %Euribor index
102     class Euribor3M : public Euribor {
103       public:
Euribor3M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())104         explicit Euribor3M(const Handle<YieldTermStructure>& h =
105                                     Handle<YieldTermStructure>())
106         : Euribor(Period(3, Months), h) {}
107     };
108 
109     //! 4-months %Euribor index
110     class Euribor4M : public Euribor {
111       public:
Euribor4M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())112         explicit Euribor4M(const Handle<YieldTermStructure>& h =
113                                     Handle<YieldTermStructure>())
114         : Euribor(Period(4, Months), h) {}
115     };
116 
117     //! 5-months %Euribor index
118     class Euribor5M : public Euribor {
119       public:
Euribor5M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())120         explicit Euribor5M(const Handle<YieldTermStructure>& h =
121                                     Handle<YieldTermStructure>())
122         : Euribor(Period(5, Months), h) {}
123     };
124 
125     //! 6-months %Euribor index
126     class Euribor6M : public Euribor {
127       public:
Euribor6M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())128         explicit Euribor6M(const Handle<YieldTermStructure>& h =
129                                     Handle<YieldTermStructure>())
130         : Euribor(Period(6, Months), h) {}
131     };
132 
133     //! 7-months %Euribor index
134     class Euribor7M : public Euribor {
135       public:
Euribor7M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())136         explicit Euribor7M(const Handle<YieldTermStructure>& h =
137                                     Handle<YieldTermStructure>())
138         : Euribor(Period(7, Months), h) {}
139     };
140 
141     //! 8-months %Euribor index
142     class Euribor8M : public Euribor {
143       public:
Euribor8M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())144         explicit Euribor8M(const Handle<YieldTermStructure>& h =
145                                     Handle<YieldTermStructure>())
146         : Euribor(Period(8, Months), h) {}
147     };
148 
149     //! 9-months %Euribor index
150     class Euribor9M : public Euribor {
151       public:
Euribor9M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())152         explicit Euribor9M(const Handle<YieldTermStructure>& h =
153                                     Handle<YieldTermStructure>())
154         : Euribor(Period(9, Months), h) {}
155     };
156 
157     //! 10-months %Euribor index
158     class Euribor10M : public Euribor {
159       public:
Euribor10M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())160         explicit Euribor10M(const Handle<YieldTermStructure>& h =
161                                     Handle<YieldTermStructure>())
162         : Euribor(Period(10, Months), h) {}
163     };
164 
165     //! 11-months %Euribor index
166     class Euribor11M : public Euribor {
167       public:
Euribor11M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())168         explicit Euribor11M(const Handle<YieldTermStructure>& h =
169                                     Handle<YieldTermStructure>())
170         : Euribor(Period(11, Months), h) {}
171     };
172 
173     //! 1-year %Euribor index
174     class Euribor1Y : public Euribor {
175       public:
Euribor1Y(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())176         explicit Euribor1Y(const Handle<YieldTermStructure>& h =
177                                     Handle<YieldTermStructure>())
178         : Euribor(Period(1, Years), h) {}
179     };
180 
181 
182     //! 1-week %Euribor365 index
183     class Euribor365_SW : public Euribor365 {
184       public:
Euribor365_SW(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())185         explicit Euribor365_SW(const Handle<YieldTermStructure>& h =
186                                     Handle<YieldTermStructure>())
187         : Euribor365(Period(1, Weeks), h) {}
188     };
189 
190     //! 2-weeks %Euribor365 index
191     class Euribor365_2W : public Euribor365 {
192       public:
Euribor365_2W(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())193         explicit Euribor365_2W(const Handle<YieldTermStructure>& h =
194                                     Handle<YieldTermStructure>())
195         : Euribor365(Period(2, Weeks), h) {}
196     };
197 
198     //! 3-weeks %Euribor365 index
199     class Euribor365_3W : public Euribor365 {
200       public:
Euribor365_3W(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())201         explicit Euribor365_3W(const Handle<YieldTermStructure>& h =
202                                     Handle<YieldTermStructure>())
203         : Euribor365(Period(3, Weeks), h) {}
204     };
205 
206     //! 1-month %Euribor365 index
207     class Euribor365_1M : public Euribor365 {
208       public:
Euribor365_1M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())209         explicit Euribor365_1M(const Handle<YieldTermStructure>& h =
210                                     Handle<YieldTermStructure>())
211         : Euribor365(Period(1, Months), h) {}
212     };
213 
214     //! 2-months %Euribor365 index
215     class Euribor365_2M : public Euribor365 {
216       public:
Euribor365_2M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())217         explicit Euribor365_2M(const Handle<YieldTermStructure>& h =
218                                     Handle<YieldTermStructure>())
219         : Euribor365(Period(2, Months), h) {}
220     };
221 
222     //! 3-months %Euribor365 index
223     class Euribor365_3M : public Euribor365 {
224       public:
Euribor365_3M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())225         explicit Euribor365_3M(const Handle<YieldTermStructure>& h =
226                                     Handle<YieldTermStructure>())
227         : Euribor365(Period(3, Months), h) {}
228     };
229 
230     //! 4-months %Euribor365 index
231     class Euribor365_4M : public Euribor365 {
232       public:
Euribor365_4M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())233         explicit Euribor365_4M(const Handle<YieldTermStructure>& h =
234                                     Handle<YieldTermStructure>())
235         : Euribor365(Period(4, Months), h) {}
236     };
237 
238     //! 5-months %Euribor365 index
239     class Euribor365_5M : public Euribor365 {
240       public:
Euribor365_5M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())241         explicit Euribor365_5M(const Handle<YieldTermStructure>& h =
242                                     Handle<YieldTermStructure>())
243         : Euribor365(Period(5, Months), h) {}
244     };
245 
246     //! 6-months %Euribor365 index
247     class Euribor365_6M : public Euribor365 {
248       public:
Euribor365_6M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())249         explicit Euribor365_6M(const Handle<YieldTermStructure>& h =
250                                     Handle<YieldTermStructure>())
251         : Euribor365(Period(6, Months), h) {}
252     };
253 
254     //! 7-months %Euribor365 index
255     class Euribor365_7M : public Euribor365 {
256       public:
Euribor365_7M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())257         explicit Euribor365_7M(const Handle<YieldTermStructure>& h =
258                                     Handle<YieldTermStructure>())
259         : Euribor365(Period(7, Months), h) {}
260     };
261 
262     //! 8-months %Euribor365 index
263     class Euribor365_8M : public Euribor365 {
264       public:
Euribor365_8M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())265         explicit Euribor365_8M(const Handle<YieldTermStructure>& h =
266                                     Handle<YieldTermStructure>())
267         : Euribor365(Period(8, Months), h) {}
268     };
269 
270     //! 9-months %Euribor365 index
271     class Euribor365_9M : public Euribor365 {
272       public:
Euribor365_9M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())273         explicit Euribor365_9M(const Handle<YieldTermStructure>& h =
274                                     Handle<YieldTermStructure>())
275         : Euribor365(Period(9, Months), h) {}
276     };
277 
278     //! 10-months %Euribor365 index
279     class Euribor365_10M : public Euribor365 {
280       public:
Euribor365_10M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())281         explicit Euribor365_10M(const Handle<YieldTermStructure>& h =
282                                     Handle<YieldTermStructure>())
283         : Euribor365(Period(10, Months), h) {}
284     };
285 
286     //! 11-months %Euribor365 index
287     class Euribor365_11M : public Euribor365 {
288       public:
Euribor365_11M(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())289         explicit Euribor365_11M(const Handle<YieldTermStructure>& h =
290                                     Handle<YieldTermStructure>())
291         : Euribor365(Period(11, Months), h) {}
292     };
293 
294     //! 1-year %Euribor365 index
295     class Euribor365_1Y : public Euribor365 {
296       public:
Euribor365_1Y(const Handle<YieldTermStructure> & h=Handle<YieldTermStructure> ())297         explicit Euribor365_1Y(const Handle<YieldTermStructure>& h =
298                                     Handle<YieldTermStructure>())
299         : Euribor365(Period(1, Years), h) {}
300     };
301 
302 }
303 
304 #endif
305