ld.get_history() and ek.get_timeseries() equivalent fields

We are migrating from Eikon Data API (ek) to LSEG Data Library (ld)

Some parts of our codebase contain something like the following snippet

data = ek.get_timeseries(series, start_date=start_date, end_date=end_date, fields=["TIMESTAMP", "CLOSE"])

So we got all of our time series of interest in one go. Now, the field "CLOSE" seems to be not available anymore. Each "ric" seems to have one field that it is equivalent to the old "CLOSE", so I have two questions:

  1. Is there a way (besides looking one by one) to get the field equivalent to the old "CLOSE"? I have seen other questions where looking into the Data Item Browser (DIB) is suggested, but it seems unhelpful for me. For example, for the instrument ES10YT=RR the following fields are returned in get_history: 'B_YLD_1', 'HIGH_1', 'OPEN_PRC', 'LOW_1', 'HIGH_YLD', 'LOW_YLD',
    'A_YLD_1', 'BID', 'MID_PRICE', 'MID_YLD_1', 'CONVEXITY', 'MOD_DURTN',
    'ASK_HIGH_1', 'ASK_LOW_1', 'OPEN_ASK', 'OPEN_YLD', 'AST_SWPSPD', 'BPV',
    'BMK_SPD', 'ISMA_A_YLD', 'ISMA_B_YLD', 'SWAP_SPRDB', 'ASK', 'OAS_BID',
    'ZSPREAD', 'INT_BASIS', 'INT_CDS', 'TRTN_PRICE', 'OIS_SPREAD',
    'TED_SPREAD', 'ASP6M', 'ASP3M', 'ASP1M'
    , however, none of them seems to be in the DIB (see snapshot).
  2. Is there a way to get the hsitory of several instruments at once, looking only for one specific field for each one of them, so the behaviour of the old ek.get_timeseries is mimicked?

Thank you in advance.

image.png

Answers

  • wasin.w
    wasin.w admin

    Hello @sganfin

    About the first question. I did a quick test with Eikon Data API and https://developers.lseg.com/en/api-catalog/lseg-data-platform/lseg-data-library-for-python . The ek.get_timeseries() CLOSE fields seem to match with ld.get_history() B_YLD_1 field as follows.

    ek.png ld.png

    However, I am not a content expert, so I strongly suggest you contact the Workspace team to verify which field of your interested RICs that are the CLOSE value. You can contact the team via https://myaccount.lseg.com/en/productsupport website.

    contact_workspace_content_2.png

    About the 2nd question, the ld.get_history() method supports multiple RICs and fields request as follows.

    ld.get_history(universe=["LSEG.L", "VOD.L"], fields="BID", interval="1Y")
    
    ld2.png

    You can find the examples on the Workspace CodeBook app ("CODEBK") and GitHub repository.

  • sganfin
    sganfin Newcomer
    edited June 2

    Ok, I will contact the team for the CLOSE equivalents.

    Regarding the second question, yes, you can retrieve the same the same field or set of fields, for several universes. But, I don't know if it is possible, for example, to retrive "B_YLD_1" (and only that field) for "ES10YT=RR" and "BID" (and only that field) for "VOD.L" in a single call. Given that we are required to retrieve around 60 time series every day twice, it would be nice, with the eikon package it was fairly as the field was the same for every universe (CLOSE).

  • wasin.w
    wasin.w admin

    Hello @sganfin

    About the "I don't know if it is possible, for example, to retrieve "B_YLD_1" (and only that field) for "ES10YT=RR" and "BID" (and only that field) for "VOD.L" in a single call." requirement, it is not possible.

    The library interfaces support the same set of fields request for multiple items only.

    However, you can use the Python https://docs.python.org/3/library/asyncio.html library to work with the LD Content Layer - Historical Pricing object to request data in parallel as follows:

    import lseg.data as ld
    from lseg.data.content import historical_pricing
    from lseg.data.content.historical_pricing import Intervals
    import asyncio

    ld.open_session()

    tasks = asyncio.gather(
    historical_pricing.summaries.Definition('VOD.L', fields=['BID'], interval=Intervals.YEARLY, count = 5).get_data_async(closure = 'Vodafone'),
    historical_pricing.summaries.Definition('ES10YT=RR', fields=['B_YLD_1'], interval=Intervals.YEARLY, count = 5).get_data_async(closure = 'ES10')
    )

    await tasks

    def display_reponse(response):
    #print(response)
    print("\nReponse received for", response.closure)
    if response.is_success:
    display(response.data.df)
    else:
    print(response.http_status)

    vodafone,es10 = tasks.result()

    display_reponse(vodafone)
    display_reponse(es10)

    response.png

    You can find more detail on the following resources:

    I hope this helps.