For a deeper look into our Eikon Data API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
45 3 5 10

Total Returns for Funds

Can i get daily total fund return (including distributions) for funds using the Eikon API. For instance can i get the daily total return for ric LP68167376 over the past 3 years? Using Excel addin it is possible : but the function requires the Thomson Reuters Datastream ribbon enabled.

eikoneikon-data-apiworkspaceworkspace-data-apirefinitiv-dataplatform-eikonpythondatafunds
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

13 Answers

Upvotes
Accepted
339 3 4 6

@rajanraju, you are right. It seems only the 10Y period of this rolling performance function supports correct month-end to month-end monthly returns.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvote
339 3 4 6

@rajanraju,

Yes, you should able to obtain the total return for funds covered by Lipper using Eikon API. However, I believe Eikon API currently only provides pre-calculated results so the periods available is limited to:

1M, 3M, 6M, 1Y, 3Y, 5Y, 10Y and Year-to-date returns*.

*All periods are month-end to month-end.

Also, the API should allow you to choose the calculation based on different currencies, including Native (i.e. the fund’s denominated currency), by default.

For 3-year period the function should be TR.Funds3YearPerf. You can use the Excel Formula Builder to check other similar functions for funds.

Using your sample fund: LP68167376, the total return of this fund for latest 3-years period (i.e. 2016-12-31 to 2019-12-31) is 37.81 (%) in SGD (the fund’s denominated currency). I checked this result against Lipper for Investment Management desktop service and the figure matches.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Hi again @rajanraju, I am afraid I may wrongly interpreted your needs. The total return function only provides 1 result, not a daily rolling returns. I am not sure how to get the daily rolling total returns for funds, may be some Charting API can help, but I am not familiar with these. *notes, if the chart is an index (or indexed return) for funds, then that should also be total returns. However, if you only get the price charts (e.g. NAVs) then it is not a total return.

Upvotes
45 3 5 10

@Wan Po.Lee Thank you. I was playing around to try and get month end total returns (rather than daily total returns). Unfortunately, it means making multiple calls to reconstruct the timeseries! Wonder if there is a more efficient way...

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Good news @rajanraju, if you are looking monthly returns, as I found there is a rolling performance API: TR.FundRollingPerformance. You can have weekly, or monthly, quarterly, yearly... but not daily. But monthly is there.

Upvotes
45 3 5 10

Great! To confirm these are total returns (including distributions)?


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Yes, I am pretty sure it is total return. Lipper's performances (returns) are all total returns (dividend re-invested as of ex-dividend date) by default. You can check the monthly returns by compounding the monthly returns for, say 3 years, and it should give you the same figure if you just get the 3-year return.

Upvotes
45 3 5 10

Thank you. I played around with this. Unfortunately, the rolling time frame sets the from and to period for the calculation. So if I wanted to do monthly returns for the last 3 years, there does not seem to be a way to get that from the get_data api call.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
339 3 4 6

Hi @rajanraju, I am not sure what do you mean by “does not seem to be a way to get that from get_data api call”. Do you mean you do not know how to set the period parameter? I am sorry that my Eikon API key do not work now, but I checked my old program I ran when my key was still working, there is a way to set the parameters in api such as TR.FundNAV. Thus, I believe the api call you can try should look similar to the line below (but the actual parameter key may different):

fund_monthly_returns = ek.get_data('LP68167376',['TR.FundRollingPerformance.Date', 'TR.FundRollingPerformance'], {'RollTimeFrame':'3Y', ‘Interval’:’M’, ‘Curn’:’Native’})

Anyway, below is the Excel formula to call the API that I tested. Hope some experts can help you to translate that Excel formula to the right Python call.

=TR("LP68167376","TR.FundRollingPerformance(RollTimeFrame=3Y Interval=M)","Curn=Native CH=Fd RH=IN",B2)

*notes: B2 in Excel formula just the cell location for putting the results and should not be used in Python calls.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
45 3 5 10

Many thanks @Wan Po.Lee. Regret I was not clear. Hopefully this makes the issue I face clearer. There are periods when the values change.

ek.get_data('LP68167376', ['TR.FundRollingPerformance.date','TR.FundRollingPerformance.value'],{'Curn':'SGD','RollTimeFrame':'1Y','Interval':'M'})

