/usr/include/ql/pricingengines/vanilla/hestonexpansionengine.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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
Copyright (C) 2014 Fabien Le Floc'h
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 analytichestonengine.hpp
\brief analytic Heston expansion engine
*/
#ifndef quantlib_heston_expansion_engine_hpp
#define quantlib_heston_expansion_engine_hpp
#include <ql/pricingengines/genericmodelengine.hpp>
#include <ql/models/equity/hestonmodel.hpp>
#include <ql/instruments/vanillaoption.hpp>
#include <boost/function.hpp>
namespace QuantLib {
//! Heston-model engine for European options based on analytic expansions
/*! References:
M Forde, A Jacquier, R Lee, The small-time smile and term
structure of implied volatility under the Heston model
SIAM Journal on Financial Mathematics, 2012 - SIAM
M Lorig, S Pagliarani, A Pascucci, Explicit implied vols for
multifactor local-stochastic vol models
arXiv preprint arXiv:1306.5447v3, 2014 - arxiv.org
\ingroup vanillaengines
*/
class HestonExpansionEngine
: public GenericModelEngine<HestonModel,
VanillaOption::arguments,
VanillaOption::results> {
public:
enum HestonExpansionFormula { LPP2, LPP3, Forde };
HestonExpansionEngine(const boost::shared_ptr<HestonModel>& model,
HestonExpansionFormula formula);
void calculate() const;
private:
const HestonExpansionFormula formula_;
};
/*! Interface to represent some Heston expansion formula.
During calibration, it would typically be initialized once per
implied volatility surface slice, then calls for each surface
strike to impliedVolatility(strike, forward) would be
performed.
*/
class HestonExpansion {
public:
virtual ~HestonExpansion() {}
virtual Real impliedVolatility(const Real strike,
const Real forward) const = 0;
};
/*! Lorig Pagliarani Pascucci expansion of order-2 for the Heston model.
During calibration, it can be initialized once per expiry, and
called many times with different strikes. The formula is also
available in the Mathematica notebook from the authors at
http://explicitsolutions.wordpress.com/
*/
class LPP2HestonExpansion : public HestonExpansion {
public:
LPP2HestonExpansion(const Real kappa, const Real theta,
const Real sigma, const Real v0,
const Real rho, const Real term);
virtual Real impliedVolatility(const Real strike,
const Real forward) const;
private:
Real coeffs[3];
Real ekt, e2kt, e3kt, e4kt;
Real z0(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
Real z1(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
Real z2(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
};
/*! Lorig Pagliarani Pascucci expansion of order-3 for the Heston model.
During calibration, it can be initialized once per expiry, and
called many times with different strikes. The formula is also
available in the Mathematica notebook from the authors at
http://explicitsolutions.wordpress.com/
*/
class LPP3HestonExpansion : public HestonExpansion{
public:
LPP3HestonExpansion(const Real kappa, const Real theta,
const Real sigma, const Real v0,
const Real rho, const Real term);
virtual Real impliedVolatility(const Real strike,
const Real forward) const;
private:
Real coeffs[4];
Real ekt, e2kt, e3kt, e4kt;
Real z0(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
Real z1(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
Real z2(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
Real z3(Real t, Real kappa, Real theta,
Real delta, Real y, Real rho) const;
};
/*! Small-time expansion from
"The small-time smile and term structure of implied volatility
under the Heston model" M Forde, A Jacquier, R Lee - SIAM
Journal on Financial Mathematics, 2012 - SIAM
*/
class FordeHestonExpansion : public HestonExpansion {
public:
FordeHestonExpansion(const Real kappa, const Real theta,
const Real sigma, const Real v0,
const Real rho, const Real term);
virtual Real impliedVolatility(const Real strike,
const Real forward) const;
private:
Real coeffs[5];
};
}
#endif
|