/usr/include/ql/experimental/swaptions/irregularswaption.hpp is in libquantlib0-dev 1.7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb
Copyright (C) 2006 Cristina Duminuco
Copyright (C) 2006 Marco Bianchetti
Copyright (C) 2007 StatPro Italia srl
Copyright (C) 2010 Andre Miemiec
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
<quantlib-dev@lists.sf.net>. The license is also available online at
<http://quantlib.org/license.shtml>.
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 irregularswaption.hpp
\brief Irregular swaption class
*/
#ifndef quantlib_instruments_irregular_swaption_hpp
#define quantlib_instruments_irregular_swaption_hpp
#include <ql/option.hpp>
#include <ql/experimental/swaptions/irregularswap.hpp>
#include <ql/termstructures/yieldtermstructure.hpp>
namespace QuantLib {
//! %settlement information
struct IrregularSettlement {
enum Type { Physical, Cash };
};
std::ostream& operator<<(std::ostream& out,
IrregularSettlement::Type type);
//! Irregular %Swaption class
/*! \ingroup instruments */
class IrregularSwaption : public Option {
public:
class arguments;
class engine;
IrregularSwaption(const boost::shared_ptr<IrregularSwap>& swap,
const boost::shared_ptr<Exercise>& exercise,
IrregularSettlement::Type delivery = IrregularSettlement::Physical);
//! \name Instrument interface
//@{
bool isExpired() const;
void setupArguments(PricingEngine::arguments*) const;
//@}
//! \name Inspectors
//@{
IrregularSettlement::Type settlementType() const { return settlementType_; }
IrregularSwap::Type type() const { return swap_->type(); }
const boost::shared_ptr<IrregularSwap>& underlyingSwap() const {
return swap_;
}
//@}
//! implied volatility
Volatility impliedVolatility(
Real price,
const Handle<YieldTermStructure>& discountCurve,
Volatility guess,
Real accuracy = 1.0e-4,
Natural maxEvaluations = 100,
Volatility minVol = 1.0e-7,
Volatility maxVol = 4.0) const;
private:
// arguments
boost::shared_ptr<IrregularSwap> swap_;
IrregularSettlement::Type settlementType_;
};
//! %Arguments for irregular-swaption calculation
class IrregularSwaption::arguments : public IrregularSwap::arguments,
public Option::arguments {
public:
arguments() : settlementType(IrregularSettlement::Physical) {}
boost::shared_ptr<IrregularSwap> swap;
IrregularSettlement::Type settlementType;
void validate() const;
};
//! base class for irregular-swaption engines
class IrregularSwaption::engine
: public GenericEngine<IrregularSwaption::arguments, IrregularSwaption::results> {};
}
#endif
|