The question I have pretty much says it all, I'm requesting data using Python API and I noticed that when I use a frequency of 'M', I get monthly data BUT is end of month, regardless if it is weekend or trading day.
Is there a way to get monthly data using the last trading day of the month?
Thanks in advance.
The API does not provide capability to adjust calendar end of month returned to business days. If you just want to adjust the dates to weekdays, you can easily do it using Timeseries / Date functionality available in pandas dataframe. This example adds a column to the dataframe containing dates adjusted to weekdays:
>>> df = ek.get_timeseries('GBP=','CLOSE',interval='monthly',start_date='2015-01-01') >>> from pandas.tseries.offsets import * >>> df['Trading Day'] = df.index + Day(1) - BDay(1) >>> df.head() GBP= CLOSE Trading Day Date 2015-01-31 1.5066 2015-01-30 2015-02-28 1.5432 2015-02-27 2015-03-31 1.4816 2015-03-31 2015-04-30 1.5349 2015-04-30 2015-05-31 1.5288 2015-05-29If you need the date adjustment to take into account market holidays and your focus is a single market, you can still reasonably do it with pandas. See this article for details and examples. If your universe of instruments spans multiple markets, this is where adjustment to business days gets complicated, as you need holidays calendars for all these markets and the mapping between instruments and calendars. Eikon includes a COM library named AdfinX Analytics, which among other things provides date manipulation functions including adjustment to business days based on a market calendar, which could be useful. But it also has its limitations particularly with regard to market calendars available and the mapping of instruments to calendars. This library can also only be used in 32-bit Python. Still, if you'd like to explore this, here's an article on using this COM library in Python.