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 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
/*
Copyright (C) 2000, 2001, 2002 RiskMap srl
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 ferdinando@ametrano.net
The license is also available online at http://quantlib.org/html/license.html
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 flatforward.hpp
\brief flat forward rate term structure
\fullpath
ql/TermStructures/%flatforward.hpp
*/
// $Id: flatforward.hpp,v 1.11 2002/01/16 14:41:05 nando Exp $
#ifndef quantlib_flat_forward_curve_h
#define quantlib_flat_forward_curve_h
#include <ql/termstructure.hpp>
#include <ql/dataformatters.hpp>
namespace QuantLib {
namespace TermStructures {
class FlatForward : public TermStructure {
public:
// constructor
FlatForward(Currency currency,
const DayCounter& dayCounter,
const Date& todaysDate, const Calendar& calendar,
int settlementDays, Rate forward);
// inspectors
Currency currency() const;
DayCounter dayCounter() const;
Date todaysDate() const;
int settlementDays() const;
Calendar calendar() const;
Date settlementDate() const;
Date maxDate() const;
Date minDate() const;
Time maxTime() const;
Time minTime() const;
protected:
Rate zeroYieldImpl(Time, bool extrapolate = false) const;
DiscountFactor discountImpl(Time,
bool extrapolate = false) const;
Rate forwardImpl(Time, bool extrapolate = false) const;
private:
Currency currency_;
DayCounter dayCounter_;
Date todaysDate_;
Calendar calendar_;
int settlementDays_;
Date settlementDate_;
Rate forward_;
};
// inline definitions
inline FlatForward::FlatForward(Currency currency,
const DayCounter& dayCounter, const Date& todaysDate,
const Calendar& calendar, int settlementDays,
Rate forward)
: currency_(currency), dayCounter_(dayCounter),
todaysDate_(todaysDate), calendar_(calendar),
settlementDays_(settlementDays), forward_(forward) {
settlementDate_ = calendar_.advance(
todaysDate_,settlementDays_,Days);
}
inline Currency FlatForward::currency() const {
return currency_;
}
inline DayCounter FlatForward::dayCounter() const {
return dayCounter_;
}
inline Date FlatForward::todaysDate() const {
return todaysDate_;
}
inline Calendar FlatForward::calendar() const {
return calendar_;
}
inline int FlatForward::settlementDays() const {
return settlementDays_;
}
inline Date FlatForward::settlementDate() const {
return settlementDate_;
}
inline Date FlatForward::maxDate() const {
return Date::maxDate();
}
inline Date FlatForward::minDate() const {
return settlementDate_;
}
inline Time FlatForward::maxTime() const {
return dayCounter().yearFraction(
settlementDate(), Date::maxDate());
}
inline Time FlatForward::minTime() const {
return 0.0;
}
inline Rate FlatForward::zeroYieldImpl(Time t, bool) const {
// no forward limit on time
QL_REQUIRE(t >= 0.0,
"FlatForward: zero yield requested for negative time (" +
DoubleFormatter::toString(t) + ")");
return forward_;
}
inline DiscountFactor FlatForward::discountImpl(Time t, bool) const {
// no forward limit on time
QL_REQUIRE(t >= 0.0,
"FlatForward: discount requested for negative time (" +
DoubleFormatter::toString(t) + ")");
return DiscountFactor(QL_EXP(-forward_*t));
}
inline Rate FlatForward::forwardImpl(Time t, bool) const {
// no forward limit on time
QL_REQUIRE(t >= 0.0,
"FlatForward: forward requested for negative time (" +
DoubleFormatter::toString(t) + ")");
return forward_;
}
}
}
#endif
|