Upgrade from Eikon -> Workspace. Learn about programming differences.

For a deeper look into our Eikon Data API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
1 1 1 3

screener query in python with a large number of identifiers

Hi, I have a similar query. My screener expression in excel to get the tickers is TR("SCREEN(U(IN(Equity(active,public,primary))/UNV:Public/), IN(TR.HQCountryCode,""AR,BR,CL,CN,HU,IN,ID,MY,MX,PL,RU,ZA,KR,TH,TR""), NOT_IN(TR.GICSIndustryCode,""401010"",""401020"",""402010"",""402020"",""402030"",""402040"",""403010""), CURN=USD)","TR.CommonName;TR.HeadquartersCountry;TR"&".GICSSector","curn=USD RH=In CH=Fd")

From the above formula, I get a list of tickers in Column A from A2:A14186. Now I get the Cash data for these tickers like this: TR($A$2:$A$14186,"TR.CashandEquivalents(CURN=USD Scale=6) ","Period=FQ0 Frq=FQ SDate=0d EDate=2006-12-31 sortd=periodenddate CH=periodenddate NULL=blank RH=IN")

I want to understand how to replicate this query in python

Also running the above query in excel together, I get a restriction of identifiers> 7500 ,

so I have to run it in small batches in excel.

eikoneikon-data-apipythonrefinitiv-dataplatform-eikonworkspaceworkspace-data-apiscreener
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@asingh
Thank you for your participation in the forum. Are any of the replies below satisfactory in resolving your query? If yes please click the 'Accept' text next to the reply that best answers your question. This will guide all community members who have a similar question. Otherwise please post again offering further insight into your question.
Thanks,
-AHS

@asingh
Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.
Thanks,
-AHS

Upvotes
Accepted
4.3k 2 4 5

The replicated request in Python:

import eikon as ek
ek.set_app_key(<yout app_key>)
rics = ('SCREEN(U(IN(Equity(active,public,primary))/*UNV:Public*/),'
    'IN(TR.HQCountryCode,"AR,BR,CL,CN,HU,IN,ID,MY,MX,PL,RU,ZA,KR,TH,TR"),'
    'NOT_IN(TR.GICSIndustryCode,"401010","401020","402010",'
    '"402020","402030","402040","403010"))')
fields = ["TR.CommonName", "TR.HeadquartersCountry", "TR.GICSSector"]
data, error = ek.get_data(rics, fields) list2 = list(data['Instrument'])
field2 = ["TR.CashandEquivalents.periodenddate","TR.CashandEquivalents"] 

As list2 contains more than 14,000 items, single request will fail with Payload Too Large error. You need to iterate through the list 10 items at a time.

for i in range(1, len(list2), 10):
    data2, error = ek.get_data(list2[(i-1)*10:i*10], field2,
        parameters={"SDate": "0", "EDate": "-9", "Scale": "6",
        "Period": "FY0", "Frq": "FQ", "CURN": "USD"})
    print(data2) 
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
1 1 1 3

@pierre.faurel..Thanks for sending this.

I tried the above code, but i did not get any entry in data. I tried with one country but the result is same. It gives me no entries in the dataframe.

It gives me a KeyError: 'Instrument' as there is no Instrument column.

Also I believe tmp is the len of the dataframe

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

You're right, there were a few errors in the example script including a missing parenthesis in the screener expression, which resulted in no instruments being retrieved. And instead of the tmp variable it should indeed have been list2. I just corrected the errors in the answer. Try it and see if it works for you.

@Alex Putkov.

Hi, I would like to get a similar result for the field "TR.CashandEquivalents/TR.InterestExpense" but I am getting NaN values.As a result I cannot pivot the final resulting dataframe.

I'm not sure I understand the question. Below is an example of the call that returns data for a small list of stocks. For your list you should expect to get a lot of NaNs because for this ratio to be returned both TR.CashandEquivalents and TR.InterestExpense must be available on quarterly report, which will not be true in many cases.

ek.get_data(["000416.SZ","ERW.BK","AFC.BK"], 
["TR.CashandEquivalents.periodenddate",
"TR.CashandEquivalents/TR.InterestExpense"], parameters={"SDate": "0", "EDate": "-9", "Scale": "6", "Period": "FY0", "Frq": "FQ", "CURN": "USD"})
Show more comments

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.