Screening using name contains

exp =  "SCREEN(U(IN(Equity(active,public,primary))), IN(TR.ExchangeCountryCode,CA), CURN=CAD)"


exp = "SCREEN(U(IN(Equity(active,public,private,primary))), Contains(TR.CommonName,%s), CURN=CAD)" %name


fields = ["TR.CompanyName"]


df,e = ek.get_data(exp, fields)

The first exp works, but the second one does not. How is the "Contains" argument supposed to be used?

Best Answer

  • Jirapongse
    Jirapongse admin
    Answer ✓

    @dshi

    The name should in double quotes. I have tried this one and it works.

    name = '"Business"'
    exp = 'SCREEN(U(IN(Equity(active,public,private,primary))), Contains(TR.CommonName,%s), CURN=CAD)' %name
    fields = ["TR.CompanyName"]
    df,e = ek.get_data(exp, fields)
    print (df)

Answers

  • Thanks!
    Also wanted to say that for some reason,

    exp = 'SCREEN(U(IN(Equity(active,public,private,primary))), Contains(TR.CommonName,\"%s\"), CURN=CAD)' %name

    Doesn't work.
  • Dear dshi,

    Could you say whether it is possible to send list of names and receive all result? I have around 3k company names, where ISIN or similar is not available, so I can search only by names. If i try loop for each name in list than there will be an error indicating too much requests. So is there any way to send list of names and get rics using python or excel maybe (if put all names in a column). Here I am looking for something like get_symbology, where one can send list of ISINs and receive list of RICs.

    Thank you very much!

  • When you say "loop for each name in list" do you mean that you call get_data on the names one at a time? That seemed to work for me. I also added some try excepts to catch HTTPErrors (which are usually returned when the request times out), and KeyErrors (which usually means that the request returned no result).

  • The easiest will probably be to use the =RSearch function in Excel. It doesn't accept a list of names, you can use only one name as a criteria per instance of the function. But the function can be easily multiplied by copying it down the column, and it's not subject to restrictions on the number of requests. Name search is inherently ambiguous and imprecise, but I'm sure you're well aware of this.

  • dshi, is it appropriate to ask you share your code? I am complete novice here and in python. Thanks!

  • Alexander, but the output will differ depending on the name in the request, should I write something like macros to resolve this issue? Unfortunately, I have only names, so such way of searching is only possible for me. Thanks!

  • Not sure If I'm allowed to share the whole thing, but this is how you might call the function for one company.

    fields = ["TR.OrganizationID"]

    '''where "search" would be the name of a company'''

    exp = "SCREEN(U(IN(Equity(active,public,private,primary))), Contains(TR.CommonName,%s), CURN=CAD)" %search


    df, e = ek.get_data(exp, fields)
  • I'm not sure I understand the issue. Yes, the output will differ depending on the input. There's no need for any macros. You can use cell referencing to read the inputs, e.g. assuming that the company names are in column A in cell B1 enter =RSearch("EQUITY","Search:'"&A1&"'",,"TRANSPOSE:YES"). Then you can copy the function down column B.