Logo Search packages:      
Sourcecode: quantlib version File versions


Go to the documentation of this file.
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

 Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb

 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

 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 hullwhite.hpp
    \brief Hull & White (HW) model

#ifndef quantlib_one_factor_models_hull_white_h
#define quantlib_one_factor_models_hull_white_h

#include <ql/ShortRateModels/OneFactorModels/vasicek.hpp>

namespace QuantLib {

    //! Single-factor Hull-White (extended %Vasicek) model class.
    /*! This class implements the standard single-factor Hull-White model
        defined by
            dr_t = (\theta(t) - \alpha r_t)dt + \sigma dW_t
        where \f$ \alpha \f$ and \f$ \sigma \f$ are constants.

        \test calibration results are tested against cached values

        \bug When the term structure is relinked, the r0 parameter of
             the underlying Vasicek model is not updated.

        \ingroup shortrate
00046     class HullWhite : public Vasicek, public TermStructureConsistentModel {
        HullWhite(const Handle<YieldTermStructure>& termStructure,
                  Real a = 0.1, Real sigma = 0.01);

        boost::shared_ptr<Lattice> tree(const TimeGrid& grid) const;

        boost::shared_ptr<ShortRateDynamics> dynamics() const;

        Real discountBondOption(Option::Type type,
                                Real strike,
                                Time maturity,
                                Time bondMaturity) const;

        void generateArguments();

        Real A(Time t, Time T) const;

        class Dynamics;
        class FittingParameter;

        Parameter phi_;

    //! Short-rate dynamics in the Hull-White model
    /*! The short-rate is here
            r_t = \varphi(t) + x_t
        where \f$ \varphi(t) \f$ is the deterministic time-dependent
        parameter used for term-structure fitting and \f$ x_t \f$ is the
        state variable following an Ornstein-Uhlenbeck process.
00081     class HullWhite::Dynamics : public ShortRateDynamics {
        Dynamics(const Parameter& fitting,
                 Real a,
                 Real sigma)
        : ShortRateDynamics(boost::shared_ptr<StochasticProcess>(
                                     new OrnsteinUhlenbeckProcess(a, sigma))),
          fitting_(fitting) {}

        Real variable(Time t, Rate r) const {
            return r - fitting_(t);
        Real shortRate(Time t, Real x) const {
            return x + fitting_(t);
        Parameter fitting_;

    //! Analytical term-structure fitting parameter \f$ \varphi(t) \f$.
    /*! \f$ \varphi(t) \f$ is analytically defined by
            \varphi(t) = f(t) + \frac{1}{2}[\frac{\sigma(1-e^{-at})}{a}]^2,
        where \f$ f(t) \f$ is the instantaneous forward rate at \f$ t \f$.
00107     class HullWhite::FittingParameter
        : public TermStructureFittingParameter {
        class Impl : public Parameter::Impl {
            Impl(const Handle<YieldTermStructure>& termStructure,
                 Real a, Real sigma)
            : termStructure_(termStructure), a_(a), sigma_(sigma) {}

            Real value(const Array& params, Time t) const {
                Rate forwardRate =
                    termStructure_->forwardRate(t, t, Continuous, NoFrequency);
                Real temp = sigma_*(1.0 - std::exp(-a_*t))/a_;
                return (forwardRate + 0.5*temp*temp);
            Handle<YieldTermStructure> termStructure_;
            Real a_, sigma_;
        FittingParameter(const Handle<YieldTermStructure>& termStructure,
                         Real a, Real sigma)
        : TermStructureFittingParameter(boost::shared_ptr<Parameter::Impl>(
                      new FittingParameter::Impl(termStructure, a, sigma))) {}

    // inline definitions

    inline boost::shared_ptr<OneFactorModel::ShortRateDynamics>
00137     HullWhite::dynamics() const {
        return boost::shared_ptr<ShortRateDynamics>(
                                            new Dynamics(phi_, a(), sigma()));



Generated by  Doxygen 1.6.0   Back to index