1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2007 Ferdinando Ametrano 5 Copyright (C) 2007 Giorgio Facchinetti 6 Copyright (C) 2015 Peter Caspers 7 8 This file is part of QuantLib, a free-software/open-source library 9 for financial quantitative analysts and developers - http://quantlib.org/ 10 11 QuantLib is free software: you can redistribute it and/or modify it 12 under the terms of the QuantLib license. You should have received a 13 copy of the license along with this program; if not, please email 14 <quantlib-dev@lists.sf.net>. The license is also available online at 15 <http://quantlib.org/license.shtml>. 16 17 This program is distributed in the hope that it will be useful, but WITHOUT 18 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 19 FOR A PARTICULAR PURPOSE. See the license for more details. 20 */ 21 22 /*! \file optionletstripper.hpp 23 \brief optionlet (caplet/floorlet) volatility stripper 24 */ 25 26 #ifndef quantlib_optionletstripper_hpp 27 #define quantlib_optionletstripper_hpp 28 29 #include <ql/termstructures/volatility/optionlet/strippedoptionletbase.hpp> 30 #include <ql/termstructures/volatility/capfloor/capfloortermvolsurface.hpp> 31 #include <ql/termstructures/volatility/volatilitytype.hpp> 32 #include <ql/termstructures/yieldtermstructure.hpp> 33 34 namespace QuantLib { 35 36 class IborIndex; 37 38 /*! StrippedOptionletBase specialization. It's up to derived 39 classes to implement LazyObject::performCalculations 40 */ 41 class OptionletStripper : public StrippedOptionletBase { 42 public: 43 //! \name StrippedOptionletBase interface 44 //@{ 45 const std::vector<Rate>& optionletStrikes(Size i) const; 46 const std::vector<Volatility>& optionletVolatilities(Size i) const; 47 48 const std::vector<Date>& optionletFixingDates() const; 49 const std::vector<Time>& optionletFixingTimes() const; 50 Size optionletMaturities() const; 51 52 const std::vector<Rate>& atmOptionletRates() const; 53 54 DayCounter dayCounter() const; 55 Calendar calendar() const; 56 Natural settlementDays() const; 57 BusinessDayConvention businessDayConvention() const; 58 //@} 59 60 const std::vector<Period>& optionletFixingTenors() const; 61 const std::vector<Date>& optionletPaymentDates() const; 62 const std::vector<Time>& optionletAccrualPeriods() const; 63 ext::shared_ptr<CapFloorTermVolSurface> termVolSurface() const; 64 ext::shared_ptr<IborIndex> iborIndex() const; 65 Real displacement() const; 66 VolatilityType volatilityType() const; 67 68 protected: 69 OptionletStripper(const ext::shared_ptr<CapFloorTermVolSurface>&, 70 const ext::shared_ptr<IborIndex>& iborIndex_, 71 const Handle<YieldTermStructure>& discount = Handle<YieldTermStructure>(), 72 VolatilityType type = ShiftedLognormal, 73 Real displacement = 0.0); 74 ext::shared_ptr<CapFloorTermVolSurface> termVolSurface_; 75 ext::shared_ptr<IborIndex> iborIndex_; 76 Handle<YieldTermStructure> discount_; 77 Size nStrikes_; 78 Size nOptionletTenors_; 79 80 mutable std::vector<std::vector<Rate> > optionletStrikes_; 81 mutable std::vector<std::vector<Volatility> > optionletVolatilities_; 82 83 mutable std::vector<Time> optionletTimes_; 84 mutable std::vector<Date> optionletDates_; 85 std::vector<Period> optionletTenors_; 86 mutable std::vector<Rate> atmOptionletRate_; 87 mutable std::vector<Date> optionletPaymentDates_; 88 mutable std::vector<Time> optionletAccrualPeriods_; 89 90 std::vector<Period> capFloorLengths_; 91 const VolatilityType volatilityType_; 92 const Real displacement_; 93 }; 94 95 } 96 97 #endif 98