For a deeper look into our Eikon Data API, look into:
Overview | Quickstart | Documentation | Downloads | Tutorials | Articles
Hi all,
Is there any way to extract the top10 companies by Revenue in a specific TRBC activity using the screen expression in the Eikon API?
I mean, to the following query:
exp = 'SCREEN(U(IN(Equity(active, public, private, primary))),IN(TR.TRBCActivityCode,"5430102012"),CURN=USD)'
companies_data, err = ek.get_data(instruments=[exp], fields=['TR.Orgidcode','TR.CompanyName', {'TR.Revenue':{'params':{'Period': 'FY2016', 'Curn':'USD'}}}]
I only want to see the top10. Anyway, I think that Eikon can only return some x values.
Thanks in advance,
Miriam
You can include top 10 criteria directly in your screener expression
exp = 'SCREEN(U(IN(Equity(active, public, primary))),IN(TR.TRBCActivityCode,"5430102012"),TOP(TR.Revenue(FY2016), 10, nnumber),CURN=USD)' companies_data, err = ek.get_data(instruments=[exp], fields=['TR.Orgidcode','TR.CompanyName', {'TR.Revenue':{'params':{'Period': 'FY2016', 'Curn':'USD'}}}]) companies_data.sort_values(by=['Revenue'],ascending=False)
I have done it only for public companies, the separate can be done for private ones.
This is how you can do it in in SCREENER
@marcin.bunkowski, I converted your comment to an answer, it is the best answer to this query :-)
I do not know if there is a way to easily limit the result set to 10, I searched but could not find it. But there is a way to sort the results by revenue, using 'sort_dir':'desc'. This results in >76k results. A trivial solution to display only 10 results is to use head(10):
exp = 'SCREEN(U(IN(Equity(active, public, private, primary))),IN(TR.TRBCActivityCode,"5430102012"),CURN=USD)' companies_data, err = ek.get_data(instruments=[exp], fields=['TR.Orgidcode','TR.CompanyName', {'TR.Revenue':{'params':{'Period': 'FY2016', 'Curn':'USD'}, 'sort_dir':'desc'}}]) companies_data.head(10)
Hope this helps a bit.
Thanks for the help but if I run your code I have the error...:
EikonError: Error code 400 | Backend error. 400 Bad Request
I suppose that it is due to the Eikon limit per time.
I do not know if there is one way to sort the companies and only ask for top 10 ...
A 400 is returned when the platform is overwhelmed. Not really surprising since there are >76k results.
I do not believe it is possible to limit the result set to only 10 directly, because the query is done in 2 steps:
You might want to narrow down your screening criteria, if possible.
An alternative could be to split the screener result set into several smaller ones, and submit several get_data requests for the smaller instrument lists. After that you could combine the individual result sets to analyze them. More cumbersome, but less heavy.
Hi @marcin.bunkowski and @Christiaan Meihsl
Thanks both for the help!!!
It works for public companies but I cannot get it right for private companies. I mean, for example Mercadona is not an equity and I want companies.
If I look for the formula in Eikon Excel there is no 'TOP' filter and when I write the formula in EIKON Python I get an error:
exp ="SCREEN(U(IN(Private(OrgType(COM, UNK, MKP)))/*UNV:Private*/), IN(TR.TRBCActivityCode,""5430102012""), BETWEEN(TR.PCTotRevenueFromBizActv(Period=FY2016), 0.00, 100.00), CURN=USD)" companies_data, err = ek.get_data(instruments=[exp], fields=['TR.CommonName'])
EikonError: Error code 400 | Backend error. 400 Bad Request
Thanks in advance,
Miriam
You might want to try this (thanks go to @marcin.bunkowski for help on this):
exp ="SCREEN(U(IN(Private(OrgType(COM,UNK,MKP)))/*UNV:Private*/), IN(TR.TRBCActivityCode,""5430102012""), TOP(TR.PCTotRevenueFromBizActv(Period=FY2016),10,nnumber), CURN=USD)" companies_data, err = ek.get_data(instruments=[exp], fields=['TR.PCTotRevenueFromBizActv','TR.CommonName']) companies_data.sort_values(by=['Total Revenue (Pvt)'], ascending=False)
Hope this helps
How to get all investors for a list of stocks, historically with the python API
Screener does not return all active/inactive Euronext Paris stocks
screener query in python with a large number of identifiers
Equity Screening on Ex Dividend Date with API
Can requests via the Screener be adjusted fo historic values?