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
16 2 1 9

For loop in RIC screener search string

Hello, I would like to screen for companies through a for loop. I would like to iterate on industry code, but I cannot get the iterators to work with the proper package syntax. Looking through the below code, can you tell me where I am going wrong? (Note, the need for the loop arises because my full search, and below is just a shortened sample, is hitting download limits, so I am trying to break it up.)

import eikon as rd
import pandas as pd
from datetime import date

rd.set_app_key('8__________1')

indcode = [52,53,54,57]
syntax = f"SCREEN(U(IN(Equity(active,public,primary)))," \
         "IN(TR.HQCountryCode,GB)," \
         "IN(TR.TRBCEconSectorCode,{i}),CURN=USD)"
CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]

df1 = []
for i in indcode:
    data1, err = rd.get_data(syntax, CATfields)
    df1.append(data1)
df1 = pd.concat(data1)

print(df1)
eikoneikon-data-apipythonpython 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.

Upvotes
Accepted
1.3k 3 2 4

Hi @LRE42 ,

The issue is coming from 'syntax' formatted string with i:

  1. in Python, formatted string doesn't support splitted multiline with '\'
  2. it need to be evaluated for each i value in the loop.

Your issue can be fixed with following update:

import eikon as rd
import pandas as pd
from datetime import date
 
rd.set_app_key('8__________1')
 
indcode = [52,53,54,57]
CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]
syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
         "IN(TR.HQCountryCode,GB),"
df1 = []
for i in indcode:
    data1, err = rd.get_data(
        syntax + f"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)", 
        CATfields)
    df1.append(data1)
df1 = pd.concat(data1)
 
print(df1)


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.

Hi -- thank you for this. It almost resolved my problem, except I had to make one more edit in the names of my tables in the foor loop. Here is the code I used to get this working:

import eikon as rd
import pandas as pd

rd.set_app_key('8_________1')

indcode = [52, 53, 54, 57]
CATfields = ["TR.CommonName", "TR.HeadquartersCountry"]
syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
         "IN(TR.HQCountryCode,GB),"
data2 = []
for i in indcode:
    data1, err = rd.get_data(
        syntax + f"IN(TR.TRBCEconSectorCode,{i}),CURN=USD)",
        CATfields)
    data2.append(data1)
df1 = pd.concat(data2)

print(df1)
Upvote
1.3k 3 2 4

Just an update !

For splitted multiline string, formatted string can be used with this way (only third line is formatted with i parameter):

syntax = "SCREEN(U(IN(Equity(active,public,primary)))," \
         "IN(TR.HQCountryCode,GB)," \
         f"IN(TR.TRBCEconSectorCode,{
                i}),CURN=USD)"

But it still need to be evaluated in the loop for each indcode value.

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.

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.