IB - Interactive Historical Data Download Bug report
-
Tried to download data using IBStore, it can download historical minutes data start with 30 May 2019 but fail if start with 31 May 2019. @backtrader appreciate if you can take a look below, thanks!
#use demo account, port=7497 ibstore=bt.stores.IBStore(port=7497) cerebro = bt.Cerebro() stockName='SPY-STK-ISLAND-USD' data = ibstore.getdata(dataname=stockName, historical=True, timeframe=bt.TimeFrame.Minutes, compression=60, fromdate=datetime.datetime(2019, 5, 31), todate=datetime.datetime(2019,6, 25)) cerebro.adddata(data,name=stockName) cerebro.run()
Below is the error message:
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-11-00a260357ba9> in <module>() 15 todate=datetime.datetime(2019,6, 25)) 16 cerebro.adddata(data,name=stockName) ---> 17 cerebro.run() 18 ''' 19 if len(data)>0: /usr/local/lib/python3.7/site-packages/backtrader/cerebro.py in run(self, **kwargs) 1125 # let's skip process "spawning" 1126 for iterstrat in iterstrats: -> 1127 runstrat = self.runstrategies(iterstrat) 1128 self.runstrats.append(runstrat) 1129 if self._dooptimize: /usr/local/lib/python3.7/site-packages/backtrader/cerebro.py in runstrategies(self, iterstrat, predata) 1208 if self._exactbars < 1: # datas can be full length 1209 data.extend(size=self.params.lookahead) -> 1210 data._start() 1211 if self._dopreload: 1212 data.preload() /usr/local/lib/python3.7/site-packages/backtrader/feed.py in _start(self) 201 202 def _start(self): --> 203 self.start() 204 205 if not self._started: /usr/local/lib/python3.7/site-packages/backtrader/feeds/ibdata.py in start(self) 400 if self._state == self._ST_START: 401 self._start_finish() # to finish initialization --> 402 self._st_start() 403 404 def stop(self): /usr/local/lib/python3.7/site-packages/backtrader/feeds/ibdata.py in _st_start(self) 627 timeframe=self._timeframe, compression=self._compression, 628 what=self.p.what, useRTH=self.p.useRTH, tz=self._tz, --> 629 sessionend=self.p.sessionend) 630 631 self._state = self._ST_HISTORBACK /usr/local/lib/python3.7/site-packages/backtrader/stores/ibstore.py in reqHistoricalDataEx(self, contract, enddate, begindate, timeframe, compression, what, useRTH, tz, sessionend, tickerId) 707 duration = None 708 for dur in durations: --> 709 intdate = self.dt_plus_duration(begindate, dur) 710 if intdate >= enddate: 711 intdate = enddate /usr/local/lib/python3.7/site-packages/backtrader/stores/ibstore.py in dt_plus_duration(self, dt, duration) 1174 month = dt.month - 1 + size # -1 to make it 0 based, readd below 1175 years, month = divmod(month, 12) -> 1176 return dt.replace(year=dt.year + years, month=month + 1) 1177 1178 if dim == 'Y': ValueError: day is out of range for month
-
One more interesting bug:
When trying to download IB historical with fromdate older than the stock start date.
I.e. RWGV first trading day start with 18 Jan 2019 and i tried to use following code:data = ibstore.getdata(dataname='RWGV', currency='USD', exchange='ARCA', historical=True, timeframe=bt.TimeFrame.Days, fromdate=datetime.datetime(2016, 5, 1), todate=datetime.datetime(2019,6, 1))
This code will have no data downloaded instead download data from 18 Jan - 1 Jun 2019.
-
@barton05 said in IB - Interactive Historical Data Download Bug report:
ppreciate if you can take a look below, thanks!
Actually the code there could fail in some other lines for those downloads. All dates should be checked against an actual calendar implementation. Too much for the current state.
-
@barton05 said in IB - Interactive Historical Data Download Bug report:
This code will have no data downloaded instead download data from 18 Jan - 1 Jun 2019.
Don't download data before the start of the actual trading start.