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/

    TypeError: must be real number, not str

    General Code/Help
    2
    3
    63
    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.
    • J
      Jesen616 last edited by

      Re: Error: When strings show up where they aren't wanted...

      Thanks to all. I'm trying to optimize my strategy params. When I run my cerebro, I get a "TypeError: must be real number, not str".

      Traceback (most recent call last):
        File "<stdin>", line 17, in <module>
        File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\cerebro.py", line 1140, in run
          data.preload()
        File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feed.py", line 438, in preload
          while self.load():
        File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feed.py", line 479, in load
          _loadret = self._load()
        File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feeds\pandafeed.py", line 255, in _load
          line[0] = self.p.dataname.iloc[float(self._idx), float(colindex)]
        File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\linebuffer.py", line 222, in __setitem__
          self.array[self.idx + ago] = float(value)
      TypeError: must be real number, not str
      
      cerebro=bt.Cerebro()
      data = bt.feeds.PandasData(dataname=data3)
      cerebro.adddata(data)
      cerebro.broker.setcash(5000)
      dcash0 = cerebro.broker.startingcash
      cerebro.addsizer(bt.sizers.FixedSize,stake=1)
      cerebro.broker.setcommission(commission=0.001)    
      print('初始资金:%.2f'% cerebro.broker.getvalue())        cerebro.addanalyzer(bt.analyzers.SharpeRatio,_name='SharpeRatio',legacyannual=True)
      cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name='AnnualReturn')       cerebro.addanalyzer(bt.analyzers.TradeAnalyzer,_name='TradeAnalyzer')
      cerebro.addanalyzer(bt.analyzers.DrawDown,_name='DW')
      cerebro.addanalyzer(bt.analyzers.Returns, _name = "returns")
      cerebro.addsizer(bt.sizers.PercentSizer, percents = 10)
      result = cerebro.run()
      

      My datafeed seems to be fine.

       data3
                           open  high   low close  volume openinterest
      datetime
      2020-12-22 14:45:00  2059  2059  2046  2046   72912            0
      2020-12-22 15:00:00  2047  2047  2021  2022  149478            0
      2020-12-22 21:15:00  2052  2056  2042  2052  166632            0
      2020-12-22 21:30:00  2052  2060  2051  2057   87273            0
      2020-12-22 21:45:00  2058  2067  2056  2063   96679            0
      

      Can anyone answer it?Thanks a lot.

      J 1 Reply Last reply Reply Quote 0
      • J
        Jesen616 @Jesen616 last edited by

        @jesen616 said in TypeError: must be real number, not str:

        Re: Error: When strings show up where they aren't wanted...

        Thanks to all. I'm trying to optimize my strategy params. When I run my cerebro, I get a "TypeError: must be real number, not str".

        Traceback (most recent call last):
          File "<stdin>", line 17, in <module>
          File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\cerebro.py", line 1140, in run
            data.preload()
          File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feed.py", line 438, in preload
            while self.load():
          File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feed.py", line 479, in load
            _loadret = self._load()
          File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\feeds\pandafeed.py", line 255, in _load
            line[0] = self.p.dataname.iloc[float(self._idx), float(colindex)]
          File "C:\Users\cl\AppData\Local\Programs\Python\Python38\lib\site-packages\backtrader\linebuffer.py", line 222, in __setitem__
            self.array[self.idx + ago] = float(value)
        TypeError: must be real number, not str
        
        cerebro=bt.Cerebro()
        cerebro.optstrategy(MyStrategy1,var1=range(10,15),var2=range(25,30),>up1=range(25,30),g=(1,))
        data = bt.feeds.PandasData(dataname=data3)
        cerebro.adddata(data)
        cerebro.broker.setcash(5000)
        dcash0 = cerebro.broker.startingcash
        cerebro.addsizer(bt.sizers.FixedSize,stake=1)
        cerebro.broker.setcommission(commission=0.001)    
        print('初始资金:%.2f'% cerebro.broker.getvalue())        cerebro.addanalyzer(bt.analyzers.SharpeRatio,_name='SharpeRatio',legacyannual=True)
        cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name='AnnualReturn')       cerebro.addanalyzer(bt.analyzers.TradeAnalyzer,_name='TradeAnalyzer')
        cerebro.addanalyzer(bt.analyzers.DrawDown,_name='DW')
        cerebro.addanalyzer(bt.analyzers.Returns, _name = "returns")
        cerebro.addsizer(bt.sizers.PercentSizer, percents = 10)
        result = cerebro.run()
        

        My datafeed seems to be fine.

         data3
                             open  high   low close  volume openinterest
        datetime
        2020-12-22 14:45:00  2059  2059  2046  2046   72912            0
        2020-12-22 15:00:00  2047  2047  2021  2022  149478            0
        2020-12-22 21:15:00  2052  2056  2042  2052  166632            0
        2020-12-22 21:30:00  2052  2060  2051  2057   87273            0
        2020-12-22 21:45:00  2058  2067  2056  2063   96679            0
        

        Can anyone answer it?Thanks a lot.

        vladisld 1 Reply Last reply Reply Quote 0
        • vladisld
          vladisld @Jesen616 last edited by

          @jesen616 it seems there was a problem with pd.read_csv to parse the data column.

          please provide your code that initializes the data3 variable.

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