Skip to main content

Chapter 9 – Commodities and energy markets

Commodities and energy markets – overview chains

Main chains

  • 0#COMMOD – main chain for commodities.
  • 0#ENERGY – main chain for energy.

From these chains you can double-click on any of the sections to drill down through chains to the required sector and product without needing to know a code.

Chain description – commodities

ChainDescription
0#COMMODMain chain for commodities; includes base/precious metals, grains, oilseeds and livestock.
0#COMMOD/FUTLSEG commodities futures chain.
0#COMMOD/CASHCash Spot market prices chain.
0#COMMOD/OPTLSEG commodity options chain.
0#COMMOD/STATSLSEG commodity statistic chain.
0#COMMOD/SPRLSEG commodity spread chain.
0#COMMOD/IDXLSEG commodity index chain.
0#COMMOD/MISCLME commodity miscellaneous chain.
0#COMMOD/FRTLSEG freight chain.
0#COMMOD/COMPLSEG composite tile chain.
0#COMMOD/ATMTRC base metal ATM chain.

Chain description – energy

ChainDescription
0#ENERGYMain chain for energy; codes for power, gas and oil cash prices, futures and news.
0#ENERGY/FUTEnergy futures chain.
0#ENERGY/CASHEnergy cash spot price chain.
0#ENERGY/OPTEnergy options chain.
0#ENERGY/STATSEnergy statistics chain.
0#ENERGY/SPREADEnergy spread chain.
0#ENERGY/IDXEnergy index chain.
0#ENERGY/FRTEnergy freight chain.
0#ENERGY/COMPEnergy composite tile chain.
0#ENERGY/ATMEnergy ATM chain.
0#ENERGY/ROLLEnergy roll options chain.
0#ENERGY/EQEnergy equities chain.
0#ENERGY/STRIPEnergy strips chain.
0#ENERGY/SWAPEnergy swaps chain.
0#ENERGY/FSTEnergy stock forecasts.
0#ENERGY=ICAPICAP energy chain.
0#PLATTSPLATTS commodity chain Coverage.
0#WEATHERWeather chain.
0#SHIPPINGEnergy shipping chain.
0#TR-EN-USEnergy xxx.

While the chains navigate to logical RICs (standard templates), the apps also point to page displays where multiple items of interest are also available and curated as a holistic view of various markets.

  • Start at 0#COMMOD (commodities) or 0#ENERGY (energy).
  • Double-click the appropriate chain to drill down (e.g. futures, cash, indices, stocks, spreads).
  • Use COMMODITIES and ENERGY apps for a structured index of commodities and energy RICs.

image.png

image.png

import lseg.data as ld
from lseg.data.discovery import Chain
from lseg.data.content import pricing
import datetime
import time
ld.open_session()

