Eikon API Speed

I am requesting 35 fields for 6600 stocks and the request is taking an hour to complete, is this expected or do I have an issue somewhere? I have broken the request into chunks of 50 stocks but this doesn't seem to help.

Best Answer

  • aramyan.h
    Answer ✓

    Hi @whardwick ,


    I am not sure if you have shared with me your full code, but with the code below which I updated a bit from yours I get the results for 5000 rics in about 6 minutes:

    chunks = [ticker_list[i:i + 2000] for i in range(0, len(ticker_list), 2000)]
    max_retries = 3
    merged_df = pd.DataFrame()
    for chunk in chunks:
    retries = 0
    while retries < max_retries:
    try:
    df, err = ek.get_data(chunk, fields)
    df.replace('', np.nan, inplace=True)
    merged_df = pd.concat([merged_df, df], ignore_index=True)
    except:
    retries +=1
    print(retries)
    continue
    break

    Please try with this and let me know how it goes. Please note that you may increase the chunk size even more and it will run quicker, however it may through bad requests. In any case the 2000 seemed stable for me.


    Best regard,

    Haykaz

Answers

  • Hi @whardwick ,


    I would say that is expected considering the number of stocks you are making the request for. Would you mind sharing your code here, so I have a look to see if there is a way to optimize it?


    Best regards,

    Haykaz

  • Hi Haykaz, thanks for the response. Here it is:


                fields = ['TR.SEDOL', 'TR.ExchangeCountry', 'TR.CompanyMarketCapitalization',
    'TR.CompanyMarketCapitalization(Curn=USD)', 'TR.GICSIndustryGroup', 'TR.CommonName',
     'TR.MeanPctChg(Curn=Native,Period=FY2)', 'CF_CURR', 'TR.CompanyReportCurrency',
     'TR.CompanyNumEmploy', 'TR.NumberOfAnalysts(Period=FY2)', 'CF_LAST', 'TR.PriceClose(SDate=0D,Curn=USD)', 'TR.F.BookValuePerShr',
     'AVG(TR.ReturnOnCapitalPercent(SDate=0D,EDate=0D-20AQ,Period=LTM,Frq=Q))',

     '(TR.EPSActValue(Period=LTM,SDate=0D)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D))/2)/TR.CompanySharesOutstanding(SDate=0D))+TR.EPSActValue(Period=LTM,SDate=0D-1AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-1AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-1AY))/2)/TR.CompanySharesOutstanding(SDate=0D-1AY))+TR.EPSActValue(Period=LTM,SDate=0D-2AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-2AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-2AY))/2)/TR.CompanySharesOutstanding(SDate=0D-2AY))+TR.EPSActValue(Period=LTM,SDate=0D-3AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-3AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-3AY))/2)/TR.CompanySharesOutstanding(SDate=0D-3AY))+TR.EPSActValue(Period=LTM,SDate=0D-4AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-4AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-4AY))/2)/TR.CompanySharesOutstanding(SDate=0D-4AY)))*20',

    'TR.EPSMean(Period=FY0,Curn=Native)', 'TR.EPSMean(Period=FY1,Curn=Native)',
     'TR.EPSMean(Period=FY2,Curn=Native)', 'TR.F.FCF3YrAvg', 'TR.SharesOutstanding', 'AVG(TR.Volume(SDate=0D,EDate=0D-29D))','TR.AvgDailyValTraded30D(Curn=USD)', 'TR.GICSSubIndustryCode', 'TR.FreeFloatPct', 'TR.ExpectedReportDate', 'TR.TotalReturn1D', 'TR.TotalReturn1Wk',
    'TR.TotalReturn1Mo', 'TR.TotalReturn3Mo', 'TR.TotalReturn6Mo', 'TR.TotalReturnYTD', 'TR.TotalReturn52Wk'
    ]
               
    merged_df = pd.DataFrame()


    # breaks tickers into chunks
     chunks = [ticker_list[i:i + 200] for i in range(0, len(ticker_list), 200)]
     max_retries = 3
     for chunk in chunks:
           retries = 0
           while retries < max_retries:
           try:
               df, err = ek.get_data(chunk, fields)
               df.replace('', np.nan, inplace=True)
               merged_df = pd.concat([merged_df, df], ignore_index=True)
  • Hi Haykaz, sure here it is:

    fields = ['TR.SEDOL', 'TR.ExchangeCountry', 'TR.CompanyMarketCapitalization',
    'TR.CompanyMarketCapitalization(Curn=USD)', 'TR.GICSIndustryGroup', 'TR.CommonName',
    'TR.MeanPctChg(Curn=Native,Period=FY2)', 'CF_CURR', 'TR.CompanyReportCurrency',
    'TR.CompanyNumEmploy', 'TR.NumberOfAnalysts(Period=FY2)', 'CF_LAST', 'TR.PriceClose(SDate=0D,Curn=USD)', 'TR.F.BookValuePerShr',
    'AVG(TR.ReturnOnCapitalPercent(SDate=0D,EDate=0D-20AQ,Period=LTM,Frq=Q))',

    '(TR.EPSActValue(Period=LTM,SDate=0D)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D))/2)/TR.CompanySharesOutstanding(SDate=0D))+TR.EPSActValue(Period=LTM,SDate=0D-1AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-1AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-1AY))/2)/TR.CompanySharesOutstanding(SDate=0D-1AY))+TR.EPSActValue(Period=LTM,SDate=0D-2AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-2AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-2AY))/2)/TR.CompanySharesOutstanding(SDate=0D-2AY))+TR.EPSActValue(Period=LTM,SDate=0D-3AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-3AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-3AY))/2)/TR.CompanySharesOutstanding(SDate=0D-3AY))+TR.EPSActValue(Period=LTM,SDate=0D-4AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-4AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-4AY))/2)/TR.CompanySharesOutstanding(SDate=0D-4AY)))*20',

    'TR.EPSMean(Period=FY0,Curn=Native)', 'TR.EPSMean(Period=FY1,Curn=Native)',
    'TR.EPSMean(Period=FY2,Curn=Native)', 'TR.F.FCF3YrAvg', 'TR.SharesOutstanding', 'AVG(TR.Volume(SDate=0D,EDate=0D-29D))','TR.AvgDailyValTraded30D(Curn=USD)', 'TR.GICSSubIndustryCode', 'TR.FreeFloatPct', 'TR.ExpectedReportDate', 'TR.TotalReturn1D', 'TR.TotalReturn1Wk',
    'TR.TotalReturn1Mo', 'TR.TotalReturn3Mo', 'TR.TotalReturn6Mo', 'TR.TotalReturnYTD', 'TR.TotalReturn52Wk'
    ]

    merged_df = pd.DataFrame()


    # breaks tickers into chunks
    chunks = [ticker_list[i:i + 200] for i in range(0, len(ticker_list), 200)]
    max_retries = 3
    for chunk in chunks:
    retries = 0
    while retries < max_retries:
    try:
    df, err = ek.get_data(chunk, fields)
    df.replace('', np.nan, inplace=True)
    merged_df = pd.concat([merged_df, df], ignore_index=True)
  • Hi Haykaz, thanks for the response:

    # breaks tickers into chunks
    chunks = [ticker_list[i:i + 200] for i in range(0, len(ticker_list), 200)]
    max_retries = 3
    for chunk in chunks:
    retries = 0
    while retries < max_retries:
    try:
    df, err = ek.get_data(chunk, fields)
    df.replace('', np.nan, inplace=True)
    merged_df = pd.concat([merged_df, df], ignore_index=True)
  • Hi Haykaz, thanks for the response. Here it is:

    fields = ['TR.SEDOL', 'TR.ExchangeCountry', 'TR.CompanyMarketCapitalization',
    'TR.CompanyMarketCapitalization(Curn=USD)', 'TR.GICSIndustryGroup', 'TR.CommonName',
    'TR.MeanPctChg(Curn=Native,Period=FY2)', 'CF_CURR', 'TR.CompanyReportCurrency',
    'TR.CompanyNumEmploy', 'TR.NumberOfAnalysts(Period=FY2)', 'CF_LAST', 'TR.PriceClose(SDate=0D,Curn=USD)', 'TR.F.BookValuePerShr',
    'AVG(TR.ReturnOnCapitalPercent(SDate=0D,EDate=0D-20AQ,Period=LTM,Frq=Q))',

    '(TR.EPSActValue(Period=LTM,SDate=0D)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D))/2)/TR.CompanySharesOutstanding(SDate=0D))+TR.EPSActValue(Period=LTM,SDate=0D-1AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-1AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-1AY))/2)/TR.CompanySharesOutstanding(SDate=0D-1AY))+TR.EPSActValue(Period=LTM,SDate=0D-2AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-2AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-2AY))/2)/TR.CompanySharesOutstanding(SDate=0D-2AY))+TR.EPSActValue(Period=LTM,SDate=0D-3AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-3AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-3AY))/2)/TR.CompanySharesOutstanding(SDate=0D-3AY))+TR.EPSActValue(Period=LTM,SDate=0D-4AY)/(((TR.CommShareholdersEqty(Period=FQ0,SDate=0D-4AY)+TR.CommShareholdersEqty(Period=FQ-3,SDate=0D-4AY))/2)/TR.CompanySharesOutstanding(SDate=0D-4AY)))*20',

    'TR.EPSMean(Period=FY0,Curn=Native)', 'TR.EPSMean(Period=FY1,Curn=Native)',
    'TR.EPSMean(Period=FY2,Curn=Native)', 'TR.F.FCF3YrAvg', 'TR.SharesOutstanding', 'AVG(TR.Volume(SDate=0D,EDate=0D-29D))','TR.AvgDailyValTraded30D(Curn=USD)', 'TR.GICSSubIndustryCode', 'TR.FreeFloatPct', 'TR.ExpectedReportDate', 'TR.TotalReturn1D', 'TR.TotalReturn1Wk',
    'TR.TotalReturn1Mo', 'TR.TotalReturn3Mo', 'TR.TotalReturn6Mo', 'TR.TotalReturnYTD', 'TR.TotalReturn52Wk'
    ]

    merged_df = pd.DataFrame()


    # breaks tickers into chunks
    chunks = [ticker_list[i:i + 200] for i in range(0, len(ticker_list), 200)]
    max_retries = 3
    for chunk in chunks:
    retries = 0
    while retries < max_retries:
    try:
    df, err = ek.get_data(chunk, fields)
    df.replace('', np.nan, inplace=True)
    merged_df = pd.concat([merged_df, df], ignore_index=True)


  • Thanks, Haykaz. Perhaps it's the fields that are the issue. They exceed the character limit so have uploaded. fields.txt

  • I have got the fields, just your while loop with try/except doesn't seem complete. Please try with my example and let me know if that improves
  • yes that's much faster thanks a lot