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/

    Testing RSI and SMA using bt.feeds.CCXT for Bittrex

    General Discussion
    1
    2
    873
    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.
    • conr
      conr last edited by conr

      Hi,
      New to backtrader, but reasonable python experience.
      Having some problems getting a datafeed from Bittrex using CCXT.
      The data appears to come through, but I can't get the RSI & SMA indicators to work.

      I am quite sure it's something to do with the data structures coming back from CCXT, but I can't be sure.

      Please see the code that WORKS below (using APPL data from Yahoo).

      from __future__ import (absolute_import, division, print_function,
                          unicode_literals)
       from datetime import datetime, timedelta
      import backtrader as bt
      
      class TestStrategy(bt.Strategy):
      
      def __init__(self):
          self.rsi = bt.indicators.RSI_SMA(period=14)
          self.sma = bt.indicators.SMA(period=15)
      
      if __name__ == '__main__':
      
      cerebro = bt.Cerebro()
      data = bt.feeds.YahooFinanceData(
           dataname='AAPL',
           fromdate = datetime(2019,1,1),
           todate = datetime(2020,1,1),
           buffered= True
           )
      
      
      cerebro.adddata(data)
      cerebro.addstrategy(TestStrategy)
      cerebro.run()
      cerebro.plot()
      

      However when I change the time periods the data feed fails;

      from __future__ import (absolute_import, division, print_function,
       
                               unicode_literals)
       
       from datetime import datetime, timedelta
       
       import backtrader as bt
       
       
       
       class SmaCross(bt.SignalStrategy):
       
           def __init__(self):
       
               sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)
       
               crossover = bt.ind.CrossOver(sma1, sma2)
       
               self.signal_add(bt.SIGNAL_LONG, crossover)
       
       
       
       if __name__ == '__main__':
       
       
       
           cerebro = bt.Cerebro()
       
       #     data = bt.feeds.YahooFinanceData(
       
       #          dataname='AAPL',
       
       #          fromdate = datetime(2019,1,1),
       
       #          todate = datetime(2020,1,1),
       
       #          buffered= True
       
       #          )
       
           symbol = 'BTC/USDT'
       
           hist_start_date = datetime.utcnow() - timedelta(minutes=3600)
       
           #broker = bt.brokers.CCXTBroker(exchange='bittrex')
       
           data = bt.feeds.CCXT(exchange = 'bittrex', symbol='BTC/USDT', 
       
                                     name="btc_usdt_bittrex", timeframe=bt.TimeFrame.Minutes,
       
                                     #compression = 1,
       
                                     fromdate = hist_start_date)
       
       
       
           cerebro.adddata(data)
       
           cerebro.addstrategy(SmaCross)
       
           cerebro.run()
       
           cerebro.plot()nd fails to plot. 
      

      Would anyone have a link to how to interogate the feeds I would be most grateful.
      Thanks

      1 Reply Last reply Reply Quote 0
      • conr
        conr last edited by

        OK, CCXT was calling BITTREX far to much for offline testing,
        I applied

              data=bt.feeds.PandasData(dataname=df,datetime=-1,open=-1,high=-1,low=-1,close=-1,volume=-1,openinterest='openinterest',timeframe=bt.TimeFrame.Days,compression=1)
        

        after creating a static extract from the API using

        from bittrex.bittrex import Bittrex, API_V2_0
              trade = 'BTC'
             currency = 'DOGE'
            market = '{0}-{1}'.format(trade, currency)
           tick_interval ='day'
           my_bittrex = Bittrex(None, None, api_version=API_V2_0)  # or defaulting to v1.1 as Bittrex(None, None)
         
            t = my_bittrex.get_candles(market,tick_interval)
        
           df = pd.DataFrame(t['result'])
          df['T'] = pd.to_datetime(df['T']) 
         df.set_index(df['T'],inplace=True)
        
          df.columns = ['BV','close','high','low','open','datetime','volume']
        
          df['openinterest'] = 0
        
        1 Reply Last reply Reply Quote 0
        • 1 / 1
        • First post
          Last post
        Copyright © 2016, 2017, 2018, 2019, 2020, 2021 NodeBB Forums | Contributors