1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2008 Ferdinando Ametrano
5 Copyright (C) 2004, 2005, 2007 StatPro Italia srl
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 constantoptionletvol.hpp
23 \brief Constant caplet/floorlet volatility
24*/
25
26#ifndef quantlib_caplet_constant_volatility_hpp
27#define quantlib_caplet_constant_volatility_hpp
28
29#include <ql/termstructures/volatility/optionlet/optionletvolatilitystructure.hpp>
30
31namespace QuantLib {
32
33 class Quote;
34
35 //! Constant caplet volatility, no time-strike dependence
36 class ConstantOptionletVolatility : public OptionletVolatilityStructure {
37 public:
38 //! floating reference date, floating market data
39 ConstantOptionletVolatility(Natural settlementDays,
40 const Calendar& cal,
41 BusinessDayConvention bdc,
42 Handle<Quote> volatility,
43 const DayCounter& dc,
44 VolatilityType type = ShiftedLognormal,
45 Real displacement = 0.0);
46 //! fixed reference date, floating market data
47 ConstantOptionletVolatility(const Date& referenceDate,
48 const Calendar& cal,
49 BusinessDayConvention bdc,
50 Handle<Quote> volatility,
51 const DayCounter& dc,
52 VolatilityType type = ShiftedLognormal,
53 Real displacement = 0.0);
54 //! floating reference date, fixed market data
55 ConstantOptionletVolatility(Natural settlementDays, const Calendar &cal,
56 BusinessDayConvention bdc,
57 Volatility volatility, const DayCounter &dc,
58 VolatilityType type = ShiftedLognormal,
59 Real displacement = 0.0);
60 //! fixed reference date, fixed market data
61 ConstantOptionletVolatility(const Date &referenceDate,
62 const Calendar &cal,
63 BusinessDayConvention bdc,
64 Volatility volatility, const DayCounter &dc,
65 VolatilityType type = ShiftedLognormal,
66 Real displacement = 0.0);
67 //! \name TermStructure interface
68 //@{
69 Date maxDate() const override;
70 //@}
71 //! \name VolatilityTermStructure interface
72 //@{
73 Real minStrike() const override;
74 Real maxStrike() const override;
75 //@}
76 VolatilityType volatilityType() const override;
77 Real displacement() const override;
78
79 protected:
80 ext::shared_ptr<SmileSection> smileSectionImpl(const Date& d) const override;
81 ext::shared_ptr<SmileSection> smileSectionImpl(Time) const override;
82 Volatility volatilityImpl(Time, Rate) const override;
83
84 private:
85 Handle<Quote> volatility_;
86 VolatilityType type_;
87 Real displacement_;
88 };
89
90
91 // inline definitions
92
93 inline Date ConstantOptionletVolatility::maxDate() const {
94 return Date::maxDate();
95 }
96
97 inline Real ConstantOptionletVolatility::minStrike() const {
98 return QL_MIN_REAL;
99 }
100
101 inline Real ConstantOptionletVolatility::maxStrike() const {
102 return QL_MAX_REAL;
103 }
104
105 inline VolatilityType
106 ConstantOptionletVolatility::volatilityType() const {
107 return type_;
108 }
109
110 inline Real ConstantOptionletVolatility::displacement() const {
111 return displacement_;
112 }
113}
114
115#endif
116

source code of quantlib/ql/termstructures/volatility/optionlet/constantoptionletvol.hpp