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.
Best Answer
-
@rajanraju, you are right. It seems only the 10Y period of this rolling performance function supports correct month-end to month-end monthly returns.
0
Answers
-
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.
0 -
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.
0 -
@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...
0 -
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.
0 -
Great! To confirm these are total returns (including distributions)?
0 -
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.
0 -
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.
0 -
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.
0 -
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?
0 -
@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.
0 -
@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?
0 -
@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?
0 -
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....
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 685 Datastream
- 1.4K DSS
- 616 Eikon COM
- 5.2K Eikon Data APIs
- 10 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 252 ETA
- 557 WebSocket API
- 38 FX Venues
- 14 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 23 Messenger Bot
- 3 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 275 Open PermID
- 44 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 22 RDMS
- 1.9K Refinitiv Data Platform
- 653 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 27 DACS Station
- 121 Open DACS
- 1.1K RFA
- 104 UPA
- 193 TREP Infrastructure
- 229 TRKD
- 917 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 90 Workspace SDK
- 11 Element Framework
- 5 Grid
- 18 World-Check Data File
- 1 Yield Book Analytics
- 46 中文论坛