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 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="robots" content="none">
<title>Short-rate modelling framework</title>
<link rel="stylesheet" href="quantlib.css" type="text/css">
<link rel="stylesheet" href="print.css" type="text/css" media="print">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<div id="container">
<div id="header">
<img class="titleimage"
src="QL-title.jpg" width="185" height="50" border="0"
alt="QuantLib">
<br>
<h3 class="subtitle">A free/open-source library for quantitative finance</h3>
</div>
<div id="menu">
<h3 class="navbartitle">Version 1.2</h3>
<hr>
<h3 class="navbartitle">Getting started</h3>
<ul class="navbarlist">
<li class="navlink"><a href="index.html">Introduction</a></li>
<li class="navlink"><a href="where.html">Where to get QuantLib</a></li>
<li class="navlink"><a href="install.html">Installation</a></li>
<li class="navlink"><a href="config.html">Configuration</a></li>
<li class="navlink"><a href="usage.html">Usage</a></li>
<li class="navlink"><a href="history.html">Version history</a></li>
<li class="navlink"><a href="resources.html">Additional resources</a></li>
<li class="navlink"><a href="group.html">The QuantLib group</a></li>
<li class="navlink"><a href="license.html">Copyright and license</a></li>
</ul>
<hr>
<h3 class="navbartitle">Reference manual</h3>
<ul class="navbarlist">
<li class="navlink"><a href="modules.html">Modules</a></li>
<li class="navlink"><a href="hierarchy.html">Class Hierarchy</a></li>
<li class="navlink"><a href="annotated.html">Compound List</a></li>
<li class="navlink"><a href="files.html">File List</a></li>
<li class="navlink"><a href="functions.html">Compound Members</a></li>
<li class="navlink"><a href="globals.html">File Members</a></li>
<li class="navlink"><a href="todo.html">Todo List</a></li>
<li class="navlink"><a href="bug.html">Known Bugs</a></li>
<li class="navlink"><a href="caveats.html">Caveats</a></li>
<li class="navlink"><a href="test.html">Test Suite</a></li>
<li class="navlink"><a href="examples.html">Examples</a></li>
</ul>
</div>
<div id="content">
<!--Doxygen-generated content-->
<!-- Generated by Doxygen 1.7.6.1 -->
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<div class="title">Short-rate modelling framework</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_generalized_hull_white.html">GeneralizedHullWhite</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Generalized Hull-White model class. <a href="class_quant_lib_1_1_generalized_hull_white.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_affine_model.html">AffineModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Affine model class. <a href="class_quant_lib_1_1_affine_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_term_structure_consistent_model.html">TermStructureConsistentModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Term-structure consistent model class. <a href="class_quant_lib_1_1_term_structure_consistent_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_short_rate_model.html">ShortRateModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Abstract short-rate model class. <a href="class_quant_lib_1_1_short_rate_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_one_factor_model.html">OneFactorModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Single-factor short-rate model abstract class. <a href="class_quant_lib_1_1_one_factor_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_one_factor_affine_model.html">OneFactorAffineModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Single-factor affine base class. <a href="class_quant_lib_1_1_one_factor_affine_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_black_karasinski.html">BlackKarasinski</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Standard Black-Karasinski model class. <a href="class_quant_lib_1_1_black_karasinski.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_cox_ingersoll_ross.html">CoxIngersollRoss</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Cox-Ingersoll-Ross model class. <a href="class_quant_lib_1_1_cox_ingersoll_ross.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_extended_cox_ingersoll_ross.html">ExtendedCoxIngersollRoss</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Extended Cox-Ingersoll-Ross model class. <a href="class_quant_lib_1_1_extended_cox_ingersoll_ross.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_hull_white.html">HullWhite</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Single-factor Hull-White (extended Vasicek) model class. <a href="class_quant_lib_1_1_hull_white.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_vasicek.html">Vasicek</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Vasicek model class <a href="class_quant_lib_1_1_vasicek.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_two_factor_model.html">TwoFactorModel</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Abstract base-class for two-factor models. <a href="class_quant_lib_1_1_two_factor_model.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_quant_lib_1_1_g2.html">G2</a></td></tr>
<tr><td class="mdescLeft"> </td><td class="mdescRight">Two-additive-factor gaussian model class. <a href="class_quant_lib_1_1_g2.html#details">More...</a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>This framework (corresponding to the ql/ShortRateModels directory) implements some single-factor and two-factor short rate models. The models implemented in this library are widely used by practitionners. For the moment, the ShortRateModels::Model class defines the short-rate dynamics with stochastic equations of the type </p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ dx_i = \mu(t,x_i) dt + \sigma(t,x_i) dW_t \]" src="form_0.png"/>
</p>
<p> where <img class="formulaInl" alt="$ r = f(t,x) $" src="form_1.png"/>. If the model is affine (i.e. derived from the <a class="el" href="class_quant_lib_1_1_affine_model.html" title="Affine model class.">QuantLib::AffineModel</a> class), analytical formulas for discount bonds and discount bond options are given (useful for calibration).</p>
<h2><a class="anchor" id="singlefactormodels"></a>
Single-factor models</h2>
<dl class="user"><dt><b>The Hull & White model</b></dt><dd><p class="formulaDsp">
<img class="formulaDsp" alt="\[ dr_t = (\theta(t) - \alpha(t) r_t)dt + \sigma(t) dW_t \]" src="form_2.png"/>
</p>
When <img class="formulaInl" alt="$ \alpha $" src="form_3.png"/> and <img class="formulaInl" alt="$ \sigma $" src="form_4.png"/> are constants, this model has analytical formulas for discount bonds and discount bond options.</dd></dl>
<dl class="user"><dt><b>The Black-Karasinski model</b></dt><dd><p class="formulaDsp">
<img class="formulaDsp" alt="\[ d\ln{r_t} = (\theta(t) - \alpha \ln{r_t})dt + \sigma dW_t \]" src="form_5.png"/>
</p>
No analytical tractability here.</dd></dl>
<dl class="user"><dt><b>The extended Cox-Ingersoll-Ross model</b></dt><dd><p class="formulaDsp">
<img class="formulaDsp" alt="\[ dr_t = (\theta(t) - k r_t)dt + \sigma \sqrt{r_t} dW_t \]" src="form_6.png"/>
</p>
There are analytical formulas for discount bonds (and soon for discount bond options).</dd></dl>
<h2><a class="anchor" id="calibration"></a>
Calibration</h2>
<p>The class CalibrationHelper is a base class that facilitates the instanciation of market instruments used for calibration. It has a method marketValue() that gives the market price using a Black formula, and a modelValue() method that gives the price according to a model</p>
<p>Derived classed are <a class="el" href="class_quant_lib_1_1_cap_helper.html" title="calibration helper for ATM cap">QuantLib::CapHelper</a> and <a class="el" href="class_quant_lib_1_1_swaption_helper.html" title="calibration helper for ATM swaption">QuantLib::SwaptionHelper</a>.</p>
<p>For the calibration itself, you must choose an optimization method that will find constant parameters such that the value: </p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ V = \sqrt{\sum_{i=1}^{n} \frac{(T_i - M_i)^2}{M_i}}, \]" src="form_7.png"/>
</p>
<p> where <img class="formulaInl" alt="$ T_i $" src="form_8.png"/> is the price given by the model and <img class="formulaInl" alt="$ M_i $" src="form_9.png"/> is the market price, is minimized. A few optimization methods are available in the ql/Optimization directory.</p>
<h2><a class="anchor" id="twofactormodels"></a>
Two-factor models</h2>
<h2><a class="anchor" id="pricers"></a>
Pricers</h2>
<dl class="user"><dt><b>Analytical pricers</b></dt><dd></dd></dl>
<p>If the model is affine, i.e. discount bond options formulas exist, caps are easily priced since they are a portfolio of discount bond options. Such a pricer is implemented in QuantLib::AnalyticalCapFloor. In the case of single-factor affine models, swaptions can be priced using the Jamshidian decomposition, implemented in QuantLib::JamshidianSwaption.</p>
<dl class="user"><dt><b>Using Finite Differences</b></dt><dd></dd></dl>
<p>(Doesn't work for the moment) For the moment, this is only available for single-factor affine models. If <img class="formulaInl" alt="$ x = x(t, r) $" src="form_10.png"/> is the state variable and follows this stochastic process: </p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ dx_t = \mu(t,x)dt + \sigma(t,x)dW_t \]" src="form_11.png"/>
</p>
<p> any european-style instrument will follow the following PDE:</p>
<p class="formulaDsp">
<img class="formulaDsp" alt="\[ \frac{\partial P}{\partial t} + \mu \frac{\partial P}{\partial x} + \frac{1}{2} \sigma^2 \frac{\partial^2 P}{\partial x^2} = r(t,x)P \]" src="form_12.png"/>
</p>
<p>The adequate operator to feed a Finite Difference Model instance is defined in the QuantLib::OneFactorOperator class.</p>
<dl class="user"><dt><b>Using Trees</b></dt><dd></dd></dl>
<p>Each model derived from the single-factor model class has the ability to return a trinomial tree. For yield-curve consistent models, the fitting parameter can be determined either analytically (when possible) or numerically. When a tree is built, it is then pretty straightforward to implement a pricer for any path-independant derivative. Just implement a class derived from NumericalDerivative (see QuantLib::NumericalSwaption for example) and roll it back until the present time... Just look at QuantLib::TreeCapFloor and QuantLib::TreeSwaption for working pricers. </p>
</div><!-- contents -->
</div>
<div class="footer">
<div class="endmatter">
Documentation generated by
<a href="http://www.doxygen.org">Doxygen</a> 1.7.6.1
</div>
</div>
</div>
</body>
</html>
|