question

Upvotes
Accepted
1 1 1 1

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

python#contentindexconstituents
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
11.1k 22 6 9

@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.


1675765027417.png (137.2 KiB)
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.

Upvote
24.9k 67 15 21

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'})


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
1 1 1 1

Understood. Thank you both!

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.