<lseg.data.session.Definition object at 0x1f32a8388c0 {name='workspace'}>
df = ld.get_data('0#COMMOD',['LONGLINK1','LONGLINK2','LONGLINK3','LONGLINK4','LONGLINK5','LONGLINK6','LONGLINK7','LONGLINK8','LONGLINK9','LONGLINK10','LONGLINK11','LONGLINK12','LONGLINK13','LONGLINK14'])
df
InstrumentLONGLINK1LONGLINK2LONGLINK3LONGLINK4LONGLINK5LONGLINK6LONGLINK7LONGLINK8LONGLINK9LONGLINK10LONGLINK11LONGLINK12LONGLINK13LONGLINK14
00#COMMOD/CASH0#APCMA0#BASE/CASH0#CNGOIC0#ETHANOL/CASH0#FIBRES/CASH0#FREIGHT/CASH0#GRAINS/CASH0#LIVESTOCK/CASH0#MINOR/CASH0#OILSEEDS/CASH0#PRECIOUS/CASH0#SOFTS/CASH0#VNM-COMM0#MYSTEEL
10#COMMOD/FUT0#BASE/FUT0#PRECIOUS/FUT0#GRAINS/FUT0#OILSEEDS/FUT0#SOFTS/FUT0#FIBRES/FUT0#LIVESTOCK/FUT0#FREIGHT/FUT0#EXCHANGE/DATES0#WEATHER/FUT0#IRONORE/FUT<NA><NA><NA>
20#COMMOD/OPT0#BASE/OPT0#PRECIOUS/OPT0#GRAINS/OPT0#OILSEEDS/OPT0#SOFTS/OPT0#FIBRES/OPT0#LIVESTOCK/OPT0#POTATOES/OPT<NA><NA><NA><NA><NA><NA>
30#COMMOD/STATS0#AGS-STAT-CN0#BASE/STATS0#CFTC0#CMIE0#EXPAGRIFLOWS0#FIBRE-CN-EXIM0#GRA-EU-STAT0#GRAINS/STATS0#GRAINS-CN-EXIM0#ICE-COT-STX0#OILSEEDS/STATS0#ONIGC0#PRECIOUS/STATS0#SOFTS/STATS
40#COMMOD/SPR0#BASE/SPR0#PRECIOUS/SPR0#GRAINS/SPR0#OILSEEDS/SPR0#SOFTS/SPR0#FIBRES/SPR<NA><NA><NA><NA><NA><NA><NA><NA>
50#COMMOD/IDX0#FREIGHT/IDX0#GRAINS/IDX0#FIBRES/IDX0#GENCOM/IDX0#METALS/IDX<NA><NA><NA><NA><NA><NA><NA><NA><NA>
60#COMMOD/MISC0#COMMOD/LME0#COMMOD/EU<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
70#COMMOD/FRT0#GRAINS/FRT0#SUGAR/FRT0#COAL/FRT0#ORE/FRT0#INLAND/FRT0#SSYSHIP/PACKAGE<NA><NA><NA><NA><NA><NA><NA>
80#COMMOD/COMPCOCWLDCOFWLDSUGWLDSUGGLOBEGRAINGRAINGRAINGRAIN1AGUSA<NA><NA><NA><NA><NA><NA><NA>
90#COMMOD/ATM0#BASE/ATM0#PRECIOUS/ATM0#GRAINS/ATM0#OILSEEDS/ATM0#SOFTS/ATM0#FIBRES/ATM0#LIVESTOCK/ATM<NA><NA><NA><NA><NA><NA><NA>
100#COMMOD/ROLL0#BASE/ROLL0#PRECIOUS/ROLL0#GRAINS/ROLL0#OILSEEDS/ROLL0#SOFTS/ROLL0#FIBRES/ROLL0#LIVESTOCK/ROLL<NA><NA><NA><NA><NA><NA><NA>

So for any of these chains we can invoke a chain decoding for each to retrieve a long array of all underlying rics and then filter them to request further data such as price.

ch_1 = df['Instrument'][0]
ch_1

'0#COMMOD/CASH'
list_ch1 = Chain(ch_1)
constituents = list_ch1.constituents
constituents
    ['0#APCMA',
'0#BASE/CASH',
'0#CNGOIC',
'0#ETHANOL/CASH',
'0#FIBRES/CASH',
'0#FREIGHT/CASH',
'0#GRAINS/CASH',
'0#LIVESTOCK/CASH',
'0#MINOR/CASH',
'0#OILSEEDS/CASH',
'0#PRECIOUS/CASH',
'0#SOFTS/CASH',
'0#VNM-COMM',
'0#MYSTEEL']

So we can see here there are further chains included we could go down the heirarchy to navigate these - but we can also create routine to do this for us. Remember each of these chains may have RICs or contain other chains - which would need to be decoded.

total = len(constituents)
collection = []
inaccessible_chains = []
start_time = time.time()

def expand_chain_tree(constituents, level=0):
global total, collection

if isinstance(constituents, list):

# Iterate through the constituent list...
for idx, constituent in enumerate(constituents, start=1):

# Make sure the constituent node is a nested chain...
if constituent.startswith("0#"):
# Print progress...
if level == 0: print(f"\rProcessing chain {idx} of {total}...", end="", flush=True)

# Recursive call to expand nested chain...
#nested_chain = Chain(constituent)
nested_chain = pricing.chain.Definition(constituent).get_stream()
nested_chain.open(with_updates=False)
nested_chain.close()

if nested_chain.is_chain:
expand_chain_tree(nested_chain.constituents, level+1)
else:
inaccessible_chains.append(constituent)
else:
collection.append(constituent)

if level == 0:
print(f"\nCompleted in {time.time() - start_time:.2f} seconds")
print(f"Found a total of {len(collection)} constituents and {len(inaccessible_chains)} inaccessible chain records")
expand_chain_tree(constituents)