Out[102]:

( Instrument Date Rolling Performance

0 LP68167376 2019-02-22T00:00:00Z 5.010451

1 LP68167376 2019-03-29T00:00:00Z 1.175137

2 LP68167376 2019-04-26T00:00:00Z 1.242236

3 LP68167376 2019-05-24T00:00:00Z 0.037442

4 LP68167376 2019-06-28T00:00:00Z 2.446935

5 LP68167376 2019-07-26T00:00:00Z 2.214394

6 LP68167376 2019-08-30T00:00:00Z -1.805758

7 LP68167376 2019-09-27T00:00:00Z 0.908173

8 LP68167376 2019-10-25T00:00:00Z 1.311429

9 LP68167376 2019-11-29T00:00:00Z 2.885597

10 LP68167376 2019-12-27T00:00:00Z 1.792636

11 LP68167376 2020-01-24T00:00:00Z 1.867164, None)

ek.get_data('LP68167376', ['TR.FundRollingPerformance.date','TR.FundRollingPerformance.value'],{'Curn':'SGD','RollTimeFrame':'6M','Interval':'M'})

Out[103]:

( Instrument Date Rolling Performance

0 LP68167376 2019-08-23T00:00:00Z -3.542779

1 LP68167376 2019-09-27T00:00:00Z 2.725347

2 LP68167376 2019-10-25T00:00:00Z 1.311429

3 LP68167376 2019-11-22T00:00:00Z 2.037110

4 LP68167376 2019-12-27T00:00:00Z 2.639090

5 LP68167376 2020-01-24T00:00:00Z 1.867164, None)


Note the rolling performance for the date 2019-09-27 has changed from 0.908173 to 2.725347 between the two calls. subsequent dates are not always month end - as the rollingperformance interval is actually different even though as per the description the two time intervals says weekly.


Is there a way to force the dates to be month end dates? Would 10 years time interval be the only one to select?


1580288161550.png (123.6 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
339 3 4 6

@rajanraju, I am sorry that I am confused too. My Excel did return the same values as yours and it does not match the monthly returns from Lipper IM service. Sorry that I didn't double check the values earlier for the rolling performances. Please do not use that function until we confirmed it returns the expected results. I will study more tomorrow on this.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
45 3 5 10

@Wan Po.Lee thank you. Hopefully Refinitiv/Lipper will put a fix in to correct the rest of the sequences.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
45 3 5 10

@Wan Po.Lee I tried the 10 year performance for RIC = LP68331901. This fund began in 2015-08-13. The query ek.get_data('LP68331901', ['TR.FundRollingPerformance.date','TR.FundRollingPerformance.value'],{'Curn':'EUR','RollTimeFrame':'10Y','Interval':'M'}) returned

Instrument Date Rolling Performance

0 LP68331901 2015-01-31T00:00:00Z -0.640000

1 LP68331901 2015-02-28T00:00:00Z 4.186795

2 LP68331901 2015-03-31T00:00:00Z 2.115534

3 LP68331901 2015-04-30T00:00:00Z 0.208118

4 LP68331901 2015-05-31T00:00:00Z -0.047203 This kind of flummoxed me. Could you clarify why there should be rolling performance when the fund was not incepted?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvote
339 3 4 6

@rajanraju, This fund got a Pre-IPO date as of 2015-01-28 and the Eikon maybe using prices before the launch date. There is also something called Tracking Record Extension (TRE) that some funds is allowed to have pre-launch data included to simulate the performances. I am not 100% sure if it is really the TRE applied to this case, can you check with client support team?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvote
339 3 4 6

I found an notes in Lipper IM desktop application describing TRE: "Track Record Extension (TRE) is the common industry term used to describe the linking of performance histories of two or more share classes in order to represent the performance of the whole lifetime of an investment fund. The policy is largely based on: DIRECTIVE 2009/65/EC. In particular, we refer to Article 19 of Regulation 583/2010 concerning simulated performance. Lipper's global fund database extends beyond just UCITS funds but this policy serves as a useful framework of principals....

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Upvotes
45 3 5 10

@Wan Po.Lee many thanks. very useful. I've cut the returns from inception : admittedly, there will be a small difference for the first month, so I've made an adjustment to ignore the partial first month and start from the first full month.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Click below to post an Idea Post Idea