Skip to content

Commit

Permalink
Reuse CPI code in zero-inflation cashflow
Browse files Browse the repository at this point in the history
  • Loading branch information
lballabio committed Feb 16, 2022
1 parent 8bad5b0 commit 1869520
Showing 1 changed file with 4 additions and 20 deletions.
24 changes: 4 additions & 20 deletions ql/cashflows/zeroinflationcashflow.cpp
Expand Up @@ -55,34 +55,18 @@ namespace QuantLib {

Real ZeroInflationCashFlow::amount() const {

auto baseDatePeriod = inflationPeriod(baseDate(), zeroInflationIndex()->frequency());
auto fixingDatePeriod = inflationPeriod(fixingDate(), zeroInflationIndex()->frequency());

Real I0, I1;

if (observationInterpolation_ == CPI::AsIndex) {
I0 = zeroInflationIndex_->fixing(baseDate());
I1 = zeroInflationIndex_->fixing(fixingDate());
} else if (observationInterpolation_ == CPI::Linear) {
auto getInterpolatedFixing = [this](const std::pair<Date, Date>& fixingPeriod,
const Date& date) -> Real {
auto oneDay = Period(1, Days);
auto startIndex = zeroInflationIndex_->fixing(fixingPeriod.first);
auto endIndex = zeroInflationIndex_->fixing(fixingPeriod.second + oneDay);

auto interpolationPeriod = inflationPeriod(date, zeroInflationIndex()->frequency());

return startIndex + (endIndex - startIndex) * (date - interpolationPeriod.first) /
(Real)((interpolationPeriod.second + oneDay) - interpolationPeriod.first);
};

I0 = getInterpolatedFixing(baseDatePeriod, startDate_);
I1 = getInterpolatedFixing(fixingDatePeriod, endDate_);
I0 = CPI::interpolatedFixing(zeroInflationIndex_, startDate_, observationLag_);
I1 = CPI::interpolatedFixing(zeroInflationIndex_, endDate_, observationLag_);
} else if (observationInterpolation_ == CPI::Flat) {
I0 = zeroInflationIndex_->fixing(baseDatePeriod.first);
I1 = zeroInflationIndex_->fixing(fixingDatePeriod.first);
I0 = CPI::flatFixing(zeroInflationIndex_, startDate_, observationLag_);
I1 = CPI::flatFixing(zeroInflationIndex_, endDate_, observationLag_);
} else {
// We should not end up here...
QL_FAIL("Unknown ZeroInflationInterpolationType.");
}

Expand Down

0 comments on commit 1869520

Please sign in to comment.