/usr/include/ql/indexes/iborindex.hpp is in libquantlib0-dev 1.7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 StatPro Italia srl
Copyright (C) 2009 Ferdinando Ametrano
This file is part of QuantLib, a free-software/open-source library
for financial quantitative analysts and developers - http://quantlib.org/
QuantLib is free software: you can redistribute it and/or modify it
under the terms of the QuantLib license. You should have received a
copy of the license along with this program; if not, please email
<quantlib-dev@lists.sf.net>. The license is also available online at
<http://quantlib.org/license.shtml>.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the license for more details.
*/
/*! \file iborindex.hpp
\brief base class for Inter-Bank-Offered-Rate indexes
*/
#ifndef quantlib_ibor_index_hpp
#define quantlib_ibor_index_hpp
#include <ql/indexes/interestrateindex.hpp>
#include <ql/termstructures/yieldtermstructure.hpp>
namespace QuantLib {
//! base class for Inter-Bank-Offered-Rate indexes (e.g. %Libor, etc.)
class IborIndex : public InterestRateIndex {
public:
IborIndex(const std::string& familyName,
const Period& tenor,
Natural settlementDays,
const Currency& currency,
const Calendar& fixingCalendar,
BusinessDayConvention convention,
bool endOfMonth,
const DayCounter& dayCounter,
const Handle<YieldTermStructure>& h =
Handle<YieldTermStructure>());
//! \name InterestRateIndex interface
//@{
Date maturityDate(const Date& valueDate) const;
Rate forecastFixing(const Date& fixingDate) const;
// @}
//! \name Inspectors
//@{
BusinessDayConvention businessDayConvention() const;
bool endOfMonth() const { return endOfMonth_; }
//! the curve used to forecast fixings
Handle<YieldTermStructure> forwardingTermStructure() const;
//@}
//! \name Other methods
//@{
//! returns a copy of itself linked to a different forwarding curve
virtual boost::shared_ptr<IborIndex> clone(
const Handle<YieldTermStructure>& forwarding) const;
// @}
protected:
BusinessDayConvention convention_;
Handle<YieldTermStructure> termStructure_;
bool endOfMonth_;
private:
// overload to avoid date/time (re)calculation
/* This can be called with cached coupon dates (and it does
give quite a performance boost to coupon calculations) but
is potentially misleading: by passing the wrong dates, one
can ask a 6-months index for a 1-year fixing.
For that reason, we're leaving this method private and
we're declaring the IborCoupon class (which uses it) as a
friend. Should the need arise, we might promote it to
public, but before doing that I'd think hard whether we
have any other way to get the same results.
*/
Rate forecastFixing(const Date& valueDate,
const Date& endDate,
Time t) const;
friend class IborCoupon;
};
class OvernightIndex : public IborIndex {
public:
OvernightIndex(const std::string& familyName,
Natural settlementDays,
const Currency& currency,
const Calendar& fixingCalendar,
const DayCounter& dayCounter,
const Handle<YieldTermStructure>& h =
Handle<YieldTermStructure>());
//! returns a copy of itself linked to a different forwarding curve
boost::shared_ptr<IborIndex> clone(
const Handle<YieldTermStructure>& h) const;
};
// inline
inline BusinessDayConvention IborIndex::businessDayConvention() const {
return convention_;
}
inline Handle<YieldTermStructure>
IborIndex::forwardingTermStructure() const {
return termStructure_;
}
inline Rate IborIndex::forecastFixing(const Date& d1,
const Date& d2,
Time t) const {
QL_REQUIRE(!termStructure_.empty(),
"null term structure set to this instance of " << name());
DiscountFactor disc1 = termStructure_->discount(d1);
DiscountFactor disc2 = termStructure_->discount(d2);
return (disc1/disc2 - 1.0) / t;
}
}
#endif
|