Backtrader Community

    • 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/

    Memory Error Plotting (Ticks)

    General Code/Help
    2
    3
    414
    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.
    • Bayne
      Bayne last edited by Bayne

      Hey, any idea what i can do ? When plotting (see last line of script) I get :

      MemoryError                               Traceback (most recent call last)
      <ipython-input-17-2cb10347888b> in <module>
          551 
          552     #Finally plot the end results
      --> 553     cerebro.plot(style='bar',volume=False)
          554 
          555     # Print out the final result
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\cerebro.py in plot(self, plotter, numfigs, iplot, start, end, width, height, dpi, tight, use, **kwargs)
          989                 rfig = plotter.plot(strat, figid=si * 100,
          990                                     numfigs=numfigs, iplot=iplot,
      --> 991                                     start=start, end=end, use=use)
          992                 # pfillers=pfillers2)
          993 
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\plot\plot.py in plot(self, strategy, figid, numfigs, iplot, start, end, **kwargs)
          218                         downinds=self.dplotsdown[ind])
          219 
      --> 220                 self.plotdata(data, self.dplotsover[data])
          221 
          222                 for ind in self.dplotsdown[data]:
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\plot\plot.py in plotdata(self, data, indicators)
          722                     colorup=self.pinf.sch.barup,
          723                     colordown=self.pinf.sch.bardown,
      --> 724                     label=datalabel)
          725 
          726         self.pinf.zorder[ax] = plotted[0].get_zorder()
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\plot\finance.py in plot_ohlc(ax, x, opens, highs, lows, closes, colorup, colordown, width, tickwidth, alpha, label, **kwargs)
          508         alpha,
          509         label,
      --> 510         **kwargs)
          511 
          512     return handler.barcol, handler.opencol, handler.closecol
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\plot\finance.py in __init__(self, ax, x, opens, highs, lows, closes, colorup, colordown, width, tickwidth, alpha, label, **kwargs)
          386             width=width, tickwidth=tickwidth,
          387             label=label,
      --> 388             **kwargs)
          389 
          390         self.barcol = bcol
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\backtrader\plot\finance.py in barcollection(self, xs, opens, highs, lows, closes, width, tickwidth, label, scaling, bot, **kwargs)
          463             antialiaseds=useaa,
          464             label=label,
      --> 465             **kwargs)
          466 
          467         def tickopen(i, open):
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\matplotlib\collections.py in __init__(self, segments, linewidths, colors, antialiaseds, linestyles, offsets, transOffset, norm, cmap, pickradius, zorder, facecolors, **kwargs)
         1331             **kwargs)
         1332 
      -> 1333         self.set_segments(segments)
         1334 
         1335     def set_segments(self, segments):
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\matplotlib\collections.py in set_segments(self, segments)
         1346             _segments = self._add_offsets(_segments)
         1347 
      -> 1348         self._paths = [mpath.Path(_seg) for _seg in _segments]
         1349         self.stale = True
         1350 
      
      c:\users\ben\appdata\local\programs\python\python37\lib\site-packages\matplotlib\collections.py in <listcomp>(.0)
         1346             _segments = self._add_offsets(_segments)
         1347 
      -> 1348         self._paths = [mpath.Path(_seg) for _seg in _segments]
         1349         self.stale = True
         1350 
      
      MemoryError: 
      

      the script is using Tickdata (for accuracy purposes), but its getting signals from Minutely Bars.
      Data is not more than 2 weeks, but even need more.
      Is it possible to plot it in Upsampled Bars, to save memory?
      Here is the script:

      if using_TickData == False:
          Backtraderfilename = BarBackTraderFileName
      elif using_TickData == True:
          Backtraderfilename = "Backtrader TickData/TicksSampledForTimeFrame/"+TickBackTraderFileName+"_"+TimeFrame
      
      
           
      if __name__ == '__main__':
          
          cerebro = bt.Cerebro(stdstats=False,optreturn=True,optdatas=True)    # Create a cerebro entity
          if using_TickData == False:
              
              data    = btfeed.GenericCSVData(dataname=Backtraderfilename,
                                           fromdate=datetime.datetime(from_year,from_month,from_day,from_hour,from_minute),#(1999,1,13, 10),
                                           todate=datetime.datetime(to_year,to_month,to_day,to_hour,to_minute),#2019,5,1, 20),#(2019,5,1, 20),
                                           nullvalue=0.0,dtformat=('%Y.%m.%d %H:%M:%S'),
                                           timeframe = bt.TimeFrame.Minutes, compression = 60,
                                           datetime=0,high=1,low=2,open=3,close=4,volume=5,openinterest=-1)
              # Add the Data Feed to Cerebro
              cerebro.adddata(data)
              
          elif using_TickData:    
              #import argparse      
              #args = parse_args()
              Backtraderfilename = BarBackTraderFileName
              data = bt.feeds.GenericCSVData(dataname="Backtrader TickData/TicksSampledForTimeFrame/"+TickBackTraderFileName+"_"+TimeFrame,
                                        dtformat=('%Y-%m-%d %H:%M:%S'),
                                        timeframe=bt.TimeFrame.Ticks,
                                        fromdate=datetime.datetime(from_year,from_month,from_day,from_hour,from_minute),#fromdate=datetime.datetime(2019,5,25,0,2), 
                                        todate=datetime.datetime(to_year,to_month,to_day,to_hour,to_minute),#todate=datetime.datetime(2019,5,30,23),
                                        datetime=1,high=2,low=2,open=2,close=2,volume=-1,openinterest=-1)
      
      
              cerebro.adddata(data)
              
          # Add a strategy
          cerebro.addstrategy(TestStrategy)
          
          # Add the analyzers we are interested in
          #cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name="ta")
          #cerebro.addanalyzer(bt.analyzers.SQN, _name="sqn")
          #cerebro.addanalyzer(bt.analyzers.SQN, _name="dd")
          
          # Set our desired cash start
          cerebro.broker.setcash(StartCash)
          #slippage
          cerebro.broker = bt.brokers.BackBroker(slip_perc=0)  # 0.5%
      
          # Add a FixedSize sizer according to the stake     #was ist ein stake? eine Unit-Y 1000 = 0.01 Lot
          cerebro.addsizer(bt.sizers.FixedSize, stake=VolumeSize)
      
          # Set the commission
          cerebro.broker.setcommission(commission=0)
          
          # Print out the starting conditions
          print('Starting Portfolio Value: %.3f' % cerebro.broker.getvalue())
      
          # Run over everything
          StrategyResult = cerebro.run()
          
          # print the analyzers
          #printTradeAnalysis(StrategyResult[0].analyzers.ta.get_analysis())
          #printSQN(StrategyResult[0].analyzers.sqn.get_analysis())
          #printDrawDown(StrategyResult[0].analyzers.dd.get_analysis())
          
          # Print out the final result
          print('Final Portfolio Value: %.3f' % cerebro.broker.getvalue())
          
          #Finally plot the end results
          cerebro.plot(style='bar',volume=False)
      
          # Print out the final result
          print('Final Portfolio Value: %.3f' % cerebro.broker.getvalue())
      
      
      B 1 Reply Last reply Reply Quote 0
      • B
        backtrader administrators @Bayne last edited by

        @Bayne said in Memory Error Plotting (Ticks):

        Data is not more than 2 weeks, but even need more.

        Buy a PC with more memory and you will be able to plot more (OS may impose limits on memory allocation)

        @Bayne said in Memory Error Plotting (Ticks):

        Is it possible to plot it in Upsampled Bars, to save memory?

        It will obviously use less room. But you won't see the ticks.

        Bayne 1 Reply Last reply Reply Quote 0
        • Bayne
          Bayne @backtrader last edited by

          @backtrader
          I mean, is it possible to backtest on Ticks (like above) but resample the Data only in plot?

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Copyright © 2016, 2017, 2018, 2019, 2020, 2021 NodeBB Forums | Contributors