Upgrade from Eikon -> Workspace. Learn about programming differences.

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

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
11 1 2 4

Need Python API call formula to get historical price start date today and end date is TR.FirstTradeDate

df, err = ek.get_data(
instruments = ['IBM'],
fields = ['TR.PriceClose'],
parameters = {
'SDate': '2022-01-25',
'EDate': 'TR.FirstTradeDate',
'Frq': 'D'
}
)

display(df)



Any idea how to accomplish this?

eikon-data-apipython apiprice-update
icon clock
10 |1500

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

Upvotes
Accepted
1.3k 3 2 4

Hi @kenley.macandog123 ,

You need to split into 2 steps.

from datetime import date

# 1. retrieve TR.FirstTradeDate
df, err = ek.get_data(
    instruments=['IBM'],
    fields=['TR.FirstTradeDate'],
    field_name=True
)
sdate = df.iloc[0]['TR.FIRSTTRADEDATE']

# 2. then request historic
df, err = ek.get_data(
    instruments=['IBM'],
    fields=['TR.PriceClose.date', 'TR.PriceClose'],
    parameters={
        'SDate': sdate,
        'EDate': str(date.today()),
        'Frq': 'D'
    }
)
icon clock
10 |1500

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

Upvotes
11 1 2 4

Thank you @pf


The client is also considering this workaround. Please advise.


I already have the option below: first take the start dates, then look them up one by one. Is there simpler, that avoids the additional loop getting the first dates ?

start_dates, err = ek.get_data(
instruments = ric_list,
fields = ['TR.FirstTradeDate']
)
print(err)

ek.set_app_key(key)
all_rets = pd.DataFrame()
for ric in ric_list:
st_date = start_dates.loc[ start_dates['Instrument'] == ric, 'First Trade Date' ].tolist()[0]
if (st_date == '') or (st_date is None):
st_date = '2000-01-01'
print(ric, ' has no start date. Setting default.')

df, err = ek.get_data(
instruments = [ric],
fields = ['TR.TotalReturn1D.date','TR.TotalReturn1D'],
parameters = {
'SDate': st_date,
'EDate': '-1D',
'Frq': 'D'
})
if err is not None: print(ric, err)
all_rets = all_rets.append(df)
print(ric, ':', df.shape[0], ' rows. Cumulative: ', all_rets.shape[0], ' rows.')
print('Final data has %d rows' % df.shape[0])

icon clock
10 |1500

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

Upvotes
1.3k 3 2 4

Hi @kenley.macandog123 ,

Sorry for the delay to reply !
I don't see any other way except to request in 2 steps.

icon clock
10 |1500

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

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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