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
1 0 1 1

How to extract data for Bonds ISINs using Python

Im trying to retrieve historical prices for bonds on refinitiv eikon for around 500 bonds, however the code Im trying its not working:
"...

dataframes = {}

for isin in isin_numbers:
    try:
        # Fetch the issue date
        df_issue_date, err = ek.get_data(isin, ['TR.FiIssueDate'])
        issue_date = df_issue_date['Issue Date'][0].strftime('%Y%m%d')

        df, e = ek.get_data(isin, ['TR.ASKPRICE(SDate=' + issue_date + ', EDate=20230531,Frq=D).date','TR.BIDPRICE(SDate=' + issue_date + ', EDate=20230531, Frq=D)','TR.ASKPRICE(SDate=' + issue_date + ', EDate=20230531, Frq=D)'])
        dataframes[isin] = df
    except:
        print(f"No data available for ISIN: {isin}")

# Concatenate all dataframes into a single dataframe
df_all = pd.concat(dataframes.values())

I would highly appreciate your help.
Thanks a lot

eikon-data-api#technologybondsrefinitiv-data-platform-eikon
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 @catolica_user18 ,

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?
If so please can you click the 'Accept' text next to the appropriate reply? This will guide all community members who have a similar question.

Thanks,
AHS

@catolica_user18

Hi,

Please be informed that a reply has been verified as correct in answering the question, and marked as such.

Thanks,

AHS

Upvotes
Accepted
79.3k 253 52 74

@catolica_user18

Thank you for reaching out to us.

You can try this one:

dataframes = {}
isin_numbers = ["US91282CHC82","DE000BU2Z007","JP1103701P43"]
edate = "2023-05-31"
df_issue_dates, err = ek.get_data(isin_numbers, ['TR.FiIssueDate'])
for index, row in df_issue_dates.iterrows():
    try:
        isin = row["Instrument"];
        issue_date =  row["Issue Date"]
        print(isin, issue_date)
        if not pd.isnull(issue_date):
            df, err = ek.get_data(isin, 
                             ['TR.ASKPRICE.date',
                              'TR.BIDPRICE',
                              'TR.ASKPRICE'],
                             {"SDate":issue_date, "EDate":edate, "Frq":"D"})
            display(df)
            dataframes[isin] = df
        else:
            print(f"{isin} has no issue date.")
    except:
        print(f"No data available for ISIN: {isin}")
        
df_all = pd.concat(dataframes.values())
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
1 0 1 1

Thank you so much for your help. However, it is still not working and just showing the following:

US91282CHC82 2023-05-15

No data available for ISIN: US91282CHC82

DE000BU2Z007 2023-01-13

No data available for ISIN: DE000BU2Z007

JP1103701P43 2023-04-05

I don't know if I'm doing something else wrong

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
79.3k 253 52 74

@catolica_user18

I can run the code properly.

Please try to remove the try ... except block to verify what the problem is.

You can also enable logging in the API by using the following code.

import eikon as ek
ek.set_log_level(1)
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.

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.