Time Series Yield

Hi i am currently trying to work out my own Dividend Yield.

I am using the following code to retrieve the daily price close and hope to index and match it with the dividend ex date.

df, err = ek.get_data(

instruments = [Instrument],

fields = [


'TR.PriceClose.date'

'TR.DivAdjustedNet',

'TR.DivAdjustedGross',

'TR.DivRecordDate',

'TR.DivPayDate',

'TR.DivExDate',

'TR.PriceClose'


],

parameters = {'SDate': '2021-10-01', 'EDate': 1,}

)


display(df)

Best Answer

  • pf
    pf
    Answer ✓

    Hi @ken03 ,

    To retrieve Price Close for each Dividend Ex Div, you need to split into 3 steps:

    1. request Dividend Ex date
    2. request Price Close for each Div Ex date
    3. append Price Close to initial result

    Example:

    df, err = ek.get_data(
    instruments = [Instrument],
    fields = ['TR.DivAdjustedNet', 'TR.DivAdjustedGross', 'TR.DivRecordDate', 'TR.DivPayDate', 'TR.DivExDate'],
    parameters={'SDate': '2021-10-01', 'EDate': 1,}
    )
    prices = []
    for d in df["Dividend Ex Date"]:
    price_df, err = ek.get_data(
    instruments = ["AAPL.O"],
    fields = ['TR.PriceClose.date', 'TR.PriceClose'],
    parameters={'SDate': d}
    )
    prices.append(price_df["Price Close"][0])
    print(price_df.to_string())

    df["Price Close"] = prices
    display(df)

    To optimize, I'll recommend you to migrate from eikon to refinitv-data library and use asynchronous get_data_async() function to retrieve Price Close with a multi-treaded implementation:

    import refinitiv-data as rd
    import asyncio

    session = rd.session.desktop.Definition(app_key="<YOUR APP KEY>").get_session()
    rd.session.set_default(session)
    session.open()

    ex_div_dates = rd.get_data(
    universe=["AAPL.O"],
    fields=['TR.DivAdjustedNet', 'TR.DivAdjustedGross', 'TR.DivRecordDate', 'TR.DivPayDate', 'TR.DivExDate'],
    parameters={'SDate': '2021-10-01', 'EDate': 1,}
    )
    dates = [str(d.date()) for d in ex_div_dates["Dividend Ex Date"]]
    ex_div_dates.set_index("Dividend Ex Date", inplace=True)

    loop = asyncio.get_event_loop()
    tasks = [loop.create_task(
    rd.content.fundamental_and_reference.Definition(
    universe=["AAPL.O"],
    fields=['TR.PriceClose.date', 'TR.PriceClose'],
    parameters={'SDate': d}).get_data_async()) for d in dates]

    results = loop.run_until_complete(asyncio.gather(*tasks))
    prices = pd.concat([r.data.df for r in results])
    prices.sort_values(by=["Date"])
    prices.set_index("Date", inplace=True)
    final_result = pd.merge(ex_div_dates, prices, left_index=True, right_index=True))
    display(final_result)

    session.close()

Answers

  • Hi

    1. Is refinitv-data library the new method for get_data?


    2. i am trying to concat the data which i retrieve from get_data and get_time series for this purpose. but it seems that the date time format retrieved using each is different, for get_data it returns the date plus 0.00.00YZ and for get_time series it only returns the date, hence the different formating is affecting the concat function.


    1. refinitiv-data is the new library to request or stream data with Refinitiv Data Platform, so yes, refinitiv-data.get_data() function replaces eikon.get_data()

    2. This should be easy to fix if you provide an example.
  • Perhaps you could use Realty Income Trust
  • @pf please try using the data from Realty Income Trust


  • @ken03 Sorry but what's Realty Income Trust ?

    Could you detail how you're using get_data and get_time series functions ?