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