Providing you have suitable access control permissions, you can upload an object to the LUSID Complex Market Data Store, for example a discount factor curve encapsulating the idea that money today is not worth the same as money in the future. See the different categories of complex market data.
Note: Choices you make when uploading market data impact the composition of the recipe you must create in order to use this data in a valuation.
- Method 1: Using the LUSID API
- Method 2: Using the LUSID web app (coming soon)
- Method 3: Using Luminesce (coming soon)
Using the LUSID API
You can upload up to 2000 complex market data objects in a single request:
- Obtain an API access token.
- Call the UpsertComplexMarketData API, encapsulating all the objects in the request in a single
scope
(namespace). See how to match this in a recipe. - For each object in the request, specify:
- An ephemeral ID, to track errors in the response (highlighted in green in the example below).
- A market data ID, comprising:
- A
provider
representing a financial data vendor. Valid providers are currentlyBloomberg
,DataScope
(for Refinitiv),SIX
,FactSet
,TraderMade
,Edi
,Rimes
,Lusid
andClient
; if your data vendor isn't listed, you can represent it usingLusid
. See how to match this in a recipe. - Optionally, a
priceSource
indicating a sub-supplier to the financial data vendor (above), for example Tradeweb or RRPS for Refinitiv DataScope. If specified, see how to match this in a recipe. - An
effectiveAt
date from which the object is valid. - A
marketAsset
constituting a name. Note each category of complex market data has a particular naming syntax, for example<Ccy>/<Ccy>OIS
for a discount factor curve. See how to match this in a recipe.
- A
- A market data type defining the object and its behavior, for example
DiscountFactorCurveData
for a discount factor curve. Each type has different fields; examine the API documentation (expand themarketData
section) and select the appropriate option from the dropdown to see what these are. For information on specifying tenors for objects that require them, see this article.
Consider the following example, of a discount factor curve and a FX forward pips curve uploaded together to a Growth
quote scope (highlighted in red in the URL below):
curl -X POST "https://<your-domain>.lusid.com/api/api/complexmarketdata/Growth"
-H "Authorization: Bearer <your-API-access-token>"
-H "Content-Type: application/json-patch+json"
-d '{
"ephemeral-id-1": {
"marketDataId": {
"provider": "Lusid",
"effectiveAt": "2021-01-20T00:00:00.0000000+00:00",
"marketAsset": "GBP/GBPOIS"
},
"marketData": {
"marketDataType": "DiscountFactorCurveData",
"baseDate": "2021-01-20T00:00:00.0000000+00:00",
"dates": [
"2021-02-19T00:00:00.0000000+00:00",
"2021-03-21T00:00:00.0000000+00:00",
"2021-04-20T00:00:00.0000000+00:00",
"2021-07-19T00:00:00.0000000+00:00",
"2022-01-20T00:00:00.0000000+00:00",
"2022-07-21T00:00:00.0000000+00:00",
"2023-01-20T00:00:00.0000000+00:00",
"2024-01-20T00:00:00.0000000+00:00",
"2025-01-19T00:00:00.0000000+00:00",
"2026-01-19T00:00:00.0000000+00:00"
],
"discountFactors": [
0.9998,
0.9994,
0.9987,
0.9953,
0.9871,
0.9778,
0.9705,
0.958,
0.9467,
0.9366
]
}
},
"ephemeral-id-2": {
"marketDataId": {
"provider": "Lusid",
"effectiveAt": "2021-01-20T00:00:00.0000000+00:00",
"marketAsset": "EUR/USD/FxFwdCurve"
},
"marketData": {
"marketDataType": "FxForwardTenorPipsCurveData",
"baseDate": "2021-01-20T00:00:00.0000000+00:00",
"domCcy": "EUR",
"fgnCcy": "USD",
"tenors": [
"1D",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"9M",
"1Y",
"15M",
"18M",
"2Y",
"3Y"
],
"pipRates": [
0.6375,
1.4975,
3.0275,
4.5625,
6.7525,
19.5125,
27.3225,
34.0625,
41.5175,
49.2025,
74.8125,
104.9125,
141.1925,
176.8375,
260.1475,
453.2625
]
}
}
}'