QuantLib 0.3.7
Getting started
Reference manual
|
The QuantLib project is at this time in beta status.
The following list is an overview of the existing code base.
The QuantLib-users mailing list is the preferred forum for proposals, suggestions and contributions regarding the future development of the library.
Date, calendars, and day count conventions
- Date class.
- Weekday, month, frequency, time unit enumerations.
- Period class (eg. 1y, 30d, 2m, etc.)
- Calendars: Beijing, Budapest, Copenhagen, Frankfurt, Helsinki, Hong Kong, Italy (Settlement, Exchange), Johannesburg, Oslo, Riyadh, Seoul, Singapore, Stockholm, Sydney, Taiwan, TARGET, Tokyo, Toronto, United Kingdom (Settlement, Exchange, Metals), United States (Settlement, Exchange, GovermentBond), Xetra, Warsaw, Wellington, Zurich.
- NullCalendar (no holidays) for theoretical calculations.
- Joint calendars made up as holiday union of base calendars.
- Rolling conventions: Preceding, ModifiedPreceding, Following, ModifiedFollowing, MonthEndReference.
- Schedule class for date stream generation.
- Day count conventions: Actual360, Actual365, ActualActual (Bond, ISDA, AFB), 30/360 (US, European, Italian).
To do:
- Differentiate more calendars depending on country or exchange, instead of city.
- enable business day calculation in addition to calendar days calculation in DayCounter::daycount(). See DayTypeEnum in FpML.
Math
- Linear, log-linear, and cubic spline interpolation.
- Primitive, first and second derivative functions of cubic and linear interpolators.
- Cubic spline end conditions: first derivative value, second derivative value, not-a-knot.
- Monotone cubic spline with Hyman non-restrictive filter.
- Bicubic spline and bilinear interpolations.
- Normal and cumulative normal distributions.
- Inverse cumulative normal distribution: Moro and Acklam approximations.
- Bivariate cumulative normal distribution.
- Binomial coefficients, binomial distribution, cumulative binomial distribution, and Peizer-Pratt inversion (method 2.)
- Chi square and non-central chi square distributions.
- Beta functions.
- Poisson and cumulative Poisson distributions.
- Incomplete gamma functions.
- Gamma distribution.
- Factorials.
- Integration algorithms: segment, trapezoid, mid-point trapezoid, Simpson, Gauss-Kronrod.
- Error function.
- General 1-D statistics: mean, variance, standard deviation, skewness, kurtosis, error estimation, min, max.
- Multi-dimensional (sequence) statistics: all the 1-D methods plus covariance, correlation, L2-discrepancy calculation, etc.
- Risk measures for Gaussian and empirical distributions: semi-variance, regret, percentile, top percentile, value-at-risk, upside potential, shorfall, average shorfall, expected shortfall.
- Array and matrix classes for algebra.
- Singular value decomposition.
- Eigenvalues, eigenvectors for symmetric matrices.
- Cholesky decomposition.
- Schur decomposition.
- Spectral rank-reduced square root, spectral pseudo-square root.
To do:
- Periodic and Lagrange end conditions for cubic spline.
- Implement convexity-preserving filter for cubic spline.
- Log-linear interpolator primitive, first and second derivative functions.
- Revise end conditions for bicubic spline.
- Trivariate and multi-variate distribution, see Genz, A. (1992) `Numerical Computation of the Multivariate Normal Probabilities', J. Comput. Graph. Stat. 1, pp. 141-150.
- Hypersphere decomposition, Higham algorithm for pseudo-square root.
- interface with GALib (genetic algorithm)
- Add COOOL algorithms
- Histogram class
1-dimensional solvers
- Bisection, false position, Newton, bounded Newton, Ridder, secant, Brent.
To do:
- Clean up the interface so that it is clear whether the accuracy is specified for x or f(x).
Optimization
- Conjugate gradient, simplex, steepest descent, line search, Armijo line search, least squares.
- Constrained (positive, boundary, etc.) and unconstrained optimization
Random-number generation
- Uniform pseudo-random sequences: Knuth, L'Ecuyer, Mersenne twister.
- Uniform quasi-random (low-discrepancy) sequences: Halton, Sobol up to dimension 21,200 (8,129,334 if you really want) with unit and Jäckel initialization numbers.
- Randomized quasi-random sequences (in progress)
- Primitive polynomials modulo 2 up to dimension 18 (available up to dimension 27.)
- Gaussian random numbers from uniform random numbers using different algorithms: central limit theorem, Box-Muller, inverse cumulative (Moro and Acklam algorithms)
To do:
- Add Faure low-discrepancy sequence.
- Randomized low-discrepancy sequences.
Patterns
- Bridge, composite, lazy object, observer/observable, strategy, visitor.
Finite differences
- Mixed theta, implicit, explicit, and Crank-Nicolson 1-dimensional schemes.
- Differential operators:
, , , . - Shout, Bermudan and American exercises.
To do:
- Richardson extrapolation
- Introduce variable theta schemes.
- Introduce multi time-level schemes.
- Enable different solvers (SOR, etc.)
- Extend to time-dependant parameters.
- Extend to local volatility.
- Two-dimension schemes.
- Improve boundary conditions.
- Adapt to the new pricing engine framework.
- Use DiscretisedAsset instead of array?
- Use TimeGrid
- Use assetGrid
- Handle barrier specification
- Handle variable asset step size
- Check (and improve) vega, rho, dividendRho greeks, solving their own equations
Lattices
- Binomial trees: Cox-Ross-Rubinstein, Jarrow-Rudd, additive equiprobabilities, Trigeorgis, Tian, Leisen-Reimer.
- Trinomial (interest-rate) tree.
- Discretized asset.
- Richardson extrapolation
To do:
- Merge finite differences with the lattice framework. Use same rollback scheme.
- Evaluate proposed templatization
- Trinomial trees
- Implied trinomial trees
- Calculate binomial tree greeks
Monte Carlo
- One-factor and multi-factor path classes.
- Path-generator classes: incremental and Brownian-bridge one-factor path generation, incremental multi-factor path generation.
- General-purpose Monte Carlo model based on traits for path samples.
- Antithetic variance-reduction technique.
- Control variate technique.
To do:
- Greeks calculation.
- Allow easier selection between Incremental/BrownianBridge path generation.
- Review Monte Carlo engine for american options.
- Review multi-factor Monte Carlo simulation.
- Predictor-corrector scheme.
- Add Milstein scheme.
- Add Martingale control variate.
- Batch samples as N=n_batches*batch_size, and exploit it for randomized low discrepancy sequences (RQMC)
Pricing engines
- Analytic Black formula (plus greeks) for different payoffs.
- Analytic formula for American-style digital options with payoff at expiry.
- Analytic formula for American-style digital options with payoff at hit.
- Monte Carlo simulation base engine.
- Lattice short rate model base engine.
- Engines for options described by "vanilla" set of parameters: analytic digital American, analytic discrete-dividend European, analytic European, Barone-Adesi and Whaley approximation for American, binomial (Cox-Ross-Rubinstein, Jarrow-Rudd, additive equiprobabilities, Trigeorgis, Tian, Leisen-Reimer), Bjerksund and Stensland approximation for American, integral European, Merton 76 jump-diffusion, Monte Carlo digital, Monte Carlo European.
- Engines for options described by "barrier" set of parameters: analytic down/up in/out, Monte Carlo down/up in/out
- Engines for options described by "discrete Asian" set of parameters: analytic discrete geometric average price
- Engines for options described by "cliquet" set of parameters: analytic, analytic performance.
- Forward and forward-performance compound engines.
- Quanto compound engine.
- Quanto-forward and Quanto-forward-performance compound engines.
- Basket engine: analytic Stulz engine for max/min on two assets, Monte Carlo engine (in progress).
- Black model base class for vanilla interest rate derivatives
- Cap/floor pricing engines: analytic Black model, analytic affine models, tree based engine.
- Swaption pricing engines: analytic Black model, analytic affine models (Jamshidian), tree based engine.
To do:
- Add the trigger level Touch/NoTouch specification for American-style digitals.
- More vanilla engines: Roll-Geske-Whaley American Call, Geske-Johnson American Put, finite differences, Edgeworth expansion binomial tree, etc.
- Merge NesQuant SJD engine (http://www.nielses.dk/quantlib/nesquant/)
- Continous geometric average-strike.
- Ensure all path dependant options allow for evaluation with collected past observations.
- Define dividendRho for discrete dividends.
Pricers
- Cliquet option
- Analytic continuous geometric average-price option (European exercise).
- Analytic discrete geometric average-price option (European exercise).
- Analytic discrete geometric average-strike option (European exercise).
- Finite difference American option.
- Bermudan option.
- Finite difference American option with discrete dividends (buggy).
- Finite difference European option with discrete dividends.
- Finite difference Shout option with discrete dividends (buggy).
- Finite difference European option (Black-Scholes).
- Monte Carlo basket option.
- Monte Carlo cliquet option.
- Monte Carlo discrete arithmetic average-price option.
- Monte Carlo discrete arithmetic average-strike option.
- Monte Carlo Everest option.
- Monte Carlo Himalaya option.
- Monte Carlo max basket option.
- Monte Carlo pagoda option.
- Monte Carlo forward performance option.
- Analytic forward performance option.
To do:
- Fix finite difference in presence of dividends
- All pricers should be moved to the pricing engine framework.
Financial Instruments
- Instrument base class: npv(), isExpired(), etc.
- Interest-rate swap: simple, normal.
- Swaption.
- Cap/floor.
- Stock.
- One-asset option base class.
- Asian option.
- Barrier option.
- Cliquet option.
- Forward vanilla option.
- Quanto vanilla option.
- Quanto-forward vanilla option.
- Vanilla option.
- Multi-asset option base class.
- Basket option.
To do:
- Forward (stock) and FRA (forward-rate agreement).
- Bond.
Yield term structures
- Term structure common interface.
- Term structure classes based on discount, zero, or forward underlying description.
- Term structure based on linear interpolation of zero yields.
- Term structure based on log-linear interpolation of discounts.
- Term structure based on constant flat forward.
- Term structure based on piecewise-constant flat forwards with libor-futures-swap bootstrapping algorithm.
- Spreaded term structures.
- Forward-date implied term structure.
To do:
- Future convexity adjustment
- End of year effect
- Do not require today's date, only the settlement date (when discount==1.0) is necessary
- Assume no zero/forward implicit convention on input, specify them for output
Volatility
- Interface for cap/floor Black volatility term structures (unstable).
- Interface for swaption Black volatility term structures (unstable).
- Interface for equity Black volatility term structures based on volatility or variance underlying description: constant, time-dependant curve, time-strike surface, forward date implied term structure.
- Interface for equity local volatility term structures: constant, time-dependant curve, time-asset level surface (Gatheral's formula).
To do:
- Fix implementation of Gatheral's formula for local volatility.
Short rate models
- Single factor models: Hull-White, Black-Karasinski, Vasichek (untested), CIR (untested), Extended CIR (untested).
- Two factor models: G2 (untested).
Credit derivatives
To do:
- Introduce BET and double BET.
- Valuation of credit default swap.
- Bootstrapping of default probability from bond, CDS, etc.
Test suite
Implemented by means of the Boost unit-test framework. More than 120 automated tests.
An automatically-generated list is available here.
To do:
- Add covariance/correlation test for SequenceStatistics.
- Add single factor calibration and Bermudan pricing tests.
- Increase coverage.
Miscellanea
- Index classes for handling of fixed-income libor indexes (fixings, forecasting, etc.): AUD, CAD, CHF, EUR, GBP, JPY, USD, ZAR, generic.
- Cash-flow class.
- Currency enumeration.
- Output data formatters: long integers, Ordinal numerals, power of two, exponential, fixed digit, sequences, dates, etc.
- Input data parsers.
- Error classes and error handling.
- Exercise classes: European, Bermudan, American
- Payoff classes: plain, gap, asset-or-nothing, cash-or-nothing
- Grid classes for handling of equally and unequally spaced grids.
- History class for handling of historical data.
- Quote class for mutable data.
- Null types.
- User-configurable #define to disable usage of deprecated classes.
To do:
- IRR, duration, convexity, etc. for a sequence of cash flows
- Currency as class with methods returning related info
- Implement currency as per OMG definition
- Implement round as per OMG enumeration/definition
Documentation
- Documentation automatically generated with Doxygen (html, PDF, ps, WinHelp, man pages)
To do:
- Add a "Getting started" page to the site
- Enable forums?
- Create a FAQ
Distribution
- Windows installer generated with NSIS.
- Included in the Debian distribution.
- RPMs available.
- Fink package available.
|