/usr/include/ql/pricingengines/swaption/gaussian1dfloatfloatswaptionengine.hpp is in libquantlib0-dev 1.12-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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2013, 2015 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 liense. 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 gaussian1dfloatfloatswaptionengine.hpp
\brief float float swaption engine for one factor interest rate models
*/
#ifndef quantlib_pricers_gaussian1d_floatfloatswaption_hpp
#define quantlib_pricers_gaussian1d_floatfloatswaption_hpp
#include <ql/instruments/floatfloatswaption.hpp>
#include <ql/models/shortrate/onefactormodels/gaussian1dmodel.hpp>
#include <ql/rebatedexercise.hpp>
#include <ql/pricingengines/genericmodelengine.hpp>
namespace QuantLib {
//! One factor model float float swaption engine
/*! \ingroup swaptionengines
All float coupons with fixing date greater or
equal the respective option expiry are considered
part of the exercise into right. Note that this
is different from the usual accrual start date
greater or equal exercise date if the fixing lag
is strictly greater than the exercise lag (which
should be a rare case). For the redepmtion flows
the criterion is that the associated start date
of the redemption flow (i.e. the start date of
the regular coupon period with same payment date
as the redemption flow) is greater or equal the
exercise date.
The addtional result underlyingValue is the npv
of the underlying (as seen from "today") including
all fixings greater (or greater equal depending
on includeTodaysExercise) today.
*/
class Gaussian1dFloatFloatSwaptionEngine
: public BasketGeneratingEngine,
public GenericModelEngine<Gaussian1dModel,
FloatFloatSwaption::arguments,
FloatFloatSwaption::results> {
public:
enum Probabilities {
None,
Naive,
Digital
};
Gaussian1dFloatFloatSwaptionEngine(
const boost::shared_ptr<Gaussian1dModel> &model,
const int integrationPoints = 64, const Real stddevs = 7.0,
const bool extrapolatePayoff = true,
const bool flatPayoffExtrapolation = false,
const Handle<Quote> &oas =
Handle<Quote>(), // continously compounded w.r.t. yts daycounter
const Handle<YieldTermStructure> &discountCurve =
Handle<YieldTermStructure>(),
const bool includeTodaysExercise = false,
const Probabilities probabilities = None)
: BasketGeneratingEngine(model, oas, discountCurve),
GenericModelEngine<Gaussian1dModel, FloatFloatSwaption::arguments,
FloatFloatSwaption::results>(model),
integrationPoints_(integrationPoints), stddevs_(stddevs),
extrapolatePayoff_(extrapolatePayoff),
flatPayoffExtrapolation_(flatPayoffExtrapolation), model_(model),
oas_(oas), discountCurve_(discountCurve),
includeTodaysExercise_(includeTodaysExercise),
probabilities_(probabilities) {
if (!discountCurve_.empty())
registerWith(discountCurve_);
if (!oas_.empty())
registerWith(oas_);
}
void calculate() const;
Handle<YieldTermStructure> discountingCurve() const {
return discountCurve_.empty() ? model_->termStructure()
: discountCurve_;
}
protected:
Real underlyingNpv(const Date &expiry, const Real y) const;
VanillaSwap::Type underlyingType() const;
const Date underlyingLastDate() const;
const Disposable<Array> initialGuess(const Date &expiry) const;
private:
const int integrationPoints_;
const Real stddevs_;
const bool extrapolatePayoff_, flatPayoffExtrapolation_;
const boost::shared_ptr<Gaussian1dModel> model_;
const Handle<Quote> oas_;
const Handle<YieldTermStructure> discountCurve_;
const bool includeTodaysExercise_;
const Probabilities probabilities_;
const std::pair<Real, Real>
npvs(const Date &expiry, const Real y,
const bool includeExerciseOnxpiry,
const bool considerProbabilities=false) const;
mutable boost::shared_ptr<RebatedExercise> rebatedExercise_;
};
}
#endif
|