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