retrieve bonds based on codes

Robinrob
Robinrob Newcomer

Hello all,

I am trying to retrieve all bonds for a list of issuers and i found in this forum a way of doing, however when i implemented it for some stocks i get an error based on the stocks name (see image below) what leads to an incomplete list of bonds. My question is if there is any alternative to retrieve bonds based on RICS, PermIDS or similar codes so i can get the complete list, i have tried to use RICS and PermIDS without sucess

image.png

Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @Robinrob

    Thank you for reaching out to us.

    A string (Alexander's) contains an apostrophe character (') which must be escaped before using it.

    It must be changed to (''), such as Alexander''s.

    The code should look like this:

    a_string = "Alexander's"escaped_str = a_string.translate(str.maketrans({"'":  r"''"}))escaped_str
    
    image.png

    Instead of using the IssuerCommonName fields, you can use the IssuerOAPermID field. For example, 4295904333 is the PermID of J Alexander's LLC and you can the following filter.

     filter = f"IssuerOAPermID eq '4295904333'",
    

    I hope that this information is of help.

  • Hello @Robinrob

    I am assuming that your issuer data looks like this list:

    lst_company = ['Alexander\'s Inc','Bally\'s Corp','BJ\'s Wholesale Club Holdings Inc']
    

    The \' escape character might cause the problem with the "f-string {variable}" format. Based on my research, you need to use the f-string {{ variable }} as follows:

    import pandas as pd 

    lst_company = ['Alexander\'s Inc','Bally\'s Corp','BJ\'s Wholesale Club Holdings Inc']
    all_bonds = []

    for issuer in lst_company:
    try:
    df = ld.discovery.search(
    view = ld.discovery.Views.FIXED_INCOME_INSTRUMENTS,
    filter = f"IssuerCommonName eq '{{issuer}}'",
    top = 20,
    select = "IssuerCommonName, ISIN"
    )
    all_bonds.append(df)
    except Exception as e:
    print(f"Error retrieving data for : {e}")

    bonds_df = pd.concat(all_bonds, ignore_index = True)
    print(bonds_df.head(20))

    Result:

    code.png

    I hope this helps.