# lattices man page

lattices

## Synopsis

### Classes

class **TsiveriotisFernandesLattice< T >**

Binomial lattice approximating the Tsiveriotis-Fernandes model.

class **ExtendedBinomialTree< T >**

Binomial tree base class.

class **ExtendedEqualProbabilitiesBinomialTree< T >**

Base class for equal probabilities binomial tree.

class **ExtendedEqualJumpsBinomialTree< T >**

Base class for equal jumps binomial tree.

class **ExtendedJarrowRudd**

Jarrow-Rudd (multiplicative) equal probabilities binomial tree.

class **ExtendedCoxRossRubinstein**

Cox-Ross-Rubinstein (multiplicative) equal jumps binomial tree.

class **ExtendedAdditiveEQPBinomialTree**

Additive equal probabilities binomial tree.

class **ExtendedTrigeorgis**

Trigeorgis (additive equal jumps) binomial tree

class **ExtendedTian**

Tian tree: third moment matching, multiplicative approach

class **ExtendedLeisenReimer**

Leisen & Reimer tree: multiplicative approach.

class **BinomialTree< T >**

Binomial tree base class.

class **EqualProbabilitiesBinomialTree< T >**

Base class for equal probabilities binomial tree.

class **EqualJumpsBinomialTree< T >**

Base class for equal jumps binomial tree.

class **JarrowRudd**

Jarrow-Rudd (multiplicative) equal probabilities binomial tree.

class **CoxRossRubinstein**

Cox-Ross-Rubinstein (multiplicative) equal jumps binomial tree.

class **AdditiveEQPBinomialTree**

Additive equal probabilities binomial tree.

class **Trigeorgis**

Trigeorgis (additive equal jumps) binomial tree

class **Tian**

Tian tree: third moment matching, multiplicative approach

class **LeisenReimer**

Leisen & Reimer tree: multiplicative approach.

class **BlackScholesLattice< T >**

Simple binomial lattice approximating the Black-Scholes model.

class **TreeLattice< Impl >**

Tree-based lattice-method base class.

class **TreeLattice1D< Impl >**

One-dimensional tree-based lattice.

class **TreeLattice2D< Impl, T >**

Two-dimensional tree-based lattice.

class **Tree< T >**

Tree approximating a single-factor diffusion

class **TrinomialTree**

Recombining trinomial tree class.

## Detailed Description

The framework (corresponding to the ql/Lattices directory) contains basic building blocks for pricing instruments using lattice methods (trees). A lattice, i.e. an instance of the abstract class **QuantLib::Lattice**, relies on one or several trees (each one approximating a diffusion process) to price an instance of the DiscretizedAsset class. Trees are instances of classes derived from **QuantLib::Tree**, classes which define the branching between nodes and transition probabilities.

## Binomial trees

The binomial method is the simplest numerical method that can be used to price path-independent derivatives. It is usually the preferred lattice method under the Black-Scholes-Merton model. As an example, let's see the framework implemented in the bsmlattice.hpp file. It is a method based on a binomial tree, with constant short-rate (discounting). There are several approaches to build the underlying binomial tree, like Jarrow-Rudd or Cox-Ross-Rubinstein.

## Trinomial trees

When the underlying stochastic process has a mean-reverting pattern, it is usually better to use a trinomial tree instead of a binomial tree. An example is implemented in the **QuantLib::TrinomialTree** class, which is constructed using a diffusion process and a time-grid. The goal is to build a recombining trinomial tree that will discretize, at a finite set of times, the possible evolutions of a random variable $ y $ satisfying [ dy_t = mu(t, y_t) dt + sigma(t, y_t) dW_t. ] At each node, there is a probability $ p_u, p_m $ and $ p_d $ to go through respectively the upper, the middle and the lower branch. These probabilities must satisfy [ p_{u}y_{i+1,k+1}+p_{m}y_{i+1,k}+p_{d}y_{i+1,k-1}=E_{i,j} ] and [ p_u y_{i+1,k+1}^2 + p_m y_{i+1,k}^2 + p_d y_{i+1,k-1}^2 = V^2_{i,j}+E_{i,j}^2, ] where k (the index of the node at the end of the middle branch) is the index of the node which is the nearest to the expected future value, $ E_{i,j}=mathbf{E}left( y(t_{i+1})|y(t_{i})=y_{i,j}right) $ and $ V_{i,j}^{2}=mathbf{Var}y(t_{i+1})|y(t_{i})=y_{i,j} $. If we suppose that the variance is only dependant on time $ V_{i,j}=V_{i} $ and set $ y_{i+1} $ to $ V_{i}sqrt{3} $, we find that [ p_{u} = ac{1}{6}+ac{(E_{i,j}-y_{i+1,k})^{2}}{6V_{i}^{2}} + ac{E_{i,j}-y_{i+1,k}}{2sqrt{3}V_{i}}, ] [ p_{m} = ac{2}{3}-ac{(E_{i,j}-y_{i+1,k})^{2}}{3V_{i}^{2}}, ] [ p_{d} = ac{1}{6}+ac{(E_{i,j}-y_{i+1,k})^{2}}{6V_{i}^{2}} - ac{E_{i,j}-y_{i+1,k}}{2sqrt{3}V_{i}}. ]

## Bidimensional lattices

To come...

## The QuantLib::DiscretizedAsset class

This class is a representation of the price of a derivative at a specific time. It is roughly an array of values, each value being associated to a state of the underlying stochastic variables. For the moment, it is only used when working with trees, but it should be quite easy to make a use of it in finite-differences methods. The two main points, when deriving classes from **QuantLib::DiscretizedAsset**, are:

- 1.
Define the initialisation procedure (e.g. terminal payoff for european stock options).

- 2.
Define the method adjusting values, when necessary, at each time steps (e.g. apply the step condition for american or bermudan options). Some examples are found in QuantLib::DiscretizedSwap and QuantLib::DiscretizedSwaption.

## Author

Generated automatically by Doxygen for QuantLib from the source code.