Processing chain 14 of 14... Completed in 639.73 seconds Found a total of 7574 constituents and 213 inaccessible chain records

So we now have a list of constituents in a collection as well as a list of errors or chains we were not able to decode

collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']
inaccessible_chains[:5]

['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']

Cash instruments

Commodities and energy RICs cover a wide variety of markets, so the best way to find data on instruments is to use the chains and speed-guides (see above).

RICs for cash instruments can be up to 15 alphanumeric characters long.

Typically they consist of up to three main components, separated by a delimiter:

RICroot  Type/Specification/Delivery  Location
  1. RIC root – mnemonic indicating the physical instrument.

    • Usually one to four alphanumeric characters.
    • Often the same root as the futures market commodity code (for example, LH for live hogs).
    • In some energy instruments, the specification is used as the RIC root to avoid long codes:
      • Example: BK180-ANT – 180 centistoke bunker fuel.
  2. Type / specification / delivery – up to eight alphanumeric characters.

    • Individual elements are optional but at least one must be present.
    • Order of precedence:
      • Type.
      • Specification.
      • Delivery.

Tip: Specification pages are available for many specialist or complex cash prices.

  • For commodities select COMMSPECSA page.
  • For energy select ENGSPECA page.
  1. Location – specifies the location or source of the physical commodity.
    • Two-character ISO codes for countries.
    • Three-character ISO codes for cities (where applicable).
    • Other abbreviations are standard across RICs (for example W for White, DLY for daily, D for day as in “15-day average”).

In addition to ISO region/city codes, the following codes are used:

Commodity codes

CodeCommodity
PEPPepper
SUGSugar
CCCocoa
COFCoffee
RUBRubber
TEATea

Example:

  • PEP is the root code for pepper.

These RIC structures are used for heavily traded cash instruments. Lightly traded instruments may not follow this format.

If in doubt, use the apps (such as COMMODITIES or ENERGY) to drill down to the instrument you need.

Region / city codes (examples)

CodeRegion/city
CARCaribbean
EUROEuropean
BEBremen, Germany
SANSantos, Brazil
PAPalembang, Sumatra
LALampung, Sumatra
TPT Priok, Indonesia
SUSurabaya, Indonesia
UPU Pandang, Indonesia
LATAMLatin America
CodeRegion/city
AMERNorth, South & Central America
AFRAfrica
INDOIndonesia
POPontianak, Indonesia
NINNorth India
SINSouth India
NENuwa Eliya, Sri Lanka
SUMSumatra
JAVJava
GUWGuwahati, India

Cash commodities chains

Chains provide a way of navigating directly from a high level down to specific detail.

  • You don’t need to know a RIC or any other code because there is a simple description at each stage.

Example – London cash price for coffee:

  1. Type 0#COMMOD for the main commodities chain.
  2. Double-click 0#COMMOD/CASH.
  3. In 0#COMMOD/CASH, double-click chains to drill further down until you reach the required instrument.

Typical navigation:

  1. 0#COMMOD – main commodities chain.
  2. 0#COMMOD/CASH – commodities physicals.
  3. 0#SOFTS/CASH – softs physicals.
  4. 0#EUCOFFEE/CASH – European coffee.
  5. 0#EUCOFFEE-LDN – coffee London.

This presents a list of quotes – double-click the desired description to see the quote displayed in standard format.

RICs for commodity chains

Chain RICs usually have two parts:

  • Commodity code.
  • Source / type indicator.

Note:

  • The commodity code for cash chains is not always the same as the root code for the full quote.
  • Example: root code for sugar is SUG, but the cash chain code is 0#SUGAR.

The best way to find out is to use the Commodity App.

General structure:

CommodityCode-RegionOrMarketCode

Examples to type into the Workspace Launcher bar:

  • COF-ARABICA – global Arabica coffee.
  • SUGAR – Agriculture Sugar App.

Energy cash price chains

Energy cash chains work in the same way as commodities.

  • Start at 0#ENERGY.

Example – spot price for jet fuel at New York Harbor:

  1. 0#ENERGY – main energy chain.
  2. 0#ENERGY/CASH – energy physicals.
  3. 0#PRODUCTS/CASH – products cash.
  4. 0#P-NYH – US products New York Harbor.

This displays a list of quotes – double-click on JET FUEL NYH Prompt.

