reaching the limit

I am trying to run

#There are 131 companies
screen = SCREEN.express.universe(Equity(active=True, public=True, primary=True)) \
.conditions(FORMULA('TR.AvgDailyValTraded3M', '>5000000'), IN('TR.CoRTradingCountryCode', 'BR'),
NOT_IN('TR.TRBCEconomicSector', 'Financials'),
NOT_IN('TR.TRBCEconomicSector', 'Real Estate')) \
.currency('BRL').query
#Quarterly
df1, err1 = ek.get_data(
instruments=screen,
fields=['TR.F.RevGoodsSrvc/TR.F.TotAssets',
'TR.F.EBITDA/TR.F.RevGoodsSrvc',
'TR.F.IncAvailToComShr/TR.F.ComEqTot',
'TR.F.IncAvailToComShr/TR.F.TotAssets',
'TR.F.NetDebt/TR.F.TotAssets',
'TR.F.CURRRATIO',
'TR.F.NetCFOpPerShrTTM',
'TR.F.EBIT.periodenddate',
'TR.F.EBIT.calcdate'],
parameters=
{
'SDate': '2008-01-01',
'EDate': '0D',
'Period': 'LTM',
'Frq': 'FQ',
'Curn': 'BRL'
}
)
#Monthly
df_multiples, err_multiples = ek.get_data(
instruments=screen,
fields=['TR.EVToSales',
'TR.EVToSales.date',
],
parameters=
{
'SDate': '2008-01-01',
'EDate': '0D',
'Period': 'LTM',
'Frq': 'CM',
'Curn': 'BRL'
}
)
#Monthly
df_price, err_price = ek.get_data(
instruments=screen,
fields=['TR.CLOSEPRICE',
'TR.CLOSEPRICE.date'
],
parameters=
{
'SDate': '2008-01-01',
'EDate': '0D',
'Frq': 'CM',
'Curn': 'BRL'
}
)
#Daily
df_vol, err_vol = ek.get_data(
instruments=screen,
fields=['TR.CLOSEPRICE',
'TR.CLOSEPRICE.date'
],
parameters=
{
'SDate': '2008-01-01',
'EDate': '0D',
'Frq': 'D',
'Curn': 'BRL'
}
)


I am getting the error below:

eikon.eikonError.EikonError: Error code 2504 | UDF Core request failed. Gateway Time-out


I know there is a daily limit for Eikon API, however, I would like to know how to circumvent this issue.

Using the screen code, I only can run the code at once. Could I run splitting this code?

Request per each interval?

How many companies per interval?

Thanks in advance




Best Answer

  • @rafael01

    Sorry for the issue you are facing, let me see if I can help you in resolving this.

    It is not effective to use a screener in every request. The first request should be used to get a list of RICs from that screener.

    rics, err1 = ek.get_data(
        instruments=screen,
        fields=['TR.CommonName'])
    rics

    Then, use rics["Instrument"].to_list() in the subsequent requests.

    df2, err1 = ek.get_data(
        instruments=df1["Instrument"].to_list(),
        fields=['TR.F.RevGoodsSrvc/TR.F.TotAssets',
                'TR.F.EBITDA/TR.F.RevGoodsSrvc',
                'TR.F.IncAvailToComShr/TR.F.ComEqTot',
                'TR.F.IncAvailToComShr/TR.F.TotAssets',
                'TR.F.NetDebt/TR.F.TotAssets',
                'TR.F.CURRRATIO',
                'TR.F.NetCFOpPerShrTTM',
                'TR.F.EBIT.periodenddate',
                'TR.F.EBIT.calcdate'],
        parameters=
        {
            'SDate': '2008-01-01',
            'EDate': '0D',
            'Period': 'LTM',
            'Frq': 'FQ',
            'Curn': 'BRL'
        }
    )
    df2

    For the limitations, please refer to the Eikon Data API Usage and Limits Guideline.

    According to the error message, it could be a timeout on the server.

    1666670470662.png

    For the last request (Daily), please try to split requests for a few years instead.

    df_vol, err_vol = ek.get_data(
        instruments=rics["Instrument"].to_list(),
        fields=['TR.CLOSEPRICE',
                'TR.CLOSEPRICE.date'
                ],
        parameters=
        {
            'SDate': '2020-01-01',
            'EDate': '0D',
            'Frq': 'D',
            'Curn': 'BRL'
        }
    )
    df_vol

    I hope this will help.

Answers