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/

    Interactive brokers hang and plot

    General Discussion
    2
    3
    303
    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.
    • MislavSag
      MislavSag last edited by

      I have succesfully set up backtesting with Alpaca. Now I am trying to do the same with Interactive brokers and have 2 question:

      1. I have 600 step period in my indicator. When using Alpaca, it waits for 600 periods (hours), but in Interactive Brokers it starts earlier than Alpaca. If I set from date to 1.7 it starts at 20.09.2020., but it shouldn't start at all since 600 periods is 600 / 8 hours = 75 days which is 75 /22 = 3 and half months. Does Interactive brokers have more trading days?

      2. When backtest finishes it doesn't show the graph and it doesn't stop. Even if I click ctrl + C, it just 'hangs'.

      Here is my cerebro part:

      def run(args=None):
      
          # Create a cerebro entity
          cerebro = bt.Cerebro()
      
          # parse args
          args = parse_args(args)
         
          # Definetrade option    
          """
          You have 3 options: 
          - backtest (IS_BACKTEST=True, IS_LIVE=False)
          - paper trade (IS_BACKTEST=False, IS_LIVE=False) 
          - live trade (IS_BACKTEST=False, IS_LIVE=True) 
          """
          IS_BACKTEST = args.isbacktest
          IS_LIVE = args.islive
          symbol = 'SPY-STK-SMART-USD'
      
          # Add a strategy
          cerebro.addstrategy(TestStrategy)
          
          # IB store
          store=bt.stores.IBStore(host="127.0.0.1", port=7496, clientId=1)
      
          # Set data factory: Alpaca or pandas
          DataFactory = store.getdata  # or use alpaca_backtrader_api.AlpacaData
          
          # Data feed
          if IS_BACKTEST:
              from_date = args.fromdate
              from_date = datetime.datetime.strptime(from_date, '%Y-%m-%d')
              timeframe = bt.TimeFrame.TFrame(args.timeframealpaca)
              compression = args.compression
              stockkwargs = dict(
                  # timeframe=timeframe,
                  rtbar=False,  # use RealTime 5 seconds bars
                  historical=True,  # only historical download
                  qcheck=0.5,  # timeout in seconds (float) to check for events
                  fromdate=from_date,  # get data from..
                  # todate=datetime.datetime(2019, 9, 25),  # get data from..
                  latethrough=False,  # let late samples through
                  tradename=None  # use a different asset as order target
              )
              data0 = store.getdata(dataname=symbol, **stockkwargs)
              cerebro.resampledata(data0, timeframe=timeframe, compression=compression)
          else:
              data0 = DataFactory(dataname=symbol,
                                  historical=False,
                                  timeframe=timeframe)
              # or just alpaca_backtrader_api.AlpacaBroker()
              broker = store.getbroker()
              cerebro.setbroker(broker)
          
          # Add dat to cerebro
          cerebro.adddata(data0)
          
          # set cash if backtest
          if IS_BACKTEST:
              # backtrader broker set initial simulated cash
              cerebro.broker.setcash(100000.0)       
      
          # Set sizer
          cerebro.addsizer(bt.sizers.AllInSizer)
          # cerebro.broker.set_checksubmit(checksubmit=False)
      
      
          # Set our desired cash start
          cerebro.broker.setcash(10000.0)
          # 35305 / 10000
          # (352 - 115) / 115
      
          # Set sizer
          cerebro.addsizer(bt.sizers.AllInSizer)
          cerebro.broker.set_checksubmit(checksubmit=False)
      
          # Set the commission
          cerebro.broker.setcommission(commission=0.0)
      
          # check returns and banchmarks
          if args.timereturn:
              cerebro.addobserver(bt.observers.TimeReturn,
                                  timeframe=TIMEFRAMES[args.timeframe])
          else:
              benchdata = data0
              if args.benchdata1:
                  data1 = DataFactory(dataname='SPY', historical=True,
                                      fromdate=from_date,
                                      timeframe=bt.TimeFrame.Minutes, compression=60)
                  cerebro.adddata(data1, name='Data1')
                  benchdata = data1
      
              cerebro.addobserver(bt.observers.Benchmark,
                                  data=benchdata,
                                  timeframe=TIMEFRAMES[args.timeframe])
      
          # Run over everything
          cerebro.run(maxcpus=8)
      
          # Plot
          cerebro.plot()
      
      vladisld 1 Reply Last reply Reply Quote 0
      • vladisld
        vladisld @MislavSag last edited by

        @MislavSag said in Interactive brokers hang and plot:

        When backtest finishes it doesn't show the graph and it doesn't stop. Even if I click ctrl + C, it just 'hangs'

        The same behavior was also observed and discussed in the following post:
        https://community.backtrader.com/topic/2988/next-not-triggering-on-ibkr-data-feed/2

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

          Unfortunately, setting live=False, preload=False didn't help. It still hangs in the end. Code in stop method and plot doesn't execute.

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