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/

    optstrategy() get error, help me, thanks.

    General Code/Help
    optstrategy
    2
    2
    352
    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.
    • MuSaCN
      MuSaCN last edited by

      my code :

      import backtrader as bt
      cerebro = bt.Cerebro()
      # ---read Data
      Path = "C:\\Users\\i2011\\OneDrive\\Book_Code&Data\\量化投资以python为工具\\数据及源代码\\033"
      CJSecurities = pd.read_csv(Path + '\\CJSecurities.csv', index_col=1, parse_dates=True)
      CJSecurities = CJSecurities.iloc[:, 1:]
      data0 = CJSecurities
      if "openinterest" not in data0.columns:
          data0['openinterest'] = 0
      data = bt.feeds.PandasData(dataname=data0)
      # ---
      cerebro.adddata(data)
      cerebro.broker.setcash(10000.0)
      # ---
      class TestStrategy(bt.Strategy):
          params = ( ('maperiod', 15), )
          def __init__(self):
              self.dataclose = self.datas[0].close
              self.sma = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod)
              self.bars_executed = 0
          def next(self):
              if not self.position:
                  if self.dataclose[0] > self.sma[0]:
                      self.buy()
              else:
                  if len(self) >= self.bars_executed + 5:
                      self.sell()
          def notify_order(self, order):
              self.bars_executed = len(self)
          def stop(self):
              print(self.params.maperiod, self.broker.getvalue())
      # ------
      # cerebro.addstrategy(TestStrategy) --> addstrategy() can work with run().
      
      cerebro.optstrategy(TestStrategy,maperiod=range(5, 10)) # --> This optstrategy() get error
      cerebro.run()
      

      the error:

      Process SpawnPoolWorker-4:
      Traceback (most recent call last):
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
          self.run()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
          self._target(*self._args, **self._kwargs)
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker
          task = get()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get
          return _ForkingPickler.loads(res)
      AttributeError: Can't get attribute 'TestStrategy' on <module '__main__' (built-in)>
      Process SpawnPoolWorker-2:
      Traceback (most recent call last):
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
          self.run()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
          self._target(*self._args, **self._kwargs)
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker
          task = get()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get
          return _ForkingPickler.loads(res)
      AttributeError: Can't get attribute 'TestStrategy' on <module '__main__' (built-in)>
      Process SpawnPoolWorker-5:
      Traceback (most recent call last):
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
          self.run()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
          self._target(*self._args, **self._kwargs)
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker
          task = get()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get
          return _ForkingPickler.loads(res)
      AttributeError: Can't get attribute 'TestStrategy' on <module '__main__' (built-in)>
      Process SpawnPoolWorker-3:
      Traceback (most recent call last):
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
          self.run()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
          self._target(*self._args, **self._kwargs)
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker
          task = get()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get
          return _ForkingPickler.loads(res)
      AttributeError: Can't get attribute 'TestStrategy' on <module '__main__' (built-in)>
      Process SpawnPoolWorker-1:
      Traceback (most recent call last):
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap
          self.run()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run
          self._target(*self._args, **self._kwargs)
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker
          task = get()
        File "C:\Users\i2011\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get
          return _ForkingPickler.loads(res)
      AttributeError: Can't get attribute 'TestStrategy' on <module '__main__' (built-in)>
      
      
      1 Reply Last reply Reply Quote 0
      • B
        backtrader administrators last edited by

        Your strategy is not defined when being unpickled in a slave process due to the "strange" ordering in your code.

        I would suggest you look at the sample and use a conventional ordering, with "declarations" first and "execution" afterwards.

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