How can I use the Eikon python API to get the daily closing prices from -20 days to +20 days from historical earnings announcement dates (past 20 years) for a company?
Hi @eric.jian
I think the Earning Announcement dates refer to Income Statement Announce Date.
Here is the sample code, I am using 0005.HK as example:
import pandas as pdimport datetimeimport time#get income statement announcement date and format the datesdf,e = ek.get_data('0005.HK',['TR.ISOriginalAnnouncementDate(SDate=0,EDate=-19,Period=FY0,Frq=FY)'])df = df.rename(columns={"Income Statement Orig Announce Date":"AnnounceDate"})del df["Instrument"]df = df.drop_duplicates()df = df[df.AnnounceDate != '']df['AnnounceDate']= pd.to_datetime(df['AnnounceDate']) #print(df)#get -20 to +20 priceclose on a given datedatesList = df.AnnounceDate.tolist()for date in datesList: sdate = date - datetime.timedelta(days=20) edate = date + datetime.timedelta(days=20) data,e = ek.get_data('0005.HK', ['TR.PriceClose.Date','TR.PriceClose'], {'SDate':sdate.strftime('%Y-%m-%d'), 'EDate':edate.strftime('%Y-%m-%d'), 'Frq':'D'}) print (data) time.sleep(3) #delay between each api call
And some result:
Earnings announcements are once a quarter so there should be 4 dates each year. I ran the above code and got one income statement date for each year. Do I need to change the period/frequency arguments? What are the possible choices for those?
Also does the formula that pulls the closing price skip over holidays? When i use date as
Timestamp('2019-02-13 00:00:00')
I see that 2019 -02-15 is displayed twice.
sdate = date - timedelta(days=20) # date - 20 days
edate = date + timedelta(days=20) # date + 20 days
# do for S&P index instead
data,e = ek.get_data('.SPX',
['TR.PriceClose.Date','TR.PriceClose'],
{'SDate':sdate.strftime('%Y-%m-%d'), 'EDate':edate.strftime('%Y-%m-%d'), 'Frq':'D'})
Please see row 16 and 17. Thank you