Eikon get_timeseries is returning different dates/values for same RIC depending on if it's submitted

Why would I be getting the following inconsistent results for RIC 'BFO-'?

tmp_df = eikon.get_timeseries(["BFO-"], interval="daily",
                               start_date = "2010-01-01T00:00:00-05:00",
                               end_date = "2021-01-27T00:00:00-05:00", 
                               fields=['CLOSE'])
print(tmp_df.head())
tmp_df = eikon.get_timeseries(["BFO-"], interval="daily",
                               start_date = "2015-02-17T00:00:00-05:00",
                               end_date = "2021-01-27T00:00:00-05:00", 
                               fields=['CLOSE'])
print(tmp_df.head())
tmp_df = eikon.get_timeseries(["BFO-", "BFO-N"], interval="daily",
                              start_date = "2010-01-01T00:00:00-05:00",
                              end_date = "2021-01-27T00:00:00-05:00", 
                              fields=['CLOSE'])
print(tmp_df.head())

image

Why is the 3rd query 1) returning values beginning in 2015 when the 2nd RIC has data, and not returning values from 2010> where 'BF0-' has valid data, and 2) Why is 'BFO-' returning NaN where in the previous query there were valid values.

Best Answer

  • @jwaldron The reason you are experiencing this is that you are hitting limits of the get_timeseries API call which (from this document) are:

    • get_timeseries: The current limit value (10-Oct-2019) is 3,000 data points (rows) for interday intervals and 50,000 data points for intraday intervals. This limit applies to the whole request, whatever the number of requested instrument.

    To get around this you should iterate over RICs and concatenate - for example:

    instruments = ['BFO-','BFO-N']
    df = pd.DataFrame()

    for r in instruments:
        try:
            ts = eikon.get_timeseries(r,'CLOSE',start_date="2010-01-01T00:00:00-05:00",end_date="2021-01-27T00:00:00-05:00",
                                   interval='daily')
            ts.rename(columns = {'CLOSE': r}, inplace = True)
            if len(ts):
                df = pd.concat([df, ts], axis=1)
            else:
                df = ts
        except:
            pass
        
    df

    image

    I hope this can help.

Answers

  • thank you... somehow I knew the 50k, and thought that applied to either... appreciate the info.