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/

    Using tradingview csv file for backtest

    General Code/Help
    2
    11
    114
    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.
    • Jordan Miranda-Hickey
      Jordan Miranda-Hickey last edited by

      Hi all,

      I'm trying to use a tradingview CSV export for backtesting but I cant seem to get the data correct, I keep getting a value error on the time date format wondering if anyone has done it before?

      V 1 Reply Last reply Reply Quote 0
      • V
        Vypy1 @Jordan Miranda-Hickey last edited by

        @jordan-miranda-hickey what’s the difference between a trading view csv vs a normal csv? Also can you share the code you are using

        Jordan Miranda-Hickey 1 Reply Last reply Reply Quote 0
        • Jordan Miranda-Hickey
          Jordan Miranda-Hickey @Vypy1 last edited by

          @vypy1 sure:

          import backtrader as bt
          import backtrader.analyzers as btanalyzers
          import pandas as pd
          import matplotlib
          from datetime import datetime
          import qgrid 
          from tvDatafeed import TvDatafeed, Interval
          
          #username = 'YourTradingViewUsername'
          #password = 'YourTradingViewPassword'
          
          tv = TvDatafeed()
          
          # index
          symboldata= tv.get_hist(symbol='ADAUSDT',exchange='BYBIT',interval=Interval.in_15_minute,n_bars=20000)
          symboldata.to_csv('data.csv')
          
          class MaCrossStrategy(bt.Strategy):
           
              params = (
                  ('fast_length', 10),
                  ('slow_length', 50)
              )
               
              def __init__(self):
                  ma_fast = bt.ind.SMA(period = self.params.fast_length)
                  ma_slow = bt.ind.SMA(period = self.params.slow_length)
                   
                  self.crossover = bt.ind.CrossOver(ma_fast, ma_slow)
           
              def next(self):
                  if not self.position:
                      if self.crossover > 0: 
                          self.buy()
                  elif self.crossover < 0: 
                      self.close()
          
          cerebro = bt.Cerebro()
          
          #data = bt.feeds.YahooFinanceData(dataname = 'BTC', fromdate = datetime(2021, 1, 1), todate = datetime(2022, 12, 1)) 
          data = bt.feeds.GenericCSVData(dataname = 'data.csv',dtformat=('%d-%m-%y'))
          cerebro.adddata(data)
          
          cerebro.broker.setcash(1000000.0)
           
          cerebro.addsizer(bt.sizers.PercentSizer, percents = 10)
          cerebro.addanalyzer(btanalyzers.SharpeRatio, _name = "sharpe")
          cerebro.addanalyzer(btanalyzers.DrawDown, _name = "drawdown")
          cerebro.addanalyzer(btanalyzers.Returns, _name = "returns")
           
          back = cerebro.run()
          
          par_list = [[x[0].params.fast_length, 
                       x[0].params.slow_length,
                       x[0].analyzers.returns.get_analysis()['rnorm100'], 
                       x[0].analyzers.drawdown.get_analysis()['max']['drawdown'],
                       x[0].analyzers.sharpe.get_analysis()['sharperatio']
                      ] for x in back]
          
          par_df = pd.DataFrame(par_list, columns = ['length_fast', 'length_slow', 'return', 'dd', 'sharpe'])
          
          qgrid.show_grid(par_df)
          

          however when i run it i get this error:

          Traceback (most recent call last):
          File "c:\Users\Jordan\Desktop\backtester\backtest.py", line 42, in <module>
          cerebro.adddata(data)
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\cerebro.py", line 757, in adddata
          data._id = next(self._dataid)
          AttributeError: 'NoneType' object has no attribute '_id'
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\cerebro.py", line 1212, in runstrategies
          data.preload()
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\feed.py", line 688, in preload
          while self.load():
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\feed.py", line 479, in load
          _loadret = self._load()
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\feed.py", line 710, in _load
          return self._loadline(linetokens)
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib\site-packages\backtrader\feeds\csvgeneric.py", line 114, in _loadline
          dt = datetime.strptime(dtfield, dtformat)
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib_strptime.py", line 568, in _strptime_datetime
          tt, fraction, gmtoff_fraction = _strptime(data_string, format)
          File "C:\Users\Jordan\AppData\Local\Programs\Python\Python310\lib_strptime.py", line 349, in _strptime
          raise ValueError("time data %r does not match format %r" %
          ValueError: time data '2022-10-01 01:00:00' does not match format '%d-%m-%y'

          V 1 Reply Last reply Reply Quote 0
          • V
            Vypy1 @Jordan Miranda-Hickey last edited by

            @jordan-miranda-hickey your GV data date format seems to be a timezone aware format, the format you have mentioned in the parameters in not the same, try including the hours, minutes and seconds format too. Also year should be represented with %Y I believe.

            Jordan Miranda-Hickey 1 Reply Last reply Reply Quote 0
            • Jordan Miranda-Hickey
              Jordan Miranda-Hickey @Vypy1 last edited by

              @vypy1 unfortunately no luck it still doesn't like it not entirely sure why i tried like this :

              data = bt.feeds.GenericCSVData(dataname = 'data.csv',dtformat=('%d-%m-%Y %H:%M:%S'))

              still the same error

              V 2 Replies Last reply Reply Quote 0
              • V
                Vypy1 @Jordan Miranda-Hickey last edited by

                @jordan-miranda-hickey I think the format should be %Y-%m-%d %H:%M:%S, I can see that the file has year first

                "time data '2022-10-01 01:00:00' does not match format '%d-%m-%y'"

                1 Reply Last reply Reply Quote 0
                • V
                  Vypy1 @Jordan Miranda-Hickey last edited by

                  @jordan-miranda-hickey Add a space between date and time

                  1 Reply Last reply Reply Quote 0
                  • Jordan Miranda-Hickey
                    Jordan Miranda-Hickey last edited by

                    @vypy1 said in Using tradingview csv file for backtest:

                    %Y-%m-%d %H:%M:%S

                    thank you so much

                    I'm such a muppet I've been opening up the CSV to view the format and didn't realise that the code was reading it differently to what excel was, but its now does not liking the symbol

                    ValueError: could not convert string to float: 'BYBIT:ADAUSDT'

                    V 1 Reply Last reply Reply Quote 0
                    • V
                      Vypy1 @Jordan Miranda-Hickey last edited by

                      @jordan-miranda-hickey Not sure why. An alternate maybe to read the csv in as a dataframe and use pandasdataframe to add data.

                      Jordan Miranda-Hickey 1 Reply Last reply Reply Quote 0
                      • Jordan Miranda-Hickey
                        Jordan Miranda-Hickey @Vypy1 last edited by

                        @vypy1 how would i go about that?

                        V 1 Reply Last reply Reply Quote 0
                        • V
                          Vypy1 @Jordan Miranda-Hickey last edited by

                          @jordan-miranda-hickey You can refer to this Pandas Datafeed.

                          Just read in your csv with pandas and follow the documentation.

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