Skip to content

Commit dc5fc53

Browse files
pcaspersjenkins
authored andcommitted
QPR-12325 add cache to parametric smile section, update comment
1 parent 219c318 commit dc5fc53

3 files changed

Lines changed: 6 additions & 3 deletions

File tree

QuantExt/qle/termstructures/parametricvolatilitysmilesection.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ ParametricVolatilitySmileSection::ParametricVolatilitySmileSection(
3030
Real ParametricVolatilitySmileSection::atmLevel() const { return atmLevel_; }
3131

3232
Real ParametricVolatilitySmileSection::volatilityImpl(Rate strike) const {
33-
return parametricVolatility_->evaluate(optionTime_, swapLength_, strike, atmLevel_, outputMarketQuoteType_);
33+
if(auto v = cache_.find(strike); v!= cache_end())
34+
return v->second;
35+
Real tmp = parametricVolatility_->evaluate(optionTime_, swapLength_, strike, atmLevel_, outputMarketQuoteType_);
36+
cache_[strike] = tmp;
37+
return tmp;
3438
}
3539

3640
} // namespace QuantExt

QuantExt/qle/termstructures/parametricvolatilitysmilesection.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class ParametricVolatilitySmileSection : public QuantLib::SmileSection {
4545
Real optionTime_, swapLength_, atmLevel_;
4646
boost::shared_ptr<ParametricVolatility> parametricVolatility_;
4747
ParametricVolatility::MarketQuoteType outputMarketQuoteType_;
48+
mutable std::map<Real, Real> cache_;
4849
};
4950

5051
} // namespace QuantExt

QuantExt/qle/termstructures/sabrparametricvolatility.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -595,8 +595,6 @@ Real SabrParametricVolatility::evaluate(const Real timeToExpiry, const Real unde
595595
const Real outputLognormalShift,
596596
const boost::optional<QuantLib::Option::Type> outputOptionType) const {
597597

598-
// TODO add caching
599-
600598
Real alpha = alphaInterpolation_(timeToExpiry, underlyingLength);
601599
Real beta = betaInterpolation_(timeToExpiry, underlyingLength);
602600
Real nu = nuInterpolation_(timeToExpiry, underlyingLength);

0 commit comments

Comments
 (0)