RICs for energy cash chains

Example regional code structure:

  • 0#P-HKG – cash oil product in Hong Kong.

You can view lists of available root codes via chains:

  • 0#C-A – crudes, Asia.
  • 0#P-A – products, Asia.
  • 0#C-E – crudes, Europe.
  • 0#P-E – products, Europe.
  • 0#C-N – crudes, North America.
  • 0#P-N – products, North America.
df1 = ld.get_data('0#ENERGY',['LONGLINK1','LONGLINK2','LONGLINK3','LONGLINK4','LONGLINK5','LONGLINK6','LONGLINK7','LONGLINK8','LONGLINK9','LONGLINK10','LONGLINK11','LONGLINK12','LONGLINK13','LONGLINK14'])
df1
InstrumentLONGLINK1LONGLINK2LONGLINK3LONGLINK4LONGLINK5LONGLINK6LONGLINK7LONGLINK8LONGLINK9LONGLINK10LONGLINK11LONGLINK12LONGLINK13LONGLINK14
00#ENERGY/CASH0#CRUDE/CASH0#PRODUCTS/CASH0#ELECTRIC/CASH0#EMISSIONS/CASH0#NATGAS/CASH0#COAL/CASH0#WEATHER/CASH0#RENEWABLE<NA><NA><NA><NA><NA><NA>
10#ENERGY/FUT0#CRUDE/FUT0#PRODUCTS/FUT0#ELECTRIC/FUT0#EMISSIONS/FUT0#NATGAS/FUT0#COAL/FUT0#WEATHER/FUT0#EXCHANGE/DATES<NA><NA><NA><NA><NA><NA>
20#ENERGY/OPT0#CRUDE/OPT0#COAL/OPT0#PRODUCTS/OPT0#ELECTRIC/OPT0#EMISSIONS/OPT0#NATGAS/OPT0#WEATHER/OPT<NA><NA><NA><NA><NA><NA><NA>
30#ENERGY/STATS0#CRUDE/STATS0#PRODUCTS/STATS0#ELECTRIC/STATS0#NATGAS/STATS0#COAL/STATS0#OILARB-STATS<NA><NA><NA><NA><NA><NA><NA><NA>
40#ENERGY/SPREAD0#CRUDE/SPREAD0#PRODUCTS/SPREAD0#ELECTRIC/SPREAD0#EMISSION/SPREAD0#NATGAS/SPREAD0#COAL/SPREAD0#WEATHER/SPREAD<NA><NA><NA><NA><NA><NA><NA>
50#ENERGY/IDX0#CRUDE/IDX0#PRODUCTS/IDX0#ELECTRIC/IDX0#EMISSIONS/IDX0#NATGAS/IDX0#COAL/IDX0#WEATHER/IDX<NA><NA><NA><NA><NA><NA><NA>
60#ENERGY/FRT0#DIRTY/FRT0#CLEAN/FRT0#BARGE/FRT0#DRY/FRT0#ARB/FRT0#FFASHIP/PACKAGE<NA><NA><NA><NA><NA><NA><NA>
70#ENERGY/COMPCRDWLDCRUDESWAP/EUCRUDESWAP/USCRUDESWAP/WLDGSLWLDIPEOILNEWOILOILNGSWAP/EUNGSWAP/USNYMAXSNYMNRGFUT/VOINYMOILOILARBOILOIL
80#ENERGY/ATM0#CRUDE/ATM0#PRODUCTS/ATM0#ELECTRIC/ATM0#NATGAS/ATM0#WEATHER/ATM<NA><NA><NA><NA><NA><NA><NA><NA><NA>
90#ENERGY/ROLL0#CRUDE/ROLL0#PRODUCTS/ROLL0#NATGAS/ROLL<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
100#ENERGY/EQ0#ENGTOP0#ENGEQN0#ENGEQE0#ENGEQA0#ENGALL<NA><NA><NA><NA><NA><NA><NA><NA><NA>
110#ENERGY/STRIP0#CRUDE/STRIPS0#PRODUCT/STRIPS0#ELECTRIC/STRIPS0#EMISSION/STRIP0#NATGAS/STRIPS<NA><NA><NA><NA><NA><NA><NA><NA><NA>
120#ENERGY/SWAP0#CRUDE/SWAP0#PRODUCTS/SWAP0#ELECTRIC/SWAPS0#NATGAS/SWAPS0#COAL/SWAPS<NA><NA><NA><NA><NA><NA><NA><NA><NA>
130#ENERGY/FST0#ENSTX-FST<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
140#ICAP0#ENERGY=ICAP<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
150#PLATTS0#COAL=PLT0#ELEC=PLT0#METALS=PLT0#NATGAS=PLT0#OIL-BUNK=PLT0#OIL-CRUDE=PLT0#OIL-INTDAY=PLT0#OIL-NETBK=PLT0#OIL-PROD=PLT0#OIL-YIELD=PLT0#OIL-INDEX=PLT0#FWD-CURVE=PLT0#BIOFUELS=PLT0#PETCHEMS=PLT
160#WEATHER0#WEATHER/CASH0#WEATHER/FUT0#WEATHER/OPT0#WEATHER/ATM0#WEATHER/SPREAD0#WEATHER/STAT<NA><NA><NA><NA><NA><NA><NA><NA>
170#SHIPPING0#SHIPPING/CASH0#SHIPPING/FUT0#SHIPPING/INDEX0#SHIPPING/SWAPS0#SHIPPING/STATS<NA><NA><NA><NA><NA><NA><NA><NA><NA>
180#TR-EN-US<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
ch_2 = df1['Instrument'][0]
ch_2
    '0#ENERGY/CASH'
