Skip to content

Commit

Permalink
Automated fixes by clang-tidy
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored and lballabio committed Nov 6, 2022
1 parent 4a96abc commit 79f6e4f
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 73 deletions.
5 changes: 2 additions & 3 deletions ql/math/integrals/gaussianquadratures.hpp
Expand Up @@ -215,9 +215,8 @@ namespace QuantLib {
public:
explicit GaussianQuadratureIntegrator(Size n);

const ext::shared_ptr<Integration> getIntegration() const {
return integration_;
}
ext::shared_ptr<Integration> getIntegration() const { return integration_; }

private:
Real integrate(const ext::function<Real (Real)>& f,
Real a,
Expand Down
78 changes: 40 additions & 38 deletions ql/pricingengines/vanilla/qdfpamericanengine.cpp
Expand Up @@ -20,15 +20,16 @@
/*! \file qrfpamericanengine.cpp
*/

#include <ql/math/distributions/normaldistribution.hpp>
#include <ql/math/functional.hpp>
#include <ql/math/integrals/gaussianquadratures.hpp>
#include <ql/math/distributions/normaldistribution.hpp>
#include <ql/math/integrals/tanhsinhintegral.hpp>
#include <ql/math/interpolations/chebyshevinterpolation.hpp>
#include <ql/pricingengines/blackcalculator.hpp>
#include <ql/pricingengines/vanilla/qdfpamericanengine.hpp>
#include <ql/math/integrals/tanhsinhintegral.hpp>
#include <utility>
#ifndef QL_BOOST_HAS_TANH_SINH
#include <ql/math/integrals/gausslobattointegral.hpp>
# include <ql/math/integrals/gausslobattointegral.hpp>
#endif

namespace QuantLib {
Expand Down Expand Up @@ -117,13 +118,12 @@ namespace QuantLib {

class DqFpEquation {
public:
DqFpEquation(
Rate _r, Rate _q, Volatility _vol,
std::function<Real(Real)> _B,
ext::shared_ptr<Integrator> _integrator)
: r(_r), q(_q), vol(_vol),
B(std::move(_B)),
integrator(std::move(_integrator)) {
DqFpEquation(Rate _r,
Rate _q,
Volatility _vol,
std::function<Real(Real)> B,
ext::shared_ptr<Integrator> _integrator)
: r(_r), q(_q), vol(_vol), B(std::move(B)), integrator(std::move(_integrator)) {
const auto legendreIntegrator =
ext::dynamic_pointer_cast<GaussLegendreIntegrator>(integrator);

Expand Down Expand Up @@ -159,10 +159,12 @@ namespace QuantLib {

class DqFpEquation_B: public DqFpEquation {
public:
DqFpEquation_B(
Real _K, Rate _r, Rate _q, Volatility _vol,
std::function<Real(Real)> _B,
ext::shared_ptr<Integrator> _integrator);
DqFpEquation_B(Real K,
Rate _r,
Rate _q,
Volatility _vol,
std::function<Real(Real)> B,
ext::shared_ptr<Integrator> _integrator);

std::pair<Real, Real> NDd(Real tau, Real b) const override;
std::tuple<Real, Real, Real> f(Real tau, Real b) const override;
Expand All @@ -173,10 +175,12 @@ namespace QuantLib {

class DqFpEquation_A: public DqFpEquation {
public:
DqFpEquation_A(
Real _K, Rate _r, Rate _q, Volatility _vol,
std::function<Real(Real)> _B,
ext::shared_ptr<Integrator> _integrator);
DqFpEquation_A(Real K,
Rate _r,
Rate _q,
Volatility _vol,
std::function<Real(Real)> B,
ext::shared_ptr<Integrator> _integrator);

std::pair<Real, Real> NDd(Real tau, Real b) const override;
std::tuple<Real, Real, Real> f(Real tau, Real b) const override;
Expand All @@ -185,13 +189,13 @@ namespace QuantLib {
const Real K;
};

DqFpEquation_A::DqFpEquation_A(
Real _K, Rate _r, Rate _q, Volatility _vol,
std::function<Real(Real)> _B,
ext::shared_ptr<Integrator> _integrator)
: DqFpEquation(_r, _q, _vol, _B, _integrator),
K(_K) {
}
DqFpEquation_A::DqFpEquation_A(Real K,
Rate _r,
Rate _q,
Volatility _vol,
std::function<Real(Real)> B,
ext::shared_ptr<Integrator> _integrator)
: DqFpEquation(_r, _q, _vol, std::move(B), std::move(_integrator)), K(K) {}

std::tuple<Real, Real, Real> DqFpEquation_A::f(Real tau, Real b) const {
const Real v = vol * std::sqrt(tau);
Expand All @@ -211,7 +215,7 @@ namespace QuantLib {
const Real stv = std::sqrt(tau)/vol;

Real K12, K3;
if (x_i.size()) {
if (!x_i.empty()) {
K12 = K3 = 0.0;

for (Integer i = x_i.size()-1; i >= 0; --i) {
Expand All @@ -223,8 +227,7 @@ namespace QuantLib {
*(0.5*tau*(y+1)*Phi(dpm.first) + stv*phi(dpm.first));
K3 += w_i[i] * stv*std::exp(r*tau-r*m)*phi(dpm.second);
}
}
else {
} else {
K12 = (*integrator)([&, this](Real y) -> Real {
const Real m = 0.25*tau*squared(1+y);
const Real dp = d(m, b/B(tau-m)).first;
Expand Down Expand Up @@ -291,13 +294,13 @@ namespace QuantLib {
}


DqFpEquation_B::DqFpEquation_B(
Real _K, Rate _r, Rate _q, Volatility _vol,
std::function<Real(Real)> _B,
ext::shared_ptr<Integrator> _integrator)
: DqFpEquation(_r, _q, _vol, _B, _integrator),
K(_K) {
}
DqFpEquation_B::DqFpEquation_B(Real K,
Rate _r,
Rate _q,
Volatility _vol,
std::function<Real(Real)> B,
ext::shared_ptr<Integrator> _integrator)
: DqFpEquation(_r, _q, _vol, std::move(B), std::move(_integrator)), K(K) {}


std::tuple<Real, Real, Real> DqFpEquation_B::f(Real tau, Real b) const {
Expand All @@ -312,7 +315,7 @@ namespace QuantLib {
}
else {
Real ni, di;
if (x_i.size()) {
if (!x_i.empty()) {
const Real c = 0.5*tau;

ni = di = 0.0;
Expand All @@ -324,8 +327,7 @@ namespace QuantLib {
}
ni *= c;
di *= c;
}
else {
} else {
ni = (*integrator)([&, this](Real u) -> Real {
return std::exp(r*u)*Phi(d(tau - u, b/B(u)).second);
}, 0, tau);
Expand Down
37 changes: 14 additions & 23 deletions ql/pricingengines/vanilla/qdplusamericanengine.cpp
Expand Up @@ -40,29 +40,20 @@ namespace QuantLib {
class QdPlusBoundaryEvaluator {
public:
QdPlusBoundaryEvaluator(
Real S, Real strike,
Rate rf, Rate dy, Volatility vol, Time t, Time T)
: tau(t),
K(strike),
sigma(vol),
sigma2(sigma*sigma),
v(sigma*std::sqrt(tau)),
r(rf),
q(dy),
dr(std::exp(-r*tau)),
dq(std::exp(-q*tau)),
omega(2*(r-q)/sigma2),
lambda(0.5*(-(omega-1)
- std::sqrt(squared(omega - 1) + 8*r/(sigma2 * (1-dr))))),
lambdaPrime(2*r/(sigma2*squared(1-dr)
*std::sqrt(squared(omega-1) + 8*r/(sigma2*(1-dr))))),
alpha(2*dr*r/(sigma2*(2*lambda+omega - 1))),
beta(alpha*(1/(1-dr)+lambdaPrime/(2*lambda+omega-1)) - lambda),
Real S, Real strike, Rate rf, Rate dy, Volatility vol, Time t, Time T)
: tau(t), K(strike), sigma(vol), sigma2(sigma * sigma), v(sigma * std::sqrt(tau)), r(rf),
q(dy), dr(std::exp(-r * tau)), dq(std::exp(-q * tau)), omega(2 * (r - q) / sigma2),
lambda(0.5 *
(-(omega - 1) - std::sqrt(squared(omega - 1) + 8 * r / (sigma2 * (1 - dr))))),
lambdaPrime(2 * r /
(sigma2 * squared(1 - dr) *
std::sqrt(squared(omega - 1) + 8 * r / (sigma2 * (1 - dr))))),
alpha(2 * dr * r / (sigma2 * (2 * lambda + omega - 1))),
beta(alpha * (1 / (1 - dr) + lambdaPrime / (2 * lambda + omega - 1)) - lambda),
xMax(QdPlusAmericanEngine::xMax(strike, r, q)),
xMin(QL_EPSILON*1e4*std::min(0.5*(strike + S), xMax)),
nrEvaluations(0),
sc(Null<Real>()) {
}
xMin(QL_EPSILON * 1e4 * std::min(0.5 * (strike + S), xMax)),

sc(Null<Real>()) {}

Real operator()(Real S) const {
++nrEvaluations;
Expand Down Expand Up @@ -123,7 +114,7 @@ namespace QuantLib {
const Rate r, q;
const DiscountFactor dr, dq;
const Real omega, lambda, lambdaPrime, alpha, beta, xMax, xMin;
mutable Size nrEvaluations;
mutable Size nrEvaluations = 0;
mutable Real sc, dp, dm, Phi_dp, Phi_dm, phi_dp;
mutable Real npv, theta, charm;
};
Expand Down
11 changes: 8 additions & 3 deletions ql/pricingengines/vanilla/qdplusamericanengine.hpp
Expand Up @@ -57,9 +57,14 @@ namespace QuantLib {

class QdPlusAddOnValue {
public:
QdPlusAddOnValue(
Time T, Real S, Real K, Rate r, Rate q, Volatility vol,
const Real xmax, ext::shared_ptr<Interpolation> q_z);
QdPlusAddOnValue(Time T,
Real S,
Real K,
Rate r,
Rate q,
Volatility vol,
Real xmax,
ext::shared_ptr<Interpolation> q_z);

Real operator()(Real z) const;
private:
Expand Down
10 changes: 4 additions & 6 deletions test-suite/americanoption.cpp
Expand Up @@ -1106,7 +1106,7 @@ void AmericanOptionTest::testQdPlusBoundaryConvergence() {
};

for (const auto& testCase: testCases) {
for (auto solverType: solverTypes) {
for (const auto& solverType : solverTypes) {
const QdPlusAmericanEngine qrPlusEngine(
ext::shared_ptr<GeneralizedBlackScholesProcess>(),
Null<Size>(), solverType.first, 1e-8);
Expand Down Expand Up @@ -1308,7 +1308,7 @@ void AmericanOptionTest::testQdAmericanEngines() {

PseudoRandom::rng_type rng(PseudoRandom::urng_type(12345UL));

for (Size i=0; i < LENGTH(pde_values); ++i) {
for (double pde_value : pde_values) {
const Option::Type optionType
= (rng.next().value > 0)? Option::Call : Option::Put;
const Real spot = 100*std::exp(1.5*rng.next().value);
Expand All @@ -1318,10 +1318,8 @@ void AmericanOptionTest::testQdAmericanEngines() {
const Rate r = 0.10*std::exp(rng.next().value);
const Rate q = 0.10*std::exp(rng.next().value);

const OptionSpec spec = {
optionType, spot, strike, maturityInDays,
vol, r, q, pde_values[i], -1
};
const OptionSpec spec = {optionType, spot, strike, maturityInDays, vol, r,
q, pde_value, -1};

testCaseSpecs.push_back(spec);
}
Expand Down

0 comments on commit 79f6e4f

Please sign in to comment.