Complex market data is the structured market data LUSID needs to value most instruments beyond a simple price lookup: interest rate curves for discounting and projecting cashflows, FX forward curves, credit spread curves, inflation curves, equity forward curves, volatility surfaces and so on.
The categories you need depend on the instruments you value and the pricing models you choose. Find out what market data your valuation requires.
Complex market data has a dedicated Complex Market Data (CMD) Store. See how to load complex market data into LUSID.
Summary of categories
Category |
| What you supply | Used by | Can create in the web app? |
|---|---|---|---|---|
Interest rate curve (discounting or projection) |
| Dates and discount factors (to create | Any pricing model that discounts cashflows or projects floating rates, for example | |
| Forward rates or forward points, by date or by tenor, or references to quotes in the Quote Store | FX forwards valued with | ||
| Par spreads by tenor or maturity, and a recovery rate | Credit default swaps; bonds valued with | API or Luminesce only | |
| Zero-coupon inflation swaps and their quoted rates, from which LUSID builds the curve |
| API or Luminesce only | |
| Forward prices by date | Equity options, equity swaps and CFDs that project forward prices from a curve | API or Luminesce only | |
| Equity options and their quoted volatilities | Equity options valued with an option model, for example | ||
| FX options and their quoted volatilities | FX options valued with an option model | ||
| Swaptions and their quoted volatilities | Swaptions valued with | API or Luminesce only | |
| A single volatility that applies to every strike and expiry | The same option models, in place of a full surface or cube | API or Luminesce only |
How LUSID names and finds complex market data
LUSID identifies each object in the CMD Store by the scope you upload it to, plus a marketDataId made up of a provider, an optional priceSource, an effectiveAt date and a marketAsset, which is the object's name.
When you run a valuation, each pricing model declares the market data it needs, for example a GBP discount curve. LUSID turns each requirement into a key such as Rates.GBP.GBPOIS and looks for a market data rule in your recipe whose key matches. The rule tells LUSID which scope, provider and price source to search. LUSID then looks for an object whose marketAsset is the key without its first part, with full stops replaced by forward slashes, so Rates.GBP.GBPOIS becomes GBP/GBPOIS.
This means the name you give an object must follow the syntax for its category exactly. If it does not, LUSID cannot find the object and reports missing market data for the valuation.
Category | Recipe |
|
|
|---|---|---|---|
Discount curve |
|
|
|
Projection curve |
|
|
|
FX forward curve |
|
|
|
Credit spread curve for a CDS |
|
|
|
Credit spread curve for a bond |
|
|
|
Inflation curve |
|
|
|
Equity curve |
|
|
|
Equity volatility surface |
|
|
|
FX volatility surface |
|
|
|
Interest rate volatility cube |
|
|
|
Constant volatility surface | The key of the surface or cube it replaces | The name of the surface or cube it replaces |
|
The parts of each name come from the instrument and the recipe:
<Ccy>is the currency of the cashflows.<FundingCurve>is<Ccy>OIS(for exampleGBPOIS) unless the recipe pricing optionfundingCurveByCurrencynames a different curve for that currency, such as a collateral curveGBPOIS-USDCOLL. KeepOISin the name of every discount curve.<Tenor>and<IndexName>come from the index convention on the floating leg, for example1DandSONIA.<N-or-LN>isNfor normal volatilities, used byBachelier, orLNfor lognormal volatilities, used byBlackScholesand other Black-Scholes-type models.A rule's
keycan use wildcards. For example,Rates.*.*matches every discount curve andRates.*.*.*matches every projection curve.A rule's
maskoverrides themarketAssetLUSID searches for. Find out more about market data rules.
Interest rate curves
You can supply an interest rate curve in either of two ways:
DiscountFactorCurveData: you supply abaseDate, a list ofdatesand the matchingdiscountFactors. LUSID rescales the curve to your valuation date. Find out more about discount factor curves.YieldCurveData: you supply abaseDate, a list of calibrationinstrumentsand one market quote for each, inquotes. LUSID builds (bootstraps) a curve that reprices every instrument to its quote. The instruments can beInterestRateSwap,ForwardRateAgreement,BondorTermDeposit; a term deposit must start on the base date.
By default, LUSID discounts a yield curve's calibration instruments on the curve being built. To discount them on a separate curve (a dual-curve build), set fundingCurveName. For example, EUROIS discounts on the EUR/EUROIS curve, which your recipe must also be able to find.
Both types can act as a discount curve or a projection curve; the name decides which. If LUSID needs a projection curve and your recipe cannot find one, it projects floating rates from the discount curve instead.
FX forward curves
Choose the FX forward curve type that matches the way your data is quoted:
Type | Points by | Values |
|---|---|---|
| Date | Outright forward rates |
| Date | Forward points (pips) |
| Tenor | Outright forward rates |
| Tenor | Forward points (pips) |
| Tenor | References to quotes in the Quote Store, which LUSID reads when it builds the curve |
For the pips types, LUSID adds the forward points to the FX spot rate, so your recipe must also be able to find the spot rate in the Quote Store. The optional
pipMultiplierconverts points into a rate; it defaults to 0.01 when the foreign currency is JPY and 0.0001 otherwise.For the tenor types, you can supply
calendars(each with acalendarCodeandspotDays) and aspotDaysCalculationType(SingleCalendarby default, orUnionCalendars) to control how LUSID turns tenors into dates. Find out more about tenors.To add points to an existing FX forward curve, you can call the
UpsertAppendComplexMarketDataAPI.
Credit spread curves
A CreditSpreadCurveData object holds a baseDate, a currency (domCcy), par spreads by tenors or maturities, and a recoveryRate. You can also set a referenceDate from which LUSID resolves the tenors; it defaults to the base date.
LUSID uses credit spread curves in two ways, and each has its own naming syntax:
Credit default swaps: name the curve after the CDS's ticker, currency, seniority and restructuring type, for example
FF667M/USD/SNR/MR.Bonds: when you value a bond with
BondLookupPricerusing spread-anchored risk, LUSID looks for one curve per bond, namedCreditSpreadCurve/<Identifier>. The identifier is the bond's LUSID Instrument ID (LUID) unless you add an identifier type to the rule key, for exampleCredit.CreditSpreadCurve.ClientInternal. A CDS-style rule such asCredit.*.*.*.*does not match a bond's curve. Find out more about valuing bonds.
Inflation curves
You do not supply projected index values for an inflation curve. Instead, you describe the curve the way the market quotes it: a set of zero-coupon inflation swaps and their quoted rates. LUSID builds the forward index curve from them. The swaps are inputs to the curve only; you do not need to hold them in a portfolio.
An InflationCurveData object holds a buildDate, a list of instruments (which must be InflationSwap) and one quote for each, in quotes. The swaps must:
Be zero-coupon, start on the build date and share the same index conventions.
Have contiguous annual maturities starting at one year: 1Y, 2Y, 3Y and so on.
Have quotes of type
Rate.
LUSID also reads historical index fixings from the Quote Store, so your recipe needs a rule for the Inflation.InflationIndex.<IndexName> quotes as well as the curve.
Optionally, you can supply exactly 12 seasonalFactors, one for each month from January, to adjust the curve for seasonality. Each factor must be positive and together they must sum to 12. Seasonal factors are not available for quarterly indices. You can also set outputType to Level (the default) or Ratio.
LUSID uses an inflation curve to value inflation swaps, inflation legs and inflation-linked bonds with the InflationForward model. You do not need one to value nominal bonds.
Equity curves
An EquityCurveByPricesData object holds a baseDate, a list of future dates and the forward prices for those dates. LUSID uses it for equity options, equity swaps and CFDs when the recipe's equity model options set equityForwardProjectionType to EquityCurveByPrices. The other settings, FlatForwardCurveFromSpot and ForwardProjectedFromRatesCurve, project forward prices from the spot price and do not need an equity curve.
Note: LUSID looks for an equity curve named
EquityCurveByPriceswhatever the underlying, so by default every equity shares one curve. Thekeyof a market data rule can't pick out one underlying: LUSID ignores the identifier type and code in a key such asEquityCurve.EquityCurveByPrices.RIC.AAPL, so that rule applies to every equity. To give an underlying its own curve, add a rule to the recipe'sspecificRulesarray instead. ItsdependencySourceFilterselects the instruments on that underlying, for example by an instrument property, and itsmaskgives the name of that underlying's curve, for exampleAAPL/EquityCurveByPrices. Find out more about specific rules.
Volatility surfaces
Equity volatility surfaces, FX volatility surfaces and interest rate volatility cubes share the same shape. Each holds a baseDate, a list of option instruments and one quote for each, in quotes. The instruments set the strike and expiry of each point, and must be EquityOption, FxOption or InterestRateSwaption respectively. Each quote is a LogNormalVol or a NormalVol.
The quote type, the N or LN in the name, and the pricing model must all agree: lognormal for BlackScholes and other Black-Scholes-type models, normal for Bachelier.
If you only have a single volatility, upload a ConstantVolatilitySurface instead. It holds a baseDate (in UTC), an assetType of EquityVol, FxVol or IrVol, and a positive volatility. LUSID always treats it as lognormal, so use it only with lognormal models, and give it the name of the lognormal surface or cube it replaces, for example USD/LN.
Curve options
Interest rate curves, FX forward curves, credit spread curves, equity curves and inflation curves accept an optional marketDataOptions object of type CurveOptions. It controls how LUSID reads values between and beyond the points you supply. Volatility surfaces do not accept curve options.
Field | Values | Default |
|---|---|---|
|
|
|
|
|
|
| Any day count convention |
|
Using complex market data in scenarios
Scenarios let you shift market data and see the effect on a valuation. A scenario can shift interest rate curves (by currency and, optionally, curve name), CDS credit spread curves (by ticker), inflation curves (by index, by shifting the swap quotes and rebuilding the curve) and volatility surfaces. It cannot shift FX forward curves or equity curves, and it never shifts historical fixings.
Scenarios find curves by the same names as recipes do, so consistent naming makes your scenarios reliable as well as your valuations.