Introduction
Welcome to this article, we have something special to share with you who is interested in retrieving financial data programmatically with basic Python, including the current user of Eikon Data API. Let me introduce you to LSEG Data Library for Python, which can do everything that Eikon Data API does and even more. Especially, LSEG Data Library give you a possibility to connect to our server in different ways depending on what suit your workflow. This article will tell you all about this library and how it is the better choice. We are happy to share this journey with you and can’t wait for you to let it helps improving your workflow.
If you are familiar with the reason behind this upgrade, click here to go to the Upgrade Guide section
The Strategy
- The Refinitiv Data Library (RD Lib) will be renamed the LSEG Data Library (LD Lib)
Due to LSEG's acquisition of Refinitiv, Refinitiv products and libraries are rebranded as LSEG. Rebranding a library means changing its name, which is a breaking change. This change will occur in version 2.0 of our data library, which will by released by Q2 of 2024 - We are taking advantage of the name change of our data library to slightly improve its public interfaces
Some aspects of the public APIs will be slightly improved in the LSEG Data Library 2.0. The “eikon” module which is a duplicate of the Eikon library will be removed. - We will continue to support and maintain the Refinitiv 1.x data library
After the rebranding and release of LSEG Data Library 2.0, the Refinitiv Data Library will become " Feature Complete", but we will continue to support it and provide maintenance releases. This is essential for customers who cannot migrate to the LSEG Data Library 2.0. However, new features will only be added to the LSEG data library. - The “eikon” module will not be removed from the Refinitiv 1.x data library
The FutureWarning you noticed was about the change to the LSEG Data Library 2.0. Maintenance releases of RD Lib will continue to include the “eikon” module. There are no plans to remove it. - We will ensure that there are no dependency conflicts between the Eikon library, the Refinitiv data library and the LSEG data library
This is essential for CodeBook and many of our customers. This check will be integrated into our automated tests. - The underlying data sources used by the LSEG Data Library's get_data() function will be fully aligned with those used by the Eikon Library's ek.get_data()
This will ensure a smooth migration from the Eikon library to the LSEG Data Library.
Overview of Eikon Data API
Eikon Data API, the part of the Eikon suite that provides simple access to Eikon data, is an ease-of-use libraries provided in Python and R programming languages. However, the Eikon application or LSEG Workspace application is required to be running to use this API as the application integrates a Data API proxy that acts as an interface between the library and our data platform.
This library is "Feature Complete", but we continue to support it and provide maintenance releases.
Introduction to LSEG Data Library
Now, let’s talk about our newer and strategic library, LSEG Data Library for Python, which provides a set of ease-of-use interfaces offering your applications a uniform access to the breadth and depth of financial data and services available on our Data Platform. With this library, the similar Python code can be used to retrieve the same data with Eikon Data API, but with more options of session type that you can choose to connect to the Data Platform depending on the Credentials and Services you have access to, you need to define and open either a Platform Session or Desktop Session:
- Platform Session: Used to connect to the Data Platform directly or via a local (deployed) Real-time Distribution System (RTDS). This requires our data platform credentials (machine account) or connection details of your local platform (IP of the local server and DACS username).
- When the Platform Session is used with the Data Platform credentials only, it retrieves both streaming data and non-streaming data from the Data Platform.
- When the Platform Session is used with connection details of your local deployed platform, it retrieves streaming data only from your local platform.
- Desktop Session: Like a connection of Eikon Data API, this type of session is used to connect to the Data Platform either via Eikon or via the LSEG Workspace application. The application must be run on the same PC as your Python code.
To learn more about these sessions and their access credentials required, please check the quick start guide prior start using the library
Plus, this library provides several abstraction layers enabling different programming styles and technics suitable for all developers from Financial Coders to Seasoned Developers:
- Access layer: The easiest way to get Refinitiv data. It provides simple interfaces allowing you to rapidly prototype solutions within interactive environments such as Jupyter Notebooks. It has been designed for quick experimentation with our data and for Financial Coders specific needs.
- Content layer: The basement of the Access layer. It provides developers with interfaces suitable for more advanced use cases (synchronous function calls, async/await, event driven). The Content layer refers to logical market data objects like market data prices and quotes, fundamental & reference data, historical data, company research data and so on.
- Delivery layer: A low abstraction layer that defines interfaces used to interact with service agnostic delivery mechanisms of the Refinitiv Data Platform. The Delivery layer is a foundational component of the Content layer.
- Session layer: defines interfaces allowing your application to connect to the Data Platform via different access points (either via a direct connection, via Eikon, via the Refinitiv Workspace, via CodeBook or even via a local Real-Time Distribution System).
Example codes of Python RD Library for these layers can be found here
In this article, we will focus on using the desktop session with access layer as you should have access to the LSEG’s RD Library desktop session if you have access to the Eikon Data API and the access layer is easiest to code.
Benefits
As we move from Eikon Data API to the Data Platform Library in Python, we are happy to let our users know how this change will be good for them. Here are some of the main benefits for existing Eikon Data API user to upgrade to the Data Platform Library.
- Easy changeover: We have made sure that upgrading to the new library will be easy, you won’t have to worry about big changes or difficulties.
- More value for you: With the new library, you get more than what you had with the previous one. This means more information, more ways to connect, etc.
- Customization to your needs: Every user’s workflow is different, and we know that. Hence, the new library lets you choose how you want to get data. This means you can set it up in a way that works best for you and your workflows.
- Real-Time Data: The new library also lets you see data as it happens. This is very important in the financial world where things change quickly.
We are really excited for you to experience the new library. It’s not just a new product but a big step forward in how we provide data and services to you.
Usage and Limits Guideline
If you are connecting using a desktop session to Eikon or Workspace via RD Library - the same limit as Eikon Data API applies - as the RD Library is mimicking the Eikon API and still sourcing its data from Eikon. We will keep you posted in case there is any update on this.
Upgrade guide
- You can click the link on the first column to redirect to more detail section.
- RD Library here refers to its Desktop session and Access layer.
- Eikon Data API Python Library is currently available in the Refinitiv Data Python Library package, to import it, you can use refinitiv.data.eikon instead of eikon.
- However, it will be removed in the future library version 2.0. Hence, you are recommended to upgrade your code to use the RD Library instead of Eikon Data API.
- The "eikon" module of the Refinitiv Data Platform Library for Python embeds all functions of the classical Eikon Data API ("eikon" python library). This module works the same as the Eikon Data API and can be used by applications that need the best of the Eikon Data API while taking advantage of the latest features offered by the Refinitiv Data Platform Library for Python.
Comparison topic | Eikon Data API | RD Library |
---|---|---|
Python library to import | eikon or refinitiv.data.eikon | refinitiv.data |
|
pip install eikon | pip install refinitiv-data |
|
import eikon as ek or import refinitiv.data.eikon as ek |
import refinitiv.data as rd |
Available functions | ||
ek.set_app_key('EIKON_APP_KEY') | rd.open_session(app_key = APP_KEY) | |
ek.get data() | rd.get_data() | |
ek.get_news_headlines() ek.get_news_story() |
rd.news.get_headlines() rd.news.get_story() |
|
ek.get_symbology() | rd.convert_symbols() | |
ek.get_timeseries() | rd.get_history() |
Available functions
1 ) Make a connection
Eikon Data API
The Eikon application or Workspace application must be running when you use the Eikon Data API Python library. Then generate the app key to be used with the set-app-key function. More detail can be found in the quick start guide.
#import refinitiv.data.eikon as ek # eikon module in rd library
import eikon as ek
ek.set_app_key('EIKON_APP_KEY')
RD Library
When accessing content from the desktop, you should have already obtained a valid desktop login. Therefore, to access content using the libraries, you will need an App Key required for a Desktop Session or if you are running the Workspace/Eikon Desktop Application (on the machine where you run your code), this information will be retrieved from the desktop application.. You can also access content directly within the cloud utilizes the OAuth 2.0 specification to ensure secure communication to use the Platform Session, User ID/Machine ID, Password, App Key are required.
This library also comes with more flexible ways to set the configuration, more detail can be found in the quick start guide and article: LSEG’s Refinitiv Data Library for Python and its Configuration Process. Normally, the function below will be used.
import refinitiv.data as rd
rd.open_session(app_key = APP_KEY)
2) Get data
Basically the function from two libraries are the same but for RD library fields parameter are not required (all available fields of instrument will be returned in the result if no field is specified). Plus, how their error returned are different as in Eikon Data API, the error will be returned as second variable of output, but for RD library, error will be raised as an exception.
Eikon Data API
get_data(instruments
, fields
, parameters=None
, field_name=False
, raw_output=False
, debug=False)
RD Library
get_data(universe: Union[str, Iterable[str]]
, fields: Union[str, Iterable[str], NoneType] = None
, parameters: Union[str, dict, NoneType] = None
, use_field_names_in_headers: bool = None)
Eikon Data API | RD Library | |
---|---|---|
Function returns | Returns a pandas.DataFrame with fields in columns and instruments as row index, and error message. Hence, the best practice on assigning the result of this function is assign it as a dataframe (pandas.DataFrame) and error (list of error) |
Retrieves pricing snapshots, as well as Fundamental and Reference data as pandas.DataFrame. This function only return result as a pandas.Dataframe. It raises exceptions on error and when no data is available |
|
instruments (mandatory) string or list | universe (mandatory) string or list |
|
fields (mandatory) string or list of strings | fields (optional) string or list of strings If no field is specified, all available fields on the instrument will be returned |
|
parameters (optional) string or dictionary - default None
Single key=value global parameter or dictionary of global parameters to request |
|
|
field_name (optional) boolean - default False Define if column headers are filled with field name or display names. |
use_field_names_in_headers (optional) boolean - default False If True - returns field name as column headers for data instead of title |
|
raw_output (optional) boolean - default False By default the output is a pandas.DataFrame, set raw_output=True to get data in JSON format. |
- |
|
debug (optional) boolean - default False When set to True, the JSON request and response are printed. |
This can be set in the Configuration file, set logs.level to debug |
3) News
Each libraries provide two functions to retrieve news, which are functions to retrieve news headlines and news story.
Eikon Data API
get_news_headlines(query='Topic:TOPALL and Language:LEN'
, count=10
, date_from=None
, date_to=None
, raw_output=False
, debug=False)
get_news_story(story_id
, raw_output=False
, debug=False)
RD Library
get_headlines(query: str
, count: int = 10
, start: 'OptDateTime' = None
, end: 'OptDateTime' = None
, order_by: Union[str, refinitiv.data.content.news.headlines._sort_order.SortOrder] = <SortOrder.new_to_old: 'newToOld'>)
get_story(story_id: str
, format: Union[refinitiv.data._access_layer.news._news.Format, str] = <Format.HTML: 'Html'>)
Eikon Data API | RD Library | |
---|---|---|
Function to get news headlines | ek.get_news_headlines() |
rd.news.get_headlines() |
Function returns | A dataframe of related news headlines | |
|
query (optional) string News headlines search criteria. |
query (mandatory) string The user search query for news headlines. |
|
count (optional) int - Default: 10 | |
Max number of headlines retrieved. Value Range: [1-100], | Count to limit number of headlines. | |
|
date_from (optional) string or datetime |
start (optional) string or timedelta |
Beginning of date range. String format is: '%Y-%m-%dT%H:%M:%S'. e.g. '2016-01-20T15:04:05'. |
||
|
date_to (optional) string or datetime |
end (optional) string or timedelta |
End of date range. String format is: '%Y-%m-%dT%H:%M:%S'. e.g. '2016-01-20T15:04:05'. |
||
|
|
|
Eikon Data API | RD Library | |
---|---|---|
Function to get news story | ek.get_news_story() | rd.news.get_story() |
Function returns | Return a single news story corresponding to the identifier provided in story_id as HTML text | Retrieves the news story items as string |
Parameters | get_news_story(story_id, raw_output=False, debug=False) | get_story(story_id: str, format: Union[refinitiv.data._fin_coder_layer.news._news.Format, str, NoneType] = <Format.HTML: 'Html'>) |
|
story_id: string The story id is a field you will find in every headline you retrieved with getting news headlines |
|
|
|
|
Eikon Data API
get_symbology(symbol
, from_symbol_type='RIC'
, to_symbol_type=None
, raw_output=False
, debug=False
, best_match=True)
RD Library
convert_symbols(symbols: 'StrStrings'
, from_symbol_type: Union[str, ForwardRef('SymbolTypes')] = '_AllUnique'
, to_symbol_types: 'SymbolTypesType' = (<SymbolTypes.RIC: 'RIC'>, <SymbolTypes.ISIN: 'IssueISIN'>, <SymbolTypes.CUSIP: 'CUSIP'>, <SymbolTypes.SEDOL: 'SEDOL'>, <SymbolTypes.TICKER_SYMBOL: 'TickerSymbol'>, <SymbolTypes.OA_PERM_ID: 'IssuerOAPermID'>, <SymbolTypes.LIPPER_ID: 'FundClassLipperID'>)
,preferred_country_code: 'OptCountryCode' = None
, asset_class: 'OptAssetClass' = None
, asset_state: 'OptAssetState' = None)
Eikon Data API | RD Library | |
---|---|---|
Function to convert symbology | ek.get_symbology() |
rd.convert_symbols() |
Function returns | Returns a pandas.DataFrame of instrument names converted into another instrument code. | |
|
symbol: string or list of strings | symbols: string or list of strings |
This is the only mandatory parameter, other parameters are optional | ||
|
default: RIC | default: _AllUnique |
from_symbol_type: string - Instrument code to convert from. Possible values: CUSIP, ISIN, SEDOL, RIC, ticker, lipperID, IMO |
||
|
to_symbol_type: string or list of strings | to_symbol_type: string or list of strings or SymbolTypes |
Instrument code to convert to - Default: all symbol types are requested Possible values: CUSIP, ISIN, SEDOL, RIC, ticker, lipperID, IMO, OAPermID |
||
|
|
|
5) Historical data
For RD library rd.get_history, fields parameter are not required, all available historical fields of instrument will be returned in the result if no field is specified. While the ek.get_timeseries retrieves data only from the default view and map them to OPEN, HIGH, LOW, and CLOSE fields.
Eikon Data API
get_timeseries(rics
, fields=None
, start_date=None
, end_date=None
, interval=None
, count=None
, calendar=None
, corax=None
, normalize=False
, raw_output=False
, debug=False)
RD Library
get_history(universe: Union[str, Iterable[str]]
, fields: Union[str, Iterable[str], NoneType] = None
, interval: Optional[str] = None
, start: 'OptDateTime' = None
, end: 'OptDateTime' = None
, adjustments: Optional[str] = None
, count: Optional[int] = None
, use_field_names_in_headers: bool = None
, parameters: Union[str, dict, NoneType] = None)
Eikon Data API | RD Library | |
---|---|---|
Function to get historical data | ek.get_timeseries() |
rd.get_history() |
Function returns | Returns a pandas.DataFrame of historical data on one or several instruments. It raises exceptions on error and when no data is available | |
|
rics: string or list of strings | universe: string or list of string |
Instruments (mandatory) string or list of RICs to retrieve historical data for This is the only mandatory parameter, other parameters are optional |
||
|
start_date: string or datetime.datetime or datetime.timedelta |
start: string or date or datetime or timedelta
|
|
end_date: string or datetime.datetime or datetime.timedelta |
end: string or date or datetime or timedelta
|
|
interval: string
|
interval: string
|
|
field: string or list of strings
|
field: string or list of string to request
|
|
count: int Max number of data points retrieved. |
count: int The maximum number of data points returned. Values range: 1 - 10000. Applies only to pricing fields. |
|
corax: string
|
adjustments: string
|
|
calendar: string
|
parameters: string or dict |
|
normalize: boolean - default False If set to True, the function will return a normalized data frame with the following columns Date, Security, Field |
|
|
raw_output: boolean - default False Set this parameter to True to get the data in json format |
- |
|
debug: boolean - default False When set to True, the json request and response are printed. |
This can be set in the Configuration file, set logs.level to debug |
|
- | use_field_names_in_headers : bool, default False If True - returns field name as column headers for data instead of title |
There are also other functions available such as getting streaming pricing data and other utility function such as chain object.
More details with the full example codes, including other layers (access, content, delivery, and session layer), can be found in the Example Repository
Conclusion
As we are upgrading to the new library, we want to thank our users for being part of this exciting journey. The new library is not just an upgrade but a big step forward in how we provide financial data and services. You will enjoy more flexibility, better data access, and the ability to see real-time information. We believe these changes are going to help you in working with the data more easily and flexibility.
Remember that we are here to support you. If you have any question or need any help regarding upgrading to the new library, you can find an answer in existing questions or post your question in our Q&A forum (with the tag: workspace-upgrade), the fastest way to get help from our experts, all questions in this forum are constantly monitored and answered by our developers and subject matter experts. We look forward to seeing how the new library will bring positive changes to your experience with our services.
Thank you for reading this article, we are excited about the future and can’t wait to share this next chapter with you.
- Register or Log in to applaud this article
- Let the author know how much this article helped you