list_ch2 = Chain(ch_2)
constituents_1 = list_ch2.constituents
constituents_1
    ['0#CRUDE/CASH',
'0#PRODUCTS/CASH',
'0#ELECTRIC/CASH',
'0#EMISSIONS/CASH',
'0#NATGAS/CASH',
'0#COAL/CASH',
'0#WEATHER/CASH',
'0#RENEWABLE']
expand_chain_tree(constituents_1)
    Processing chain 8 of 14...
Completed in 1374.88 seconds
Found a total of 42240 constituents and 302 inaccessible chain records

Location codes for energy contracts (examples)

CodeLocation
AAsia
AFRAfrica
AGArabian Gulf
ARAAmsterdam–Rotterdam–Antwerp
BKKBangkok
CACanada
EEurope
G3Group 3
HKGHong Kong
INInland Rhine Market
KORSouth Korea
LALos Angeles
MCUS Mid-continent
CodeLocation
MEDMediterranean
NUS
NVANorfolk, Virginia
NWENorth West Europe
NYHNew York Harbor
PNWPacific Northwest
SFSan Francisco
SINSingapore
TWNTaiwan Kaohsiung
TYOTokyo (Tokyo–Yokohama–Osaka)
USGUS Gulf
WCUS West Coast

Type code structure

Examples to type into the Workspace Launcher bar:

  • BRT- – cash Brent oil (BRT is the type code).

These RIC structures are used for heavily traded cash instruments. Lightly traded instruments may not follow this format.

If in doubt, use the Apps (such as COMMODS or ENERGY) to drill down to the instrument you need.

More examples

To illustrate structure and diversity, commodities and energy markets can be grouped into sub-sectors:

Metals

  • METALS – main metals App (base, precious and minor).
  • LME/INDEX – London Metal Exchange index page.
  • 0#BASE – base metals chain.
  • 0#MINOR – minor metals chain.
  • 0#PREC – precious metals chain.
  • AGRI - main agriculture App

'Grains'

  • GRAINS – grain app.
  • 0#WHEAT-HARD-US – US hard wheat chain.

Oilseeds / Meals / Feeds

  • OILMEALFEED – Oilseeds/Meals/Feeds app.
  • 0#CNUT-AFR – France coconut.

Softs

  • SOFTS – Soft commodities app.
  • SUGAR – Sugar guide.
  • 0#SUGAR – Sugar chain.
  • COFFEE – Coffee guide.
  • 0#COFFEE – Coffee chain.
  • COCOA – Cocoa guide.
  • 0#COCOA – Cocoa chain.
  • COTTON – Cotton guide.
  • 0#COTTON – Cotton chain.
  • RUBBER – Rubber guide.
  • 0#RUBBER/CASH – Rubber Cash chain.
  • TEA – Tea guide.
  • 0#TEA/CASH – Tea Cash chain.
  • 0#ASTEA-DHA – Dhaka weekly tea auction prices.

