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/

    Error when data on 3rd Jul data is added.

    General Code/Help
    1
    1
    17
    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.
    • Wejie Phang
      Wejie Phang last edited by

      i'm using intraday 1 min data of Nasdaq 100 futures, Nasdaq100 index and SPX index
      I encounter errors when the period includes the day of 3rd July
      there is no error when the start day is 4th July.

      class TStationData (btfeed.GenericCSVData):
          params=(
              ('fromdate',datetime.datetime(2019,7,4)),
              ('todate',datetime.datetime(2019,10,27)),
              ('nullvalue',0.0),
              ('fill_vol',0.0),
              ('fill_oi',0.0),
              ('timeframe',bt.TimeFrame.Minutes),
              ('compression',1),
              ('dtformat',('%m/%d/%Y')),
              ('tmformat',('%H:%M')),
              ('datetime',0),
              ('time',1), 
              ('high',3),
              ('low',4),
              ('open',2),
              ('close',5),
              ('volume',-1),
              ('openinterest',-1)
      )
      

      The error i see is when the day of 3rd July is included:

      
        File "C:\Users\wjpha\anaconda3\lib\site-packages\backtrader\lineiterator.py", line 297, in _once
          indicator._once()
      
        File "C:\Users\wjpha\anaconda3\lib\site-packages\backtrader\linebuffer.py", line 631, in _once
          self.once(self._minperiod, self.buflen())
      
        File "C:\Users\wjpha\anaconda3\lib\site-packages\backtrader\functions.py", line 204, in once
          dst[i] = flogic([arr[i] for arr in arrays])
      
        File "C:\Users\wjpha\anaconda3\lib\site-packages\backtrader\functions.py", line 204, in <listcomp>
          dst[i] = flogic([arr[i] for arr in arrays])
      
      IndexError: array index out of range
      

      I couldn't find any similar errors elsewhere. What could be the cause of the error here?
      Thanks in advance.

      strategies code as follow:

      import backtrader as bt
      
      
      class MAcrossover(bt.Strategy):
          
          # Moving average parameters
          params=(('pfast',500),('pslow',1000),('Xmean',10),)
      
       
              
          def log(self,txt,dt=None):
              dt=dt or self.datas[0].datetime.date(0) 
              tm=self.datas[0].datetime.time()
              print('%s, %s, %s' % (dt.isoformat(), tm, txt)) #Print date and close,Comment this line when running optimization
              
          def __init__(self):
              #keep a reference to the "close" line in the data[0] dataseries
              self.dataclose=self.datas[0].close
              NDFclose=self.data0.close
              ndx_close=self.data1.close
              snp_close=self.data2.close
              
              #Order variable will contain ongoing order details/status
              self.order=None
              
              #Instantiate moving averages
              self.slow_sma=bt.indicators.MovingAverageSimple(self.datas[0],period=self.params.pslow)
              
              self.fast_sma=bt.indicators.MovingAverageSimple(self.datas[0],period=self.params.pfast)
              
              self.Xmean=bt.indicators.EMA(self.datas[0],period=self.params.Xmean)
              
              ndx_sma50=bt.indicators.MovingAverageSimple(ndx_close,period=500)
              ndx_sma100=bt.indicators.MovingAverageSimple(ndx_close,period=1000)
              ndx_max=bt.Max(ndx_sma50,ndx_sma100)
              ndx_ema=bt.indicators.EMA(ndx_close,period=20)
              
              snp_sma50=bt.indicators.MovingAverageSimple(snp_close,period=500)
              snp_sma100=bt.indicators.MovingAverageSimple(snp_close,period=1000)
              snp_max=bt.Max(snp_sma50,snp_sma100)
              snp_ema=bt.indicators.EMA(snp_close,period=20)
              
              #Bull Futures Trend
              #if NDFclose > 
              
              # Buy Signal
             # self.buy_sig1=bt.And(snp_ema(-1)<snp_max(-1),
                              #snp_ema(0)>snp_max(0),
                             #ndx_close(0)>ndx_max(0)
                             # )
              
              self.buy_sig2=bt.And(ndx_ema(-1)<ndx_max(-1),
                                   ndx_ema(0)>ndx_max(0),
                                   snp_close(0)>snp_max(0)
                                   )
              
              
              # Close Long position
              #self.buyclose_sig1=snp_close(0)<snp_max(0)
              self.buyclose_sig2=ndx_close(0)<ndx_max(0)
              
          def notify_order(self, order):
              if order.status in [order.Submitted,order.Accepted]:
                  #An active Buy/Sell order has been submitted/accepted - Nothing to do
                  return
              
              #Check if an order has been completed
              if order.status in [order.Completed]:
                  if order.isbuy():
                      self.log(f'BUY EXECUTED, {order.executed.price:2f}')
                  elif order.issell():
                      self.log(f'SELL EXECUTED,{order.executed.price:2f}')
                  self.bar_executed=len(self)
                  
              elif order.status in [order.Canceled,order.Margin,order.Rejected]:
                  self.log('Order Canceled/Margin/Rejected')
              
              #Reset orders
              self.order=None
              
          
          def next(self):
              #Check for open orders
              if self.order:
                  return
      
      1 Reply Last reply Reply Quote 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2016, 2017, 2018, 2019, 2020, 2021 NodeBB Forums | Contributors