Navigation

    Backtrader Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. wwongdg
    3. Posts
    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
    W
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 9
    • Best 0
    • Groups 0

    Posts made by wwongdg

    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      Any comment or tips on the code below with pandas datafeed to backtrader

      # https://www.backtrader.com/docu/pandas-datafeed/pandas-datafeed/
      #
      
      from __future__ import (absolute_import, division, print_function,
                              unicode_literals)
      
      %matplotlib notebook
      
      import backtrader       as bt
      import backtrader.feeds as btfeeds
      import pandas           as pd
      
      cerebro = bt.Cerebro() #stdstats=False
      
      m1bidfile = '/location_to/datafile'
      
      pd_m1data = pd.read_csv(m1bidfile,
                              #skiprows=,
                              header=0,
                              parse_dates=True,
                              index_col=0
                             )
      
      
      bt_m1data = btfeeds.PandasData(dataname=pd_m1data,
                                     dtformat=('%Y-%m-%d %H:%M:%S'),
                                     timeframe=btfeeds.TimeFrame.Minutes,
                                     compression=1,
                                    )
      
      cerebro.adddata(bt_m1data)
      
      cerebro.run()
      
      cerebro.plot(style='bar', iplot=False)
      
      

      i ended up with

      ---------------------------------------------------------------------------
      TypeError                                 Traceback (most recent call last)
      <ipython-input-19-903ec5721243> in <module>
           27                                dtformat=('%Y-%m-%d %H:%M:%S'),
           28                                timeframe=btfeeds.TimeFrame.Minutes,
      ---> 29                                compression=1,
           30                               )
           31 
      
      ~/anaconda3/envs/env_backtrader/lib/python3.6/site-packages/backtrader/metabase.py in __call__(cls, *args, **kwargs)
           86         _obj, args, kwargs = cls.donew(*args, **kwargs)
           87         _obj, args, kwargs = cls.dopreinit(_obj, *args, **kwargs)
      ---> 88         _obj, args, kwargs = cls.doinit(_obj, *args, **kwargs)
           89         _obj, args, kwargs = cls.dopostinit(_obj, *args, **kwargs)
           90         return _obj
      
      ~/anaconda3/envs/env_backtrader/lib/python3.6/site-packages/backtrader/metabase.py in doinit(cls, _obj, *args, **kwargs)
           76 
           77     def doinit(cls, _obj, *args, **kwargs):
      ---> 78         _obj.__init__(*args, **kwargs)
           79         return _obj, args, kwargs
           80 
      
      TypeError: __init__() got an unexpected keyword argument 'dtformat'
      
      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      @ab_trader
      Thanks for the pointers. From your input I have managed to get the below working:

      %matplotlib notebook
      
      import backtrader       as bt
      import backtrader.feeds as btfeeds
      import pandas           as pd
      
      m1bidfile = 'm1 bid actual file location and name'
      
      
      cerebro = bt.Cerebro() #stdstats=False
      
      m1data = btfeeds.GenericCSVData(dataname=m1bidfile,
                                      dtformat=('%Y-%m-%d %H:%M:%S'),
                                      timeframe=btfeeds.TimeFrame.Minutes,
                                      compression=1,
                                      datetime=0,
                                      open=1,
                                      high=2,
                                      low=3,
                                      close=4,
                                      volume=-1,
                                      openinterest=-1
                                     )
      
      
      cerebro.adddata(m1data)
      
      
      h1data = cerebro.resampledata(m1data, 
                                    timeframe=bt.TimeFrame.Minutes, 
                                    compression=60)
      
      
      cerebro.run()
      cerebro.plot(style='bar', volume=False, iplot=False) # 
      

      2020-04-27-125552_1920x1080_scrot.png

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      plus there is a quirk on this forum capability too - there is no edit function after posting

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      So after the above testing, my conclusion as of this date is:

      1. single datafeed from CSV M1 file works (plots all 1440 bars it appears to me)
      2. single datafeed from CSV M1 and resample the feed to M60 and plot single line quirks (the plot seemed like just 2 bars instead 24 bars)
      3. dual feed from CSV(M1 and M60) plotted only the the M1 and M60 did not appear despite a space reserved for it
      4. only live feed (from Oanda) add data(M1) and resample data(M1) to M60 plotted fine

      the example given in (link text) is the case of option (2) above. It is no wonder I could not reproduce the expected plot. Hope the contributing developer community members can look into this.

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"
      %matplotlib notebook
      
      import datetime
      import backtrader as bt
      import btoandav20
      
      storekwargs = dict(
          token   = 'your_token',
          account = 'your_account',
          practice= True
          )
      
      StoreOandaV20 = btoandav20.stores.OandaV20Store(**storekwargs)
      DataOandaV20  = btoandav20.feeds.OandaV20Data(**storekwargs)
      
      #if __name__ == '__main__':
      cerebro = bt.Cerebro()
          
      m1data = btoandav20.feeds.OandaV20Data(
               dataname="EUR_USD",
               timeframe=bt.TimeFrame.Minutes,
               compression=1,
               qcheck=0.5,
               fromdate=datetime.datetime(2019, 1, 1),
               todate=datetime.datetime(2019, 1, 5)
              )
      
      cerebro.adddata(m1data)
      
      cerebro.resampledata(m1data, 
                           timeframe=bt.TimeFrame.Minutes, 
                           compression=60)
      
      
      cerebro.run()
      cerebro.plot(style='bar', volume=False) # 
      

      my first post using data feed from a CSV file would not show multitimeframe plot but a data feed from Oanda would display no problem, weird!
      2020-04-24-194629_1920x1080_scrot.png

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      I forget to add:

      refer to the above matplotlib plot of M1 and H1 traces. It does not appear perfect as the H1 is entirely missing. Any clue or pointers?

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      so i resort to matplotlib and came up with

      %matplotlib notebook
      
      import backtrader       as bt
      import backtrader.feeds as btfeeds
      
      m1bidfile = 'm1bidfile'
      
      h1bidfile = 'h1bidfile'
      
      cerebro = bt.Cerebro() 
      
      m1data = btfeeds.GenericCSVData(dataname=m1bidfile,
                                    dtformat=('%Y-%m-%d %H:%M:%S'),
                                    datetime=0,
                                    open=1,
                                    high=2,
                                    low=3,
                                    close=4,
                                    volume=-1,
                                    openinterest=-1
                                   )
      
      h1data = btfeeds.GenericCSVData(dataname=h1bidfile,
                                    dtformat=('%Y-%m-%d %H:%M:%S'),
                                    datetime=0,
                                    open=1,
                                    high=2,
                                    low=3,
                                    close=4,
                                    volume=-1,
                                    openinterest=-1
                                   )
      
      cerebro.adddata(m1data)
      cerebro.adddata(h1data)
      
      cerebro.run()
      cerebro.plot() 
      

      2020-04-24-140722_1920x1080_scrot.png

      posted in General Code/Help
      W
      wwongdg
    • RE: Multi-timeframe testing but "min() arg is an empty sequence"

      My own research into this "resample" topic gave me this:

      link text

      Dave-Vallance commented on Jun 21, 2019
      Hi @mr-m0nst3r
      
      Thanks for the submission and report. Yes, resampling currently does not work from my testing. It is an item to tackle in the future. I have marked this as a bug and will keep it open.
      

      Is it still valid to say backtrader's resample function is still being debugged or even implemented?

      posted in General Code/Help
      W
      wwongdg
    • Multi-timeframe testing but "min() arg is an empty sequence"

      i am testing my code snippet in jupyter-notebook in order to get myself familiarized with backtrader

      I followed backtrader online document on multi-timeframe (https://www.backtrader.com/docu/data-multitimeframe/data-multitimeframe/)
      and came up with my code below :

      import backtrader       as bt
      import backtrader.feeds as btfeeds
      
      inbidfile = 'in_bid_file'
      
      cerebro = bt.Cerebro(stdstats=False)
      
      data = btfeeds.GenericCSVData(dataname=inbidfile,
                                    dtformat=('%Y-%m-%d %H:%M:%S'),
                                    datetime=0,
                                    open=1,
                                    high=2,
                                    low=3,
                                    close=4,
                                    volume=-1,
                                    openinterest=-1
                                   )
      cerebro.adddata(data)
      
      data_resampled = cerebro.resampledata(data, 
                                            timeframe=bt.TimeFrame.Minutes, 
                                            compression=60)
      cerebro.adddata(data_resampled)
      cerebro.run()
      

      got me this error

      ValueError                                Traceback (most recent call last)
      <ipython-input-7-6ad0d074b1cb> in <module>
           23                                       compression=60)
           24 cerebro.adddata(data_resampled)
      ---> 25 cerebro.run()
      
      ~/anaconda3/envs/env_backtrader/lib/python3.6/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:
      
      ~/anaconda3/envs/env_backtrader/lib/python3.6/site-packages/backtrader/cerebro.py in runstrategies(self, iterstrat, predata)
         1296                     self._runnext_old(runstrats)
         1297                 else:
      -> 1298                     self._runnext(runstrats)
         1299 
         1300             for strat in runstrats:
      
      ~/anaconda3/envs/env_backtrader/lib/python3.6/site-packages/backtrader/cerebro.py in _runnext(self, runstrats)
         1555                     dt0 = min((d for d in dts if d is not None))
         1556                 else:
      -> 1557                     dt0 = min((d for i, d in enumerate(dts)
         1558                                if d is not None and i not in rsonly))
         1559 
      
      ValueError: min() arg is an empty sequence
      

      you help is most appreciated. I am a newbie to python and backtrader.

      posted in General Code/Help
      W
      wwongdg
    • 1 / 1