...deDate
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?
Hi @kenley.macandog123 ,
You need to split into 2 steps.
from datetime import date# 1. retrieve TR.FirstTradeDatedf, err = ek.get_data( instruments=['IBM'], fields=['TR.FirstTradeDate'], field_name=True)sdate = df.iloc[0]['TR.FIRSTTRADEDATE']# 2. then request historicdf, err = ek.get_data( instruments=['IBM'], fields=['TR.PriceClose.date', 'TR.PriceClose'], parameters={ 'SDate': sdate, 'EDate': str(date.today()), 'Frq': 'D' })
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])
Sorry for the delay to reply !I don't see any other way except to request in 2 steps.