QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
Classes | Namespaces | Variables
noarbsabr.hpp File Reference

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]
 

Detailed Description

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.