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/

    Bug: can't get attribute on lineseries.

    General Discussion
    2
    6
    1519
    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.
    • D
      duality_ last edited by duality_

      If I use optstrategy and use more than one adddata, then I get this exception:

      Exception in thread Thread-3:
      Traceback (most recent call last):
        File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner
          self.run()
        File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run
          self._target(*self._args, **self._kwargs)
        File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/pool.py", line 463, in _handle_results
          task = get()
        File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/connection.py", line 251, in recv
          return _ForkingPickler.loads(buf.getbuffer())
      AttributeError: Can't get attribute 'Lines_LineSeries_LineIterator_DataAccessor_ObserverBase_Observer_DataTrades_fa578223e8c04a48bdb681098956aac8' on <module 'backtrader.lineseries' from '/usr/local/lib/python3.6/site-packages/backtrader/lineseries.py'>
      

      If I change either of the above things (either add only one data or use addstrategy), I don't get this error.

      Here's my code:

      from __future__ import (absolute_import, division, print_function, unicode_literals)
      
      import backtrader as bt
      
      from strategies.sma_crossover import SMA_CrossOver
      from strategies.strategy_container import StrategyContainer
      from api import crypto_data
      
      data_spec = [
              {"symbol": "BTC/USD", "exchange": "CCCAGG", "res": "day", "length": 365},
              {"symbol": "ETH/USD", "exchange": "CCCAGG", "res": "day", "length": 365},
      ]
      
      StrategyContainer.register(SMA_CrossOver)
      
      # cerebro
      cerebro = bt.Cerebro()
      cerebro.broker.setcash(100000.0)
      cerebro.broker.setcommission(commission=0.001)
      cerebro.addanalyzer(bt.analyzers.PyFolio)
      cerebro.optstrategy(StrategyContainer, strategy_index=StrategyContainer.indices())
      
      # data
      for d in data_spec:
          data = crypto_data.get_feed(d["symbol"], exchange=d["exchange"], resolution=d["res"], length=d["length"])
          cerebro.adddata(data, name=d["symbol"])
      results = cerebro.run()
      

      What could be the reason for this?

      1 Reply Last reply Reply Quote 0
      • B
        backtrader administrators last edited by

        Where is the bug?

        1 Reply Last reply Reply Quote 0
        • D
          duality_ last edited by

          Yes, that's what I'm asking.

          1 Reply Last reply Reply Quote 0
          • D
            duality_ last edited by

            It might be in backtrader or more likely in my code. Any ideas?

            1 Reply Last reply Reply Quote 0
            • D
              duality_ last edited by

              I get the same problem if I switch optreturn of Cerebro from the default of True to False.

              1 Reply Last reply Reply Quote 0
              • D
                duality_ last edited by

                I simplified the example so it's really easy to read and follows most of the conventions that the Backtrader's samples also take.

                Here's the simplified code with the same problems as above. Why does this happen?

                from __future__ import (absolute_import, division, print_function, unicode_literals)
                
                import datetime
                
                import backtrader as bt
                import backtrader.feeds as btfeeds
                import backtrader.indicators as btind
                
                
                def run():
                    cerebro = bt.Cerebro(optreturn=False)
                    StrategyContainer.register(SMA_CrossOver)
                    cerebro.optstrategy(StrategyContainer, strategy_index=StrategyContainer.indices())
                
                    data0 = btfeeds.YahooFinanceCSVData(dataname='../../datas/daily-PEP.csv', fromdate=datetime.datetime(1997, 1, 1), todate=datetime.datetime(1998, 1, 1))
                    cerebro.adddata(data0)
                    cerebro.adddata(data0)
                
                    # run
                    results = cerebro.run()
                
                
                class StrategyContainer(object):
                    _strategies = []
                    @classmethod
                    def register(cls, strategy):
                        cls._strategies.append(strategy)
                    @classmethod
                    def indices(cls):
                        return range(len(cls._strategies))
                    def __new__(cls, *args, **kwargs):
                        strategy_index = kwargs.pop('strategy_index')
                        obj = cls._strategies[strategy_index](*args, **kwargs)
                        return obj
                
                
                class SMA_CrossOver(bt.Strategy):
                    pass
                
                
                run()
                
                1 Reply Last reply Reply Quote 0
                • 1 / 1
                • First post
                  Last post
                Copyright © 2016, 2017, 2018, 2019, 2020, 2021 NodeBB Forums | Contributors