Livestock / Meat / Seafood

  • LIVESTOCK – Livestock App
  • HOGS – Hogs main menu.

Energy

  • ENERGY – Energy app.
  • ETRANSITION – Energy Transition.

Oil

  • OIL – general oil overview.
  • OILOIL – IPE/NYMEX futures composite display.

Gas

  • 0#TRGBPc – United Kingdom natural gas.

Power

  • POWER – Main Power App.
  • POWNORD – Nordpool information and index pages (EL/NORDIC).
  • NAPOWER/PRICES1 – North American power index page.

Coal

  • FSAPI2GBMc1 – United Kingdom Coal

Carbon

  • CARBON – Carbon App

Metals Production Database (MPD)

The Metals Production Database (MPD) provides historical and projected figures for all known base-metal operations worldwide.

  • Simple web interface enables you to drill down quickly from a world view to a specific mine, refinery, smelter, etc.

To view the home page:

http://mpd.session.rservices.com

Field names for quote lists

If you want to set up a quote list in Excel, these are the most commonly used fields for commodities and energy.

FieldData Item NameFID numberWorkspace Data Item Code
Product nameDISPLAY NAME3DSPLY_NAME
BidBID22BID
OfferASK25ASK
Today’s highTODAY’S HIGH12HIGH_1
Today’s lowTODAY’S LOW13LOW_1
VolumeVOL ACCUMULATED21ACVOL_1

In brief: commodities and energy markets

  • There are many different types of code in these markets.
  • One way to check how RICs are constructed for a particular sector is to use the examples above.

For cash instruments, the structure is normally:

RICroot  Type/Specification/Delivery  Location

Example:

  • WHEAT-HARD-US – US hard wheat chain.

The best way of finding RICs is via:

  • Speed-guides: start at COMMOD or ENERGY.
  • Chains: start at COMMOD or ENERGY.

Futures and options in commodities and energy follow the generic futures and options structure described in the corresponding chapters.

LSEG Commodity Poll Chain ['0#COMMODPOLL']

LSEG provides detailed polls on commodities - for Oil, Metals, Natural Gas, CCIM,

df1 = ld.get_data('0#COMMODPOLL',['LONGLINK1','LONGLINK2','LONGLINK3','LONGLINK4','LONGLINK5','LONGLINK6','LONGLINK7','LONGLINK8','LONGLINK9','LONGLINK10','LONGLINK11','LONGLINK12','LONGLINK13','LONGLINK14'])
df1
InstrumentLONGLINK1LONGLINK2LONGLINK3LONGLINK4LONGLINK5LONGLINK6LONGLINK7LONGLINK8LONGLINK9LONGLINK10LONGLINK11LONGLINK12LONGLINK13LONGLINK14
00#OILPOLL0#LCOPOLL:0#LCOPOLLc0#CLPOLL:0#CLPOLLc0#LCOPOLLCTB:0#CLPOLLCTB:OILPOLL/INFO<NA><NA><NA><NA><NA><NA><NA>
10#METALPOLL0#BASEMETALPOLL0#PRECMETALPOLLMETALPOLL/INFO<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
20#NATGASPOLL0#HENRYHUBPOLLNATGASPOLL/INFO<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
30#CCIMPOLL<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
4COMMODPOLL/INFOCOMMODPOLL01COMMODPOLL02COMMODPOLL03COMMODPOLL04COMMODPOLL05<NA><NA><NA><NA><NA><NA><NA><NA><NA>

Again we can simply decode any or all the chains we are interest in using the function we created previously.

ch_2 = df1['Instrument'][0]
ch_2
    '0#OILPOLL'
list_ch2 = Chain(ch_2)
constituents = list_ch2.constituents
constituents

['0#LCOPOLL:', '0#LCOPOLLc', '0#CLPOLL:', '0#CLPOLLc', '0#LCOPOLLCTB:', '0#CLPOLLCTB:', 'OILPOLL/INFO']

expand_chain_tree(constituents)

Processing chain 6 of 14... Completed in 1408.42 seconds Found a total of 43645 constituents and 304 inaccessible chain records

collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']
inaccessible_chains[:5]
    ['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']

LSEG Commodity Volume and Open Interest Main Chain

We provide volume and open interest chain for a range of LME and EU instruments:

