Upgrade from Eikon -> Workspace. Learn about programming differences.

For a deeper look into our Eikon Data API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
176 2 1 5

get list of RICs in chain 0#GRAINS/CASH

Hi,

I would like to get a list of all the RICs in the 0#GRAINS/CASH chain.

I tried:

df, err = ek.get_data('0#GRAINS/CASH', 'TR.CommonName')

or

df, err = ek.get_data('0#.GRAINS/CASH', 'TR.CommonName')

but I got the error: 'Unable to resolve all requested identifiers.'

I noticed this is a chain containing chains so I also tried

df, err = ek.get_data('0#CMAIZE-FR', 'TR.CommonName')

which should yield rics but the same problem occurred.

Exchanges seem to work fine as:

df, err = ek.get_data('0#.ftse', 'TR.CommonName')

works fine.


How can I get a list of all RICs in the GRAINS/CASH chain?


eikoneikon-data-apirefinitiv-dataplatform-eikonworkspaceworkspace-data-apichain-riccommodities
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hello @valstar ,

Thank you for your participation in the forum.

Is the reply below satisfactory in resolving your query?

If yes, please click the 'Accept' text next to the appropriate reply. This will guide all community members who have a similar question. Otherwise please post again offering further insight into your question.

Thanks,

-AHS

Upvotes
Accepted
39.4k 77 11 27

To retrieve chain constituents for any kind of chain, use a real-time field like DSPLY_NAME in get_data method instead of a fundamental & reference data field (aka TR.* field) like TR.CommonName. Try

ek.get_data('0#GRAINS/CASH', 'DSPLY_NAME')
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
176 2 1 5

Thank you @Alex Putkov. I managed to get the chains of the chain :). I wrote your command into a recursive function that keeps digging down the RIC until it reaches the lowest level (code not starting with 0#). Then I calls some more data and append it to a pandas dataframe.


import eikon as ek
import pandas as pd

df_fin = pd.DataFrame(columns = ['Instrument', 'DSPLY_NAME', 'Instrument Description', 'Asset Category Description'])

def get_all_children(parent_ric, dsply_name):
    logger.info(f"Call {parent_ric}")
    df, err = ek.get_data(parent_ric, 'DSPLY_NAME')
    for i, row in df.iterrows():
        if str(row['Instrument']) == parent_ric:
            logger.info(f'Skip {parent_ric} because it returned itself.')
            return
        elif str(row['Instrument']).startswith('0#'):
            # the child is a chain
            logger.info(f"Getting children of {str(row['Instrument'])}" )
            get_all_children(str(row['Instrument']), str(row['DSPLY_NAME']))
        else:
            # the child is an instrument
            logger.info(f"{str(row['Instrument'])} is not a chain so append df" )
            df_child, err_child = ek.get_data( 
                instruments=str(row['Instrument']),
                fields=[
                    'DSPLY_NAME',
                    'TR.InstrumentDescription',
                    'TR.AssetCategory']
            )
            # append to the global variable df_fin
            global df_fin
            df_fin = df_fin.append(df_child)

get_all_children('0#GRAINS/CASH', 'commodity')
df_fin.to_csv('out.csv', index=False)


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hi, I find that this doesnt seem to work as i hit the limit i believe (400 error). Is there a way to adjust for that (some kind of sleep function?)
Hi Shadeun. i just checked my code and we do it in a bit of a lazy fashion. we just go through them, and when we get an error, we wait 10 seconds and then try again (for max 20 times). give that a shot

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.