You can model an inflation-linked bond contract as an instrument of type InflationLinkedBond in LUSID. See all supported instruments.
Note LUSID has other instrument types for different kinds of bond:
Kind of bond | LUSID instrument type | More information |
|---|---|---|
Inflation-linked |
| Continue reading this article. |
Fixed rate with regular coupons (only the first can be irregular) |
| |
Fixed rate with irregular coupons (other than the first) |
| |
Mortgage-backed security (MBS) |
Mastering an instrument
There are numerous methods you can use to master an instrument of type InflationLinkedBond in the LUSID Security Master.
Some fields are common to all types of instrument, such as an intuitive name, the requirement to specify a set of identifiers, and the facility to store extra information as properties.
Fields in the economic definition object are specific to InflationLinkedBond. For more information on these fields, consult the schema, or select InflationLinkedBond from the definition dropdown in the API documentation:
.png?sv=2022-11-02&spr=https&st=2026-03-04T09%3A07%3A25Z&se=2026-03-04T09%3A25%3A25Z&sr=c&sp=r&sig=VXUJAbGo5eSecSKOTdluZCvLsEm3hy64bxPU4ABEwaE%3D)
For example, the following call to the UpsertInstruments API masters a bond in a custom instrument scope using a FIGI unique identifier. Note the fields specified below are the minimum required to master an instrument of type InflationLinkedBond:
curl -X POST "https://<your-domain>.lusid.com/api/api/instruments?scope=mycustominstrscope"
-H "Content-Type: application/json-patch+json"
-H "Authorization: Bearer <your-API-access-token>"
-d '{
"request_id_1": {
"name": "UKT 0 ⅜ 10/22/26",
"identifiers": {"Figi": {"value": "BBG00ZF1T8P5"}},
"definition": {
"instrumentType": "InflationLinkedBond",
"startDate": "2016-10-22T10:00:00.0000000+00:00",
"maturityDate": "2026-10-22T10:00:00.0000000+00:00",
"domCcy": "GBP",
"couponRate": 0.00375,
"principal": 1,
"calculationType": "Standard",
"flowConventions": {
"currency": "GBP",
"paymentFrequency": "6M",
"dayCountConvention": "Actual365",
"rollConvention": "22",
"businessDayConvention": "NoAdjustment"
},
"inflationIndexConventions": {
"inflationIndexName": "UKRPI",
"currency": "GBP",
"observationLag": "3M"
},
"tradingConventions": {
"priceScaleFactor": 100
}
}
}
}'Note the following:
The
instrumentTypemust beInflationLinkedBond.The
domCcyfield must be an ISO 4217 currency code (and likewise allcurrencyfields in nested objects).The
startDateshould be the accrual start date; that is, the date from which interest is calculated.The maximum
maturityDateis 31 December 2140.The
couponRateshould be expressed as a decimal rather than a percentage, so a bond paying:10% should have a
couponRateof0.12.5% should have a
couponRateof0.0250.375% should have a
couponRateof0.00375.
The
principalcan be any number, but we advise setting it to1to unitise the security and specifying the face or purchase amount on the transaction.The
calculationTypedefaults toStandard, suitable for modern UK Gilts with monthly inflation fixings. You may need to change this for certain kinds of bond, which impacts the quantity and quality of market data required. More information.The
flowConventionsobject stores all the information necessary to determine coupon periods, accrued interest amounts and payment dates:The
paymentFrequencyfield can be any tenor, in this case6Mto signify twice yearly. Supported day count conventions.The
rollConventionfield should count back from maturity, so in this case22for a bond maturing on 22 October, which means the coupon dates are 22 October and 22 April each year. More information on roll and business day conventions. Note business days in LUSID are determined by holiday calendars.The
accrualDateAdjustmentfield is optional and defaults toAdjusted. This is suitable for European treasury bonds but for US treasury bonds we recommendUnadjusted.The
settleDaysfield in a flow convention is deprecated, andresetDaysis ignored for inflation-linked bonds. Thescopeandcodefields can be ignored unless you are loading a flow convention from a library.
The
inflationIndexConventionsobject identifies a reference index to look up fixings:The
inflationIndexNameshould be an intuitive string that enables LUSID to look up fixing(s) in the Quote Store each time an accrued interest calculation is required. More information.The
currencyshould be the same as thedomCcy.The
observationLagmust be a tenor with a unit ofMfor months, for example3M.The
inflationFrequencydefaults to a tenor of1Mbut can be set to3Mfor Australian or NZ bonds, in which case the flow conventionpaymentFrequencymust also be set to3M.
If you omit the
exDividendDaysfield, a bond has no ex-dividend period.If you omit the
roundingConventionsarray, no rounding conventions are applied at the instrument level.If you do not specify a
stubType, the first and last coupon periods are expected to be regular. More information coming soon.The
tradingConventions.priceScaleFactorfield is set to100so bond prices can be expressed as a percentage of par without scaling every quote loaded into LUSID.
Providing the request is successful, the response:
Confirms the globally-unique LUID for the instrument;
Generates extra fields that are stored as part of the instrument definition and can be filtered on;
Supplies default values for fields not explicitly specified in the request:
{
"scope": "mycustominstrscope",
"lusidInstrumentId": "LUID_00003GVU",
"name": "UKT 0 ⅜ 10/22/26",
"identifiers": {
"LusidInstrumentId": "LUID_00003GVU",
"Figi": "BBG00ZF1T9P5"
},
"properties": [],
"instrumentDefinition": {
"startDate": "2016-10-22T00:00:00.0000000+00:00",
"maturityDate": "2026-10-22T00:00:00.0000000+00:00",
"flowConventions": {
"currency": "GBP",
"paymentFrequency": "6M",
"dayCountConvention": "Actual365",
"rollConvention": "22",
"paymentCalendars": [],
"resetCalendars": [],
"settleDays": 0,
"resetDays": 0,
"leapDaysIncluded": true,
"accrualDateAdjustment": "Adjusted",
"businessDayConvention": "None",
"accrualDayCountConvention": "Actual365"
},
"inflationIndexConventions": {
"inflationIndexName": "UKRPI",
"currency": "GBP",
"observationLag": "3M",
"inflationInterpolation": "Linear",
"inflationFrequency": "1M",
"inflationRollDay": 1
},
"couponRate": 0.00375,
"identifiers": {},
"calculationType": "Standard",
"indexPrecision": 5,
"principal": 1,
"principalProtection": true,
"stubType": "ShortFront",
"roundingConventions": [],
"tradingConventions": {
"priceScaleFactor": 100,
"minimumOrderSize": 0,
"minimumOrderIncrement": 0
},
"instrumentType": "InflationLinkedBond"
},
"state": "Active",
"assetClass": "Inflation",
"domCcy": "GBP",
"relationships": [],
"dataModelMembership": {
"membership": []
},
...
}Providing inflation fixings
LUSID must have access to inflation fixings (resets) in order to perform almost any operation on a portfolio holding an InflationLinkedBond.
Note the precise quantity and quality of market data required depends on a bond’s calculationType. More information.
Loading fixings into the LUSID Quote Store
Consider the example of a UK Gilt linked to UKRPI with a calculationType of Standard and the following inflationIndexName in its instrument definition:
"inflationIndexConventions": {
"inflationIndexName": "UKRPI",
...
}The following call to the UpsertQuotes API loads two fixings for 1 September and 1 October 2023 at midnight UTC into a MyFixings quote scope:
curl -X POST "https://<your-domain>.lusid.com/api/api/quotes/MyFixings"
-H "Authorization: Bearer <your-API-access-token>"
-H "Content-Type: application/json-patch+json"
-d '{
"Quote-0001": {
"quoteId": {
"quoteSeriesId": {
"provider": "Lusid",
"instrumentIdType": "ClientInternal",
"instrumentId": "UKRPI",
"quoteType": "Index",
"field": "mid"
},
"effectiveAt": "2023-09-01"
},
"metricValue": {
"value": 378.4, "unit": "none"
}
},
"Quote-0002": {
"quoteId": {
"quoteSeriesId": {
"provider": "Lusid",
"instrumentIdType": "ClientInternal",
"instrumentId": "UKRPI",
"quoteType": "Index",
"field": "mid"
},
"effectiveAt": "2023-10-01"
},
"metricValue": {
"value": 377.8, "unit": "none"
}
}
}'For general information on loading fixings into the Quote Store, see this article. Note the following about this example:
Both fixings are loaded into a quote scope (specified in the URL) that is only used for fixings, to avoid clashes.
The
instrumentIdTypeof each fixing must beClientInternal.The
instrumentIdmust be theinflationIndexNamespecified in the bond's inflation index convention, in this caseUKPRI.The
provideris set toLusidand thefieldtomid, to avoid validation errors.The
quoteTypeisIndex. Note bonds with other calculation types require fixings with different quote types.The
effectiveAtmust be the first day of a month at midnight UTC. Note bonds with other calculation types require fixings at different cadences.
Creating a suitable recipe
Your recipe must have a market data rule able to locate these fixings, for example:
"market": {
"marketRules": [
{
"key": "Inflation.InflationIndex.UKRPI",
"dataScope": "MyFixings",
"supplier": "Lusid",
"quoteType": "Index",
"field": "mid"
},
...
]
},For general information on recipes, start with this article. Note the following:
The
keyshould have a prefix ofInflation.InflationIndexand a suffix of the bond'sinflationIndexName. Note bonds with other calculation types have different recipe key requirements for fixings.The
dataScopemust match the quote scope into which fixings were loaded.The other fields must match their respective quote fields exactly (values are case-sensitive).
Registering the recipe with portfolios
You must register the recipe with every portfolio in which you intend to hold an InflationLinkedBond. See how to do this.
You can use the same recipe for valuation operations if you wish.
Booking a transaction to establish a position
The process of booking a transaction in an InflationLinkedBond is the same as for a vanilla fixed-rate bond.
Valuing your position
The basic process of valuing a portfolio containing an InflationLinkedBond is the same as for a vanilla fixed-rate bond. We recommend switching to the dedicated BondLookupPricer pricing model in your recipe.
Note the quantity and quality of market data required depends on a bond’s calculation type. LUSID must be able to locate in the Quote Store:
A market price for the valuation date, which may be clean, dirty or 'half-dirty’ (the price includes the inflation ratio but does not include accrued interest);
Fixings at a particular cadence:
Calculation type | Typical use case | Market data | ||
|---|---|---|---|---|
Recipe key to locate fixings | ||||
| UK Gilts post-2005 | A clean price ( | Monthly. 1st of each month at midnight UTC ( |
|
| UK Gilts pre-2005 | A ‘half-dirty’ price ( | ||
| Australian and NZ bonds | A clean price ( | Quarterly. 1st of each publication month at midnight UTC ( | |
| US TIPS | A clean price ( | Daily ( |
|
| A ‘half-dirty’ price ( | |||
| Brazilian bonds | A dirty price ( | Monthly. 15th of each month at midnight UTC ( |
|
Assumption resets ( |
| |||
Monitoring the lifecycle of the instrument
The process of handling instrument events for an InflationLinkedBond is the same as for a vanilla fixed-rate bond.