RDP Inactive corporate Bonds

Hi,

Happy New Year!

I am trying to capture, using RDP query in Python, the inactive bonds for a given ParentOAPermID. Can you please confirm that the following (upper) snippet does what I am looking for.

A couple of more questions:

a. I see that there are quite few bonds without ISIN. Why is that?

b. I see that my query reached the 10000 limit, so I guess I will have to introduce additional filters to get all the bonds, right?

c. is it correct to say that bonds which are not any more active, do not have a RIC? If so, would a better approach be the 2nd one shown below, which is based on the RIC?

Many thanks

Kind regards

Grigorios

sBankID = '5043337560'
GroupSize = 10000
filterStrINACTIVE = " ParentOAPermID eq '{0}' " \
" and ( ( AssetStatus eq 'CLD') or ( AssetStatus eq 'MAT') ) ".format(sBankID)

srchfields = "RIC,ISIN, FullName, AssetStatus, ParentOAPermID, IssuerName, IssuerLegalName,IssuerOAPermID, Currency,IssueDate, MaturityDate, CouponRate"

dataINACT = rdp.search(view=rdp.SearchViews.GovCorpInstruments, filter=filterStrINACTIVE, top=GroupSize, select=srchfields)
dataINACTvalidISIN = dataINACT[ dataINACT["ISIN"].isnull()==False]
dataINACT.shape
# --> (10000, 10)
dataINACTvalidISIN.shape
# --> (9683, 10)


Approach based on RIC:

filterStrINACTIVEviaRIC = "  ParentOAPermID  eq '{0}'   " \
" and RIC eq null ".format(sBankID)

srchfields = "RIC,ISIN, FullName, AssetStatus, ParentOAPermID, IssuerName, IssuerLegalName,IssuerOAPermID, Currency,IssueDate, MaturityDate, CouponRate"

dataINACTviaRIC = rdp.search(view=rdp.SearchViews.GovCorpInstruments, filter=filterStrINACTIVEviaRIC, top=GroupSize, select=srchfields)

Best Answer

  • Hi @grigorios.mamalis

    The first thing I would suggest you do is to confirm exactly what you consider as "Inactive". For example, based on the bond you specified and looking at the status of the asset, I see this distribution:

    ahs.png

    From here, you can see some potential candidates that you may consider as 'inactive'. There is a specific status indicator 'Not Active' you can use with a total of 17 hits. However, if you also want to lump in those bonds that have matured (or any others), you can clearly see the total hits you would have to consider, i.e Matured has over 120,000. If you only want to look at the 'Not Active', you can clearly retrieve this. However, if you want to include others, such as those that have matured, you will need to figure out if you want to filter out some of them. Or, if you need to retrieve every 'matured' bond as well, then you would have to apply some techniques I outlined within Search - limits.

    As for missing 'ISIN's, there may be a category of matured bonds or some condition that may explain why certain matured bonds don't have an ISIN - I would suggest you raise content questions within the Refinitiv Helpdesk.

    As for the alternative approach to retrieve the bonds based on a RIC filter, this may be applicable if you understand why some bonds don't have RICs and if the reasons make sense for your use case - again, a content specialist would be your best source for this.

Answers

  • small addition to the filter I used above:


    filterStrINACTIVE = "  ParentOAPermID  eq '{0}' and ((DerivedCategory eq 'BOND') or (DerivedCategory eq 'Note'))   " \
    " and ( ( AssetStatus eq 'CLD') or ( AssetStatus eq 'MAT') ) ".format(sBankID)
  • One more question:

    I see that:

    set(dataINACTvalidISIN["MaturityDate"])

    {'2022-12-15T00:00:00.000Z', '2003-02-27T00:00:00.000Z', ...}

    How can I change the filter to only get Bonds with MaturityDate greater than a given date, or between two MaturityDate values?

    Many thanks in advance

  • nick.zincone ·

    Many thanks for the detailed feedback.

    Kind regards

    Grigorios

  • Hi @grigorios.mamalis

    Can you provide a link to the related question?