OpenPricing and OpenRisk
A fundamental requirement of any fixed income attribution system is the ability to price the securities held within the user's portfolios under a range of different scenarios.
In previous releases, FIA's security pricing routines were embedded within the main application. Changes or additions to the list of available security types required an upgrade and a reinstallation, and could only be carried out by Flametree.
In version 2.0 and later, all pricing functions have been moved to external libraries, called via a simple common API. This OpenPricing API has been designed so that any information accessible to FIA (inlcuding user-defined fields) can be passed to any pricing function.
This carries several advantages:
- New security types can be defined and provided without an upgrade
- New pricing functions for new instruments can be written and integrated within days, ensuring analytics support can keep up with new developments in the market.
- Changes can be made without reference to the vendor – the process is under the client’s control.
For first-principles attribution, FIA makes extensive use of security-level pricing routines. These are now called from external libraries via the OpenPricing API, rather than being embedded into our core application.
This carries several major advantages for our clients:
- Security pricing can be updated and extended without a new release of the core program.
- New security types may be quickly defined and used in attribution reporting.
- Proprietary or third-party pricing libraries can quickly be integrated into FIA for use in attribution reporting.
Naturally, perturbational (risk-number driven) attribution remains supported, as is a combination of both approaches.
When FIA runs, it compares the names of the pricing functions supplied in the security master table against the available functions in the pricing libraries. If a function is referenced but not found in the libraries, or if a function has been supplied more than once, FIA flags an error and stops.
Security definitions, and the way that they are priced, are still specified in the security master table. However, security types are no longer set up by referring to a label. Instead, the name and location of a pricing function must be supplied, together with additional information if required.
Pricing functions are written in C or C++. Pricing functions written in other languages such as C# or Fortran can be integrated into this framework. Please contact Flametree Technical Support if you need assistance or examples.
The default OpenPricing library
FIA's default library is designed to meet the requirements of the vast majority of our users. In most cases it will never be necessary to delve into the implementation details of OpenPricing.
|FT_CASH||Price of cash per $1 face value||None||FT_CASH|
|FT_EQUITY||Price of equity per $1 face value||None||FT_EQUITY|
|FT_BILL||Price of bank bill, discount security, zero coupon bond||Settlement date, maturity date, yield curve||FT_BILL|
|FT_BOND_ZERO_CURVE||Price of coupon-bearing bond, using discount factors from the supplied zero curve||Maturity date, coupon, coupon frequency, yield curve||FT_BOND_ZERO_CURVE|
|FT_FRN_ZERO_CURVE||Price of floating-rate note, using the supplied index||Maturity date, coupon, coupon frequency, index||FT_FRN_ZERO_CURVE(LIBOR)|
|FT_SINKER_ZERO_CURVE||Price of amortizing bond||Maturity date, coupon, coupon frequency, curve||FT_SINKER_ZERO_CURVE|
|FT_MBS_PSA||Price of MBS security, using the PSA prepayment model||Maturity date, coupon, coupon frequency, curve, PSA value||FT_MBS_PSA|
The default OpenRisk library
|Interest||Return due to interest over current interval||Curve||Interest(GBP_CURVE[0.0])|
|Inflation||Return due to inflation over current interval||Inflation index (CPI or RPI)||Inflation(GBP_CPI)|
|Delta||Return from option due to changes in price of underlying asset||Delta, price of option, price of underlying||Delta(QANTAS_OPTION[DELTA],QANTAS_OPTION[PRICE],QANTAS[PRICE])|
|Gamma||Return from option due to second-order changes in price of underlying asset||Gamma, price of option, price of underlying||Gamma(QANTAS_OPTION[DELTA],QANTAS_OPTION[PRICE],QANTAS[PRICE])|
|Theta||Return from option due to elapsed time||Theta, price of option, price of underlying||Theta(QANTAS_OPTION[DELTA],QANTAS_OPTION[PRICE],QANTAS[PRICE])|
|Vega||Return due to changes in volatility of underlying asset||Vega, price of option, volatility of underlying||Vega(QANTAS_OPTION[VEGA],QANTAS_OPTION[PRICE],QANTAS[VOL])|