Navigation

    Backtrader Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

    Dataframe with min bar data cannot be loaded

    General Code/Help
    2
    2
    26
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Daniel Egloff
      Daniel Egloff last edited by

      I try to load a plain simple dataframe to backtrader as follows:

      df = ohlc_df[['datetime', 'open', 'high', 'low', 'close', 'volume']]
      df.set_index('datetime', inplace=True)
      df.head()
      

      The datetime is the index and is a proper datetime type.

                                    open     high      low    close      volume
      datetime                                                                 
      2020-10-01 00:00:00+00:00  10778.5  10783.5  10778.0  10783.5   2283372.0
      2020-10-01 00:01:00+00:00  10783.5  10805.5  10783.0  10798.5  12216553.0
      2020-10-01 00:02:00+00:00  10798.5  10798.5  10798.0  10798.0   1290372.0
      2020-10-01 00:03:00+00:00  10798.0  10800.0  10791.0  10797.5   2017493.0
      2020-10-01 00:04:00+00:00  10797.5  10826.5  10797.0  10813.5   7358318.0
      
      data = bt.feeds.PandasData(dataname=df)
      cerebro = bt.Cerebro(stdstats=False)
      cerebro.adddata(data)
      
      cerebro.addstrategy(bt.Strategy)
      
      cerebro.run()
      

      Produces an error that I cannot understand because I think the data is right. Apparently not.

      ---------------------------------------------------------------------------
      AttributeError                            Traceback (most recent call last)
      <ipython-input-33-c302340a2d92> in <module>
      ----> 1 cerebro.run()
      
      ~/opt/anaconda3/envs/backtrader/lib/python3.8/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:
      
      ~/opt/anaconda3/envs/backtrader/lib/python3.8/site-packages/backtrader/cerebro.py in runstrategies(self, iterstrat, predata)
         1210                 data._start()
         1211                 if self._dopreload:
      -> 1212                     data.preload()
         1213 
         1214         for stratcls, sargs, skwargs in iterstrat:
      
      ~/opt/anaconda3/envs/backtrader/lib/python3.8/site-packages/backtrader/feed.py in preload(self)
          436 
          437     def preload(self):
      --> 438         while self.load():
          439             pass
          440 
      
      ~/opt/anaconda3/envs/backtrader/lib/python3.8/site-packages/backtrader/feed.py in load(self)
          477 
          478             if not self._fromstack(stash=True):
      --> 479                 _loadret = self._load()
          480                 if not _loadret:  # no bar use force to make sure in exactbars
          481                     # the pointer is undone this covers especially (but not
      
      ~/opt/anaconda3/envs/backtrader/lib/python3.8/site-packages/backtrader/feeds/pandafeed.py in _load(self)
          266 
          267         # convert to float via datetime and store it
      --> 268         dt = tstamp.to_pydatetime()
          269         dtnum = date2num(dt)
          270         self.lines.datetime[0] = dtnum
      
      AttributeError: 'str' object has no attribute 'to_pydatetime'
      

      What do I miss.

      Thanks for any hint.

      1 Reply Last reply Reply Quote 0
      • run-out
        run-out last edited by

        Seems like the code thinks your date is a string. Maybe try explicitely putting it to datetime.

        df.index = pd.to_datetime(df.index)
        
        1 Reply Last reply Reply Quote 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2016, 2017, 2018 NodeBB Forums | Contributors
        $(document).ready(function () { app.coldLoad(); }); }