QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
|
No-arbitrage SABR. More...
#include <ql/qldefines.hpp>
#include <ql/types.hpp>
#include <ql/math/integrals/gausslobattointegral.hpp>
#include <vector>
Go to the source code of this file.
Classes | |
class | NoArbSabrModel |
class | D0Interpolator |
Namespaces | |
namespace | QuantLib |
namespace | QuantLib::detail |
namespace | QuantLib::detail::NoArbSabrModel |
Variables | |
const Real | beta_min = 0.01 |
const Real | beta_max = 0.99 |
const Real | expiryTime_max = 30.0 |
const Real | sigmaI_min = 0.05 |
const Real | sigmaI_max = 1.00 |
const Real | nu_min = 0.01 |
const Real | nu_max = 0.80 |
const Real | rho_min = -0.99 |
const Real | rho_max = 0.99 |
const Real | phiByTau_cutoff = 124.587 |
const Real | nsim = 2500000.0 |
const Real | tiny_prob = 1E-5 |
const Real | strike_min = 1E-6 |
const Real | i_accuracy = 1E-7 |
const Size | i_max_iterations = 10000 |
const Real | forward_accuracy = 1E-6 |
const Real | forward_search_step = 0.0010 |
const Real | density_lower_bound = 1E-50 |
const Real | density_threshold = 1E-100 |
const unsigned long | sabrabsprob [1209600] |
No-arbitrage SABR.
Reference: Paul Doust, No-arbitrage SABR, The Journal of Computational Finance (3–31) Volume 15/Number 3, Spring 2012
The parameters are bounded as follows (see also below)
beta [0.01, 0.99] expiryTime (0.0, 30.0] sigmaI = alpha*forward^(beta-1) [0.05, 1.0] nu [0.0001, 0.8] rho [-0.99, 0.99]
As suggested in the paper, d0 is interpolated (linearly) in phi space. For beta > 0.9 phi is extrapolated to a value corresponding to d0 = tiny_prob = 1E-5 at beta = 1. For tau < 0.25 phi is extrapolated flat. For rho outside [-0.75, 0.75] phi is extrapolated linearly.
There are some parameter sets that are admissable, yet do not allow for the adjustment procedure as suggested in the paper to force the model implied forward to the correct value. In this case, no adjustment is done, leading to a model implied forward different from the desired one. This situation can be identified by comparing forward() and numericalForward().
Definition in file noarbsabr.hpp.