Historical index constituent data

Hello,

I need to obtain historical data for a given index's constituents, say the close price for the Stoxx600 every month since the year 2000. After looking at other questions about the topic on the forum I have not found an answer that satisfies my needs.

For example, with the following code I can get this historical data for the current constituents of the index.

closeprice_df,err = ek.get_data(instruments='0#.STOXX',fields=['TR.CLOSEPRICE','TR.CLOSEPRICE.periodenddate'],parameters={'SDate':'20000101','EDate':'20230101','Frq':'FQ','Curn':'EUR','CALCMETHOD':'CLOSE'})

And with the following code and adding the date parameter to the list of rics I can aquire the data for the historical constituents at any point in time.

closeprice_df, err = ek.get_data(['0#.STOXX(20000201)'],fields=['TR.CLOSEPRICE','TR.CLOSEPRICE.periodenddate'],parameters={'SDate':'20000101','EDate':'20230101','Frq':'FQ','Curn':'EUR','CALCMETHOD':'CLOSE'})

Is there a way to get the all the data I need with one request without having to loop over all the dates and ric lists and then somehow combine them with the index joiners and leavers data?

Many thanks in advance!

Angel

Best Answer

  • @angel.garcia Yes unfortunately there is not way of doing this with one call at the moment - but I can look into creating a function that can do this within our RD library. For the moment - as you have discovered it needs to be like this

    df = rd.get_data('0#.STOXX(20200331)',['TR.PRICECLOSE(SDATE=20200331).date','TR.RIC','TR.PRICECLOSE(SDATE=20200331)'])

    df

    1675765027417.png

    - obviously you can use the datetime/ timedelta packages to easily increment/decrement months in a loop. I hope this can help.

Answers

  • No, there is no single API call to get the index constituents, and their prices for a time range. If you are interested in just getting the close price of the index itself - without the constituents, then a call like this would work:

    df,err = ek.get_data(instruments='.STOXX',fields=['TR.CLOSEPRICE','TR.CLOSEPRICE.periodenddate'],parameters={'SDate':'20000101','EDate':'20230101','Frq':'FQ','Curn':'EUR','CALCMETHOD':'CLOSE'})


  • Understood. Thank you both!