df5 = ld.get_data(['0#COMMOD/MISC'],['LONGLINK1','LONGLINK2','LONGLINK3','LONGLINK4','LONGLINK5','LONGLINK6','LONGLINK7','LONGLINK8','LONGLINK9','LONGLINK10','LONGLINK11','LONGLINK12','LONGLINK13','LONGLINK14'])
df5
InstrumentLONGLINK1LONGLINK2LONGLINK3LONGLINK4LONGLINK5LONGLINK6LONGLINK7LONGLINK8LONGLINK9LONGLINK10LONGLINK11LONGLINK12LONGLINK13LONGLINK14
00#COMMOD/LME0#NICKEL/LME0#ALUMINIUM/LME0#ALLOY/LME0#COPPER/LME0#LEAD/LME0#TIN/LME0#ZINC/LME0#FX/LME0#MISC/LME<NA><NA><NA><NA><NA>
10#COMMOD/EU0#COMMOD/TAX0#COMMOD/REF0#COMMOD/COR0#COMMOD/CRY<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>

Import Tariffs Chain

Formulae

Formulae

Where r(av) is the ad valorem rate and s is the specific duty per metric tonne.

We also compute the preferential duty (applicable under a qualifying trade agreement) and the duty saving it generates.

ch_3='0#COMMOD/TAX'
list_ch3 = Chain(ch_3)
constituents = list_ch3.constituents
constituents

['IM-DURM-P1',
'IM-DURM-P2',
'IM-COMWHI-P1',
'IM-COMWHI-P2',
'IM-COMWMED-P1',
'IM-COMWMED-P2',
'IM-COMWLOW-P1',
'IM-COMWLOW-P2',
'IM-BAR-P1',
'IM-BAR-P2',
'IM-MAZ-P1',
'IM-MAZ-P2',
'IM-SORG-P1',
'IM-SORG-P2',
'IM-RYE-P1',
'IM-RYE-P2']

expand_chain_tree(constituents)
    Completed in 1410.14 seconds
Found a total of 43661 constituents and 304 inaccessible chain records
collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']
inaccessible_chains[:5]
    ['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']

Commods Refunds

A duty refund (also called duty drawback) arises when goods on which duty was paid are subsequently:

  • Returned to the exporter / re-exported
  • Re-valued — e.g. the declared customs value was later corrected downward

Refund formulae

Refund Formulae

The refundable amount cannot exceed the original duty paid.

ch_4='0#COMMOD/REF'
list_ch4 = Chain(ch_4)
constituents = list_ch4.constituents
constituents
    ['W-EUREF-MAIN', 'BLY-EUREF-MAIN']
expand_chain_tree(constituents)
    Completed in 1410.40 seconds
Found a total of 43663 constituents and 304 inaccessible chain records
collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']
inaccessible_chains[:5]
    ['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']

Correctives

Correctives arise when a previously submitted customs declaration contained an error and must be amended. Common corrective scenarios:

Corrective typeTriggerEffect
Under-declarationCustoms value was stated too lowAdditional duty owed
Over-declarationCustoms value was stated too highDuty credit / refund
Classification errorWrong commodity code used (different rate)Duty difference (positive or negative)
Rate correctionWrong tariff rate appliedDuty difference

Corrective formula

Corrective Formula

A positive corrective means additional duty is owed; a negative corrective means a credit is due.

ch_5='0#COMMOD/COR'
list_ch5 = Chain(ch_5)
constituents = list_ch5.constituents
constituents

['DUR-EUCORR-P1',
'DUR-EUCORR-P2',
'DUR-EUCORR-P3',
'DUR-EUCORR-P4',
'DUR-EUCORR-P5',
'DUR-EUCORR-P6',
'DUR-EUCORR-P7',
'SRW-EUCORR-P1',
'SRW-EUCORR-P2',
'SRW-EUCORR-P3',
'SRW-EUCORR-P4',
'SRW-EUCORR-P5',
'SRW-EUCORR-P6',
'SRW-EUCORR-P7',
'SRW-EUACP-P1',
'SRW-EUACP-P2',
'SRW-EUACP-P3',
'SRW-EUACP-P4',
'SRW-EUACP-P5',
'SRW-EUACP-P6',
'SRW-EUACP-P7',
'FBL-EUC600-P1',
'FBL-EUC600-P2',
'FBL-EUC600-P3',
'FBL-EUC600-P4',
'FBL-EUC600-P5',
'FBL-EUC600-P6',
'FBL-EUC600-P7',
'FBL-EUC900-P1',
'FBL-EUC900-P2',
'FBL-EUC900-P3',
'FBL-EUC900-P4',
'FBL-EUC900-P5',
'FBL-EUC900-P6',
'FBL-EUC900-P7',
'FBL-EUC1100-P1',
'FBL-EUC1100-P2',
'FBL-EUC1100-P3',
'FBL-EUC1100-P4',
'FBL-EUC1100-P5',
'FBL-EUC1100-P6',
'FBL-EUC1100-P7',
'FBL-EUC1650-P1',
'FBL-EUC1650-P2',
'FBL-EUC1650-P3',
'FBL-EUC1650-P4',
'FBL-EUC1650-P5',
'FBL-EUC1650-P6',
'FBL-EUC1650-P7',
'FBL-EUC1900-P1',
'FBL-EUC1900-P2',
'FBL-EUC1900-P3',
'FBL-EUC1900-P4',
'FBL-EUC1900-P5',
'FBL-EUC1900-P6',
'FBL-EUC1900-P7',
'BLY-EUCORR-P1',
'BLY-EUCORR-P2',
'BLY-EUCORR-P3',
'BLY-EUCORR-P4',
'BLY-EUCORR-P5',
'BLY-EUCORR-P6',
'BLY-EUCORR-P7',
'RYE-EUCORR-P1',
'RYE-EUCORR-P2',
'RYE-EUCORR-P3',
'RYE-EUCORR-P4',
'RYE-EUCORR-P5',
'RYE-EUCORR-P6',
'RYE-EUCORR-P7',
'OAT-EUCORR-P1',
'OAT-EUCORR-P2',
'OAT-EUCORR-P3',
'OAT-EUCORR-P4',
'OAT-EUCORR-P5',
'OAT-EUCORR-P6',
'OAT-EUCORR-P7',
'MAZ-EUCORR-P1',
'MAZ-EUCORR-P2',
'MAZ-EUCORR-P3',
'MAZ-EUCORR-P4',
'MAZ-EUCORR-P5',
'MAZ-EUCORR-P6',
'MAZ-EUCORR-P7']
expand_chain_tree(constituents)
    Completed in 1527.58 seconds
Found a total of 43831 constituents and 304 inaccessible chain records
collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']

inaccessible_chains[:5]
    ['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']

image2.png

We can discover realtime fields:

ch_6='0#OILPOLL'
list_ch6 = Chain(ch_6)
constituents = list_ch6.constituents
expand_chain_tree(constituents)
    Processing chain 6 of 14...
Completed in 1561.71 seconds
Found a total of 45236 constituents and 306 inaccessible chain records
collection[:5]
    ['W-CADVDRUE-P1', 'W-CADVDRUE-P2', 'W-CADVDRUE-P3', 'W-CALPC-P1', 'W-CALPC-P3']
inaccessible_chains[:5]
    ['0#FODDER-CA', '0#DAIRY-CA', '0#ALFALFA-CA', '0#CEP-OC', '0#AOC-OC']
ld.get_data('LCOPOLLQM6','TR.Description')
InstrumentInstrument Description
0LCOPOLLQM6Brent Quarterly Forecast Jun 2026
ld.get_history('LCOPOLLQM6')
LCOPOLLQM6STD_DEVFCAST_HIGHFCAST_LOWFCAST_MODEFCAST_MEDNRTR_POLLFCAST_MEANFCAST_NUM
Date
2025-06-305.4875.055.06565.064.5464.5434
2025-07-315.2473.8154.256063.062.9862.9832
2025-08-295.0670.054.256060.062.1962.1927
2025-09-304.170.055.06563.5462.8962.8928
2025-10-314.3170.055.06563.062.1962.1932
2025-11-283.8570.054.06563.061.8561.8531
2025-12-313.7566.6552.06361.060.4560.4531
2026-01-303.5170.7555.06262.061.5361.5330
2026-02-273.9170.7555.06563.7563.6363.6334
2026-03-3115.48125.059.010097.5495.3395.3336
2026-04-3012.19125.059.0100100.099.9599.9532
2026-05-299.81117.2578.4100103.0102.66102.6628
ld.close_session()