/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2013, 2018 Peter Caspers 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 . The license is also available online at . 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 floatfloatswaption.hpp \brief floatfloatswaption class */ #ifndef quantlib_instruments_floatfloatswaption_hpp #define quantlib_instruments_floatfloatswaption_hpp #include #include #include #include #include #include #include namespace QuantLib { //! floatfloat swaption class /*! \ingroup instruments */ class FloatFloatSwaption : public Option { public: class arguments; class engine; FloatFloatSwaption( const ext::shared_ptr& swap, const ext::shared_ptr& exercise, Settlement::Type delivery = Settlement::Physical, Settlement::Method settlementMethod = Settlement::PhysicalOTC); //! \name Instrument interface //@{ bool isExpired() const; void setupArguments(PricingEngine::arguments *) const; //@} //! \name Inspectors //@{ Settlement::Type settlementType() const { return settlementType_; } Settlement::Method settlementMethod() const { return settlementMethod_; } VanillaSwap::Type type() const { return swap_->type(); } const ext::shared_ptr &underlyingSwap() const { return swap_; } //@} Disposable > > calibrationBasket(const ext::shared_ptr& standardSwapBase, const ext::shared_ptr& swaptionVolatility, BasketGeneratingEngine::CalibrationBasketType basketType = BasketGeneratingEngine::MaturityStrikeByDeltaGamma) const; private: // arguments ext::shared_ptr swap_; Settlement::Type settlementType_; Settlement::Method settlementMethod_; }; //! %Arguments for cms swaption calculation class FloatFloatSwaption::arguments : public FloatFloatSwap::arguments, public Option::arguments { public: arguments() {} ext::shared_ptr swap; Settlement::Type settlementType; Settlement::Method settlementMethod; void validate() const; }; //! base class for cms swaption engines class FloatFloatSwaption::engine : public GenericEngine {}; } #endif