Navigation

    Backtrader Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. Abhishek Agrawal
    For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
    • Profile
    • Following 1
    • Followers 0
    • Topics 4
    • Posts 11
    • Best 0
    • Groups 0

    Abhishek Agrawal

    @Abhishek Agrawal

    0
    Reputation
    13
    Profile views
    11
    Posts
    0
    Followers
    1
    Following
    Joined Last Online

    Abhishek Agrawal Unfollow Follow

    Latest posts made by Abhishek Agrawal

    • RE: Exporting the generated backtest result in csv format.

      Thanks a lot guys. You guys are genius with Backtrader.
      I would like to know that can remove some extra details from csv file when using Writer.

      Like pnl ,tickers etc

      posted in General Discussion
      Abhishek Agrawal
      Abhishek Agrawal
    • Exporting the generated backtest result in csv format.

      Exporting data in csv.
      Hey guys can u please help me on how to export the data of trades and all the details printed in the terminal to csv files.
      I want to export all my trades in csv files
      @run-out @ab_trader @backtrader

      posted in General Discussion
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: TypeError

      Thanks a lot for the reply man it helped.
      @run-out there's one another problem- The code is not ending anywhere. It is just running

      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: TypeError

      So sorry for not posting the error.
      Here you go.

      Traceback (most recent call last):
      File "C:/Users/Abhishek/Backtrader/orb.py", line 44, in <module>
      cerebro.adddata(data)
      TypeError: adddata() missing 1 required positional argument: 'data'

      import backtrader as bt
      import datetime
      import backtrader.feeds as btfeed
      
      
      class MyStrategy(bt.Strategy):
          def __init__(self):
              ma_short = bt.ind.SMA(period=10)
              ma_long = bt.ind.SMA(period=20)
              self.crossover = bt.ind.CrossOver(ma_long, ma_short)
      
          def next(self):
              if not self.position:
                  if self.crossover > 0:
                      self.buy()
              elif self.crossover < 0:
                  self.close()
      
      
      if __name__ == '__main__':
          cerebro = bt.Cerebro
      
      
          class DataFeed(btfeed.GenericCSVData):
              params = (
      
                  ('dtformat', '%Y%m%d'),
                  ('tmformat', '%H:%M:%S'),
                  ('datetime', 0),
                  ('time', 1),
                  ('open', 2),
                  ('high', 3),
                  ('low', 4),
                  ('close', 5),
                  ('volume', 6),
                  ('openinterest', 7)
              )
      
      
          data = DataFeed(dataname='BANKNIFTYAUG19.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
                          fromdate=datetime.datetime(2019, 7, 20),
                          todate=datetime.datetime(2019, 8, 30))
      
          cerebro.adddata(data)
          cerebro.addstrategy(MyStrategy)
          cerebro.broker.setcash(100000)
      
          cerebro.run()
      
      
      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • TypeError

      **Getting this error again. Started again with Backtrader after few days of break. Please help
      @run-out @ab_trader @backtrader **```
      import backtrader as bt
      import datetime
      import backtrader.feeds as btfeed

      class MyStrategy(bt.Strategy):
      def init(self):
      sma_short = bt.ind.SMA(period=10)
      sma_long = bt.ind.SMA(period=20)
      self.crossover = bt.ind.CrossOver(sma_short, sma_long)

      def next(self):
          if not self.position:
              if self.crossover > 0:
                  self.buy()
          elif self.crossover < 0:
              self.close()
      

      if name == 'main':
      cerebro = bt.Cerebro

      class DataFeed(btfeed.GenericCSVData):
          params = (
      
              ('dtformat', '%Y%m%d'),
              ('tmformat', '%H:%M:%S'),
              ('datetime', 0),
              ('time', 1),
              ('open', 2),
              ('high', 3),
              ('low', 4),
              ('close', 5),
              ('volume', 6),
              ('openinterest', 7)
          )
      
      
      data = DataFeed(dataname='BANKNIFTYAUG19.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
                      fromdate=datetime.datetime(2019, 7, 20),
                      todate=datetime.datetime(2019, 8, 30))
      
      cerebro.adddata(data)
      cerebro.addstrategy(MyStrategy)
      cerebro.run()
      
      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: Getting errors one after another

      It still doesn't work. Can u connect over teamviewer for some help.

      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • Getting errors one after another

      I wanted to make a range breakout strategy. Mkt opens at 9:15 IST. I want the algo to calculate the range of 1st 15min bar and buy or sell if the price is above high or low. I have a 1 min data.
      in this code i am getting an IndexError.
      Please help
      @backtrader @ab_trader @run-out

      from __future__ import (absolute_import, division, print_function,
                              unicode_literals)
      import backtrader as bt
      import datetime
      # from datetime import datetime
      import os
      import sys
      import backtrader.feeds as btfeed
      
      import pandas as pd
      
      
      class TestStrategy(bt.Strategy):
          def log(self, txt, dt=None):
              dt = dt or self.data.datetime.datetime(0)
              print('%s, %s' % (dt.isoformat(), txt))
      
          def __init__(self):
              self.datahigh = self.datas[0].high
              self.datalow = self.datas[0].low
              self.dataclose = self.datas[0].close
              self.order = None
              self.buyprice = None
              self.buycomm = None
              # self.starttime = datetime.replace(hour=9, minute=30, second=0)
              # self.t = self.datas[0].datetime.time(0)
      
          def notify_order(self, order):
              if order.status in [order.Submitted, order.Accepted]:
                  # Buy/Sell order submitted/accepted to/by broker - Nothing to do
                  return
      
              # Check if an order has been completed
              # Attention: broker could reject order if not enough cash
              if order.status in [order.Completed]:
                  if order.isbuy():
                      self.log(
                          'BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                          (order.executed.price,
                           order.executed.value,
                           order.executed.comm))
      
                      self.buyprice = order.executed.price
                      self.buycomm = order.executed.comm
                  else:  # Sell
                      self.log('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                               (order.executed.price,
                                order.executed.value,
                                order.executed.comm))
      
              elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                  self.log('Order Canceled/Margin/Rejected')
      
              self.order = None
      
          def next(self):
      
              if self.order:
                  return
              if not self.position:
      
                  if self.dataclose[0] > self.datahigh[-1]:
                      self.log('BUY CREATED, %.2f' % self.dataclose[0])
      
                      # Keep track of the created order to avoid a 2nd order
                      self.order = self.buy()
      
                  else:
                      if self.dataclose[0] < self.datalow[-1]:
                          self.log('SELL CREATED, %.2f' % self.dataclose[0])
      
                          # Keep track of the created order to avoid a 2nd order
                          self.order = self.sell()
      
          def stop(self):
              self.log(' Ending Value %.2f' % (self.broker.getvalue()))
      
      
      if __name__ == '__main__':
          cerebro = bt.Cerebro()
      
      
          class DataFeed(btfeed.GenericCSVData):
              params = (
      
                  ('dtformat', '%Y%m%d'),
                  ('tmformat', '%H:%M:%S'),
                  ('datetime', 0),
                  ('time', 1),
                  ('open', 2),
                  ('high', 3),
                  ('low', 4),
                  ('close', 5),
                  ('volume', 6),
                  ('openinterest', 7)
              )
      
      
          data = DataFeed(dataname='BANKNIFTYFEB18.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
                          fromdate=datetime.datetime(2017, 2, 1),
                          todate=datetime.datetime(2017, 2, 28))
      
          cerebro.adddata(data)
          cerebro.addstrategy(TestStrategy)
      
          cerebro.run()
      ext
      
      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: TypeError

      @run-out Sorry the mkt starts at 9:15

      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: TypeError

      @run-out Hey that error has been solved. I want to code my program that is starts taking trade after 9:30(Market opens at 9:30). Timeframe = 1 minute
      Condition is if close of any 1 minute bar after 9:30 is above the high range then buy at market price.
      If close of any 1 minute bar after 9:30 is below the low range then sell at market price.

      from __future__ import (absolute_import, division, print_function,
                              unicode_literals)
      import backtrader as bt
      import datetime
      from datetime import datetime
      import os
      import sys
      import backtrader.feeds as btfeed
      
      import pandas as pd
      
      
      class TestStrategy(bt.Strategy):
          def log(self, txt, dt=None):
              dt = dt or self.data.datetime.datetime(0)
              print('%s, %s' % (dt.isoformat(), txt))
      
          def __init__(self):
              self.buysignal = self.data.close > self.data.high
              self.sellsignal = self.data.close > self.data.low
              self.dataclose = self.datas[0].close
              self.order = None
              self.buyprice = None
              self.buycomm = None
              self.starttime = datetime.now().replace(hour=9, minute=30, second=0)
              self.t = self.datas[0].datetime.time(0)
      
          def notify_order(self, order):
              if order.status in [order.Submitted, order.Accepted]:
                  # Buy/Sell order submitted/accepted to/by broker - Nothing to do
                  return
      
              # Check if an order has been completed
              # Attention: broker could reject order if not enough cash
              if order.status in [order.Completed]:
                  if order.isbuy():
                      self.log(
                          'BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                          (order.executed.price,
                           order.executed.value,
                           order.executed.comm))
      
                      self.buyprice = order.executed.price
                      self.buycomm = order.executed.comm
                  else:  # Sell
                      self.log('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                               (order.executed.price,
                                order.executed.value,
                                order.executed.comm))
      
              elif order.status in [order.Canceled, order.Margin, order.Rejected]:
                  self.log('Order Canceled/Margin/Rejected')
      
              self.order = None
      
          def next(self):
      
              if self.order:
                  return
              if not self.position:
                  if self.t > self.starttime.time():
                      if self.buysignal:
                          self.log('BUY CREATED, %.2f' % self.dataclose[0])
      
                          # Keep track of the created order to avoid a 2nd order
                          self.order = self.buy()
      
                      else:
                          if self.sellsignal:
                              self.log('SELL CREATED, %.2f' % self.dataclose[0])
      
                              # Keep track of the created order to avoid a 2nd order
                              self.order = self.sell()
      
          def stop(self):
              self.log(' Ending Value %.2f' % (self.broker.getvalue()))
      
      
      if __name__ == '__main__':
          cerebro = bt.Cerebro()
      
      
          class DataFeed(btfeed.GenericCSVData):
              params = (
                  ('dtformat', '%Y%m%d'),
                  ('tmformat', '%H:%M:%S'),
                  ('datetime', 0),
                  ('time', 1),
                  ('open', 2),
                  ('high', 3),
                  ('low', 4),
                  ('close', 5),
                  ('volume', 6),
                  ('openinterest', 7)
              )
      
      
          data = DataFeed(dataname='BANKNIFTYFEB18.csv', timeframe=bt.TimeFrame.Minutes, compression=1)
          cerebro.adddata(data)
          cerebro.addstrategy(TestStrategy)
      
          cerebro.run()
      
          # why declare a class for generating data
          # my data fromat is diff than the yahoo data. so have to modify
          # letme show u the plott file
      
      
      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal
    • RE: TypeError

      @Abhishek-Agrawal @backtrader @ab_trader

      posted in General Code/Help
      Abhishek Agrawal
      Abhishek Agrawal