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

Best Answer

  • Jirapongse
    Answer ✓

    @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())

Answers

  • 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

  • @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)