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/

    why don't take another position?

    General Discussion
    1
    3
    18
    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.
    • حسین سلطانی
      حسین سلطانی last edited by

      when I run below code, just EXECUTED one position and another don't take.
      can you help me to run this code correctly?

      from datetime import datetime
      import datetime
      import backtrader as bt
      import pandas as pd
      %matplotlib inline
      
      class Strats(bt.Strategy):
      
          lines = ('sma', )
          params = (('sma', 10), ('fastma', 20))
      
          def __init__(self):
      
              self.dataclose = self.datas[0].close
              self.slowsma = bt.indicators.SMA(self.datas[0], period=self.p.sma)
              self.fastsma = bt.indicators.SMA(self.datas[0], period=self.p.fastma)
              self.cross = bt.indicators.CrossOver(self.fastsma, self.slowsma)
              self.order = None
      
          def log(self, txt, dt=None):
              
              dt = self.datas[0].datetime.date()
              print(f'{dt}, {txt}')
      
          def notify_order(self, order):
      
              if order.status in [order.Submitted, order.Accepted]:
      
                  self.log(f'Status: {order.getstatusname()}')
                  print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
                  print(order.issell(),'ssssssssssssssssssssssssssssssss')
      
              if order.status in [order.Completed]:
      
                  self.log(f'BUY EXECUTED: Price: {order.executed.price},\
                           Cost: {order.executed.value}, Comms: {order.executed.comm}')
                  print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
                  print(order.issell(),'ssssssssssssssssssssssssssssssss')
                  self.log(f'Account Balance: {cerebro.broker.getcash()}')
      
              elif order.status in [order.Rejected, order.Margin, order.Cancelled]:
                  self.log('order rejected/cancelled by broker or insufficient margin')
                   
              self.order = None
              
          def notify_trade(self, trade):
              if trade.isopen:
                  return  
              else:
                  self.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET {trade.pnlcomm},\
                           Trade PnL: {trade.pnlcomm/self.totalcost}')
                  self.log(f'Updated Account Balance: {cerebro.broker.getcash()}')
              
          def next(self):
      
              if self.order:
                  self.log(f'Open: {self.data.open[0]}, High: {self.data.high[0]},\
                           Low: {self.data.low[0]}, Close: {self.dataclose[0]}')
                  return
      
              if not self.position:
      
                  if self.cross > 0:
      #                 self.order = self.buy()
                      self.order =self.buy(exectype=bt.Order.StopTrail,trailpercent=0.02)
                      
                      self.log(f'BUY CREATED: {self.dataclose[0]}')
                  elif self.cross < 0:
      #                 self.order = self.sell()
                      self.order =self.sell(exectype=bt.Order.StopTrail, trailpercent=0.02)
                      self.log(f'SELL CREATED: {self.dataclose[0]}')
      
      cerebro = bt.Cerebro()
      cerebro.broker.set_cash(100000)
      
      print(f'Starting Portfolio Value: {cerebro.broker.getvalue()}')
      
      df = pd.read_pickle("data_pairs_kucoin_future_1d.pkl").loc[15,'pair']
      df['date'] = df['date'].astype(str) +' '+ df['time'].astype(str)
      df['date']= pd.to_datetime(df['date'], format='%d/%m/%Y %H:%M:%S' )
      df.set_index('date', inplace=True) 
      data = bt.feeds.PandasData(dataname=df)
      cerebro.adddata(data)
      cerebro.addstrategy(Strats)
      cerebro.addsizer(bt.sizers.PercentSizer, percents=99)
      cerebro.broker.setcommission(commission=0.02)
      cerebro.run()
      
      print(f'Final Portfolio Value: {cerebro.broker.getvalue()}')
      cerebro.plot()
      

      output:

      Starting Portfolio Value: 100000
      2021-05-24, BUY CREATED: 11.959
      2021-05-25, Status: Submitted
      True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      False ssssssssssssssssssssssssssssssss
      2021-05-25, order rejected/cancelled by broker or insufficient margin
      2021-06-09, SELL CREATED: 10.537
      2021-06-10, Status: Submitted
      False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      True ssssssssssssssssssssssssssssssss
      2021-06-10, Status: Accepted
      False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      True ssssssssssssssssssssssssssssssss
      2021-06-10, BUY EXECUTED: Price: 10.326260000000001,                     Cost: -97020.0, Comms: 1940.4
      False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      True ssssssssssssssssssssssssssssssss
      2021-06-10, Account Balance: 195079.6
      Final Portfolio Value: 179586.48051627597
      
      

      and picture:

      5ddbaf0b-6c43-4ff5-98d8-29cc3297a9d5-image.png

      1 Reply Last reply Reply Quote 0
      • حسین سلطانی
        حسین سلطانی last edited by

        I solve this problem
        I have a new problem
        why I can't take this print some times between BUY CREATED and SELL CREATED

        self.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET: {trade.pnlcomm}')
        self.log(f'Updated Account Balance: {cerebro.broker.getvalue()}')
        
        

        my complete code:

        from datetime import datetime
        import datetime
        import backtrader as bt
        import pandas as pd
        %matplotlib inline
        
        class Strats(bt.Strategy):
        
            lines = ('sma', )
            params = (('sma', 10), ('fastma', 20))
        
            def __init__(self):
        
                self.dataclose = self.datas[0].close
                self.slowsma = bt.indicators.SMA(self.datas[0], period=self.p.sma)
                self.fastsma = bt.indicators.SMA(self.datas[0], period=self.p.fastma)
                self.cross = bt.indicators.CrossOver(self.fastsma, self.slowsma)
                self.order = None
        
            def log(self, txt, dt=None):
                
                dt = self.datas[0].datetime.date()
                print(f'{dt}, {txt}')
        
            def notify_order(self, order):
        
                if order.status in [ order.Accepted]:
                    self.log(f'Status: {order.getstatusname()}')
                    print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
                    print(order.issell(),'ssssssssssssssssssssssssssssssss')
        
                if order.status in [order.Completed]:#یعنی اینکه معامله تمام شده
                    self.log(f'Status: {order.getstatusname()}')
        
                    self.log(f'BUY EXECUTED: Price: {order.executed.price},\
                             Cost: {order.executed.value}, Comms: {order.executed.comm}')
                    self.log(f'Account Balance: {cerebro.broker.getcash()}')
        
        
                elif order.status in [order.Rejected, order.Margin, order.Cancelled]:
                    self.log('order rejected/cancelled by broker or insufficient margin')
        
                self.order = None
        
            def notify_trade(self, trade):
                if trade.isopen:
                    return
                else:
                    self.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET: {trade.pnlcomm}')
                    self.log(f'Updated Account Balance: {cerebro.broker.getvalue()}')
        
            def next(self):
        #             self.log(f'Open: {self.data.open[0]}, High: {self.data.high[0]},\
        #                      Low: {self.data.low[0]}, Close: {self.dataclose[0]}')        
                if self.order:
                    return
        
                if not self.position:
                    if self.cross < 0:
        #                 self.order = self.buy(size=None)
                        self.order =self.buy(exectype=bt.Order.StopTrail,trailpercent=0.02)
                        self.log(f'BUY CREATED: {self.dataclose[0]}')
                else:        
                        
                    if self.cross > 0:
        #                 self.order = self.sell(size=None)
                        self.order =self.sell(exectype=bt.Order.StopTrail, trailpercent=0.02)
                        self.log(f'SELL CREATED: {self.dataclose[0]}')
        
        cerebro = bt.Cerebro()
        cerebro.broker.set_cash(100000)
        
        print(f'Starting Portfolio Value: {cerebro.broker.getvalue()}')
        
        df = pd.read_pickle("data_pairs_kucoin_future_1d.pkl").loc[15,'pair']
        df['date'] = df['date'].astype(str) +' '+ df['time'].astype(str)
        df['date']= pd.to_datetime(df['date'], format='%d/%m/%Y %H:%M:%S' )
        df.set_index('date', inplace=True) 
        data = bt.feeds.PandasData(dataname=df)
        cerebro.adddata(data)
        cerebro.addstrategy(Strats)
        cerebro.addsizer(bt.sizers.PercentSizer, percents=96)
        cerebro.broker.setcommission(commission=0.002)
        cerebro.run()
        
        print(f'Final Portfolio Value: {cerebro.broker.getvalue()}')
        cerebro.plot()
        

        and out put:

        Starting Portfolio Value: 100000
        2021-06-09, BUY CREATED: 10.537
        2021-06-10, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-06-13, Status: Completed
        2021-06-13, BUY EXECUTED: Price: 7.994759999999999,                     Cost: 72838.28034544936, Comms: 145.67656069089873
        2021-06-13, Account Balance: 27016.043093859746
        2021-07-16, SELL CREATED: 6.361
        2021-07-17, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-07-18, Status: Completed
        2021-07-18, BUY EXECUTED: Price: 7.335300000000001,                     Cost: 72838.28034544936, Comms: 133.66020689000663
        2021-07-18, Account Balance: 93712.48633197304
        2021-07-18, OPERATION PROFIT: GROSS -6008.176900446039, NET: -6287.513668026944
        2021-07-18, Updated Account Balance: 93712.48633197304
        2021-07-27, BUY CREATED: 8.2
        2021-07-28, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-07-28, Status: Completed
        2021-07-28, BUY EXECUTED: Price: 8.363999999999999,                     Cost: 91763.266616268, Comms: 183.526533232536
        2021-07-28, Account Balance: 1765.6931824725036
        2021-08-30, SELL CREATED: 11.545
        2021-08-31, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-08-31, Status: Completed
        2021-08-31, BUY EXECUTED: Price: 11.3141,                     Cost: 91763.266616268, Comms: 248.25891315713002
        2021-08-31, Account Balance: 125646.8908478804
        2021-08-31, OPERATION PROFIT: GROSS 32366.189962297027, NET: 31934.40451590736
        2021-08-31, Updated Account Balance: 125646.8908478804
        2021-09-09, BUY CREATED: 11.004
        2021-09-10, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-09-10, Status: Completed
        2021-09-10, BUY EXECUTED: Price: 11.224079999999999,                     Cost: 123033.43551824447, Comms: 246.06687103648895
        2021-09-10, Account Balance: 2367.3884585994338
        2021-09-11, SELL CREATED: 10.583
        2021-09-12, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-09-12, Status: Completed
        2021-09-12, BUY EXECUTED: Price: 10.37134,                     Cost: 123033.43551824447, Comms: 227.37214829683853
        2021-09-12, Account Balance: 115826.09045872187
        2021-09-12, OPERATION PROFIT: GROSS -9347.361369825203, NET: -9820.80038915853
        2021-09-12, Updated Account Balance: 115826.09045872187
        2021-09-21, BUY CREATED: 9.22
        2021-09-22, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-09-22, Status: Completed
        2021-09-22, BUY EXECUTED: Price: 9.4044,                     Cost: 113416.90777718044, Comms: 226.8338155543609
        2021-09-22, Account Balance: 2182.348865987063
        2021-09-24, SELL CREATED: 9.695
        2021-09-25, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-09-25, Status: Completed
        2021-09-25, BUY EXECUTED: Price: 9.501100000000001,                     Cost: 113416.90777718044, Comms: 229.16621634166333
        2021-09-25, Account Balance: 116536.29082047705
        2021-09-25, OPERATION PROFIT: GROSS 1166.200393651203, NET: 710.2003617551788
        2021-09-25, Updated Account Balance: 116536.29082047705
        2021-10-08, BUY CREATED: 10.744
        2021-10-09, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-10-09, Status: Completed
        2021-10-09, BUY EXECUTED: Price: 10.95888,                     Cost: 114112.33597141113, Comms: 228.22467194282228
        2021-10-09, Account Balance: 2195.7301771230996
        2021-10-19, SELL CREATED: 10.743
        2021-10-20, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-10-20, Status: Completed
        2021-10-20, BUY EXECUTED: Price: 10.52814,                     Cost: 114112.33597141113, Comms: 219.25427577162128
        2021-10-20, Account Balance: 111603.61378716212
        2021-10-20, OPERATION PROFIT: GROSS -4485.198085600503, NET: -4932.677033314946
        2021-10-20, Updated Account Balance: 111603.61378716212
        2021-10-20, BUY CREATED: 11.546
        2021-10-21, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-10-22, Status: Completed
        2021-10-22, BUY EXECUTED: Price: 11.14146,                     Cost: 103385.59768842117, Comms: 206.77119537684234
        2021-10-22, Account Balance: 8011.244903364105
        2021-11-14, SELL CREATED: 11.05
        2021-11-15, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2021-11-15, Status: Completed
        2021-11-15, BUY EXECUTED: Price: 10.829,                     Cost: 103385.59768842117, Comms: 200.972338879808
        2021-11-15, Account Balance: 108296.4420043883
        2021-11-15, OPERATION PROFIT: GROSS -2899.428248517165, NET: -3307.1717827738153
        2021-11-15, Updated Account Balance: 108296.4420043883
        2021-12-23, BUY CREATED: 7.315
        2021-12-24, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2021-12-24, Status: Completed
        2021-12-24, BUY EXECUTED: Price: 7.4613000000000005,                     Cost: 106043.87601069701, Comms: 212.087752021394
        2021-12-24, Account Balance: 2040.4782416698913
        2022-01-09, SELL CREATED: 6.929
        2022-01-10, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2022-01-10, Status: Completed
        2022-01-10, BUY EXECUTED: Price: 6.79042,                     Cost: 106043.87601069701, Comms: 193.01796109003985
        2022-01-10, Account Balance: 98356.44082559978
        2022-01-10, OPERATION PROFIT: GROSS -9534.895465677086, NET: -9940.00117878852
        2022-01-10, Updated Account Balance: 98356.44082559978
        2022-02-09, BUY CREATED: 4.757
        2022-02-10, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2022-02-11, Status: Completed
        2022-02-11, BUY EXECUTED: Price: 4.49718,                     Cost: 89264.98923901367, Comms: 178.52997847802735
        2022-02-11, Account Balance: 8912.92160810809
        2022-02-17, SELL CREATED: 3.946
        2022-02-18, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2022-02-18, Status: Completed
        2022-02-18, BUY EXECUTED: Price: 3.86708,                     Cost: 89264.98923901367, Comms: 153.51613881872862
        2022-02-18, Account Balance: 85517.47487865368
        2022-02-18, OPERATION PROFIT: GROSS -12506.919829649363, NET: -12838.965946946118
        2022-02-18, Updated Account Balance: 85517.47487865368
        2022-03-21, BUY CREATED: 3.31
        2022-03-22, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2022-03-22, Status: Completed
        2022-03-22, BUY EXECUTED: Price: 3.3762,                     Cost: 83738.71140117767, Comms: 167.47742280235536
        2022-03-22, Account Balance: 1611.2860546736529
        2022-04-11, SELL CREATED: 3.106
        2022-04-12, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2022-04-14, Status: Completed
        2022-04-14, BUY EXECUTED: Price: 3.26634,                     Cost: 83738.71140117767, Comms: 162.02778425337522
        2022-04-14, Account Balance: 82463.15039710788
        2022-04-14, OPERATION PROFIT: GROSS -2724.819274490068, NET: -3054.3244815457983
        2022-04-14, Updated Account Balance: 82463.15039710788
        2022-04-25, BUY CREATED: 3.28
        2022-04-26, Status: Accepted
        True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        False ssssssssssssssssssssssssssssssss
        2022-04-27, Status: Completed
        2022-04-27, BUY EXECUTED: Price: 2.9631,                     Cost: 71516.06661707425, Comms: 143.0321332341485
        2022-04-27, Account Balance: 10804.051646799482
        2022-04-28, SELL CREATED: 2.988
        2022-04-29, Status: Accepted
        False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
        True ssssssssssssssssssssssssssssssss
        2022-04-29, Status: Completed
        2022-04-29, BUY EXECUTED: Price: 2.92824,                     Cost: 71516.06661707425, Comms: 141.34940225492323
        2022-04-29, Account Balance: 81337.40337200619
        2022-04-29, OPERATION PROFIT: GROSS -841.3654896126303, NET: -1125.747025101702
        2022-04-29, Updated Account Balance: 81337.40337200619
        Final Portfolio Value: 81337.40337200619
        
        1 Reply Last reply Reply Quote 0
        • حسین سلطانی
          حسین سلطانی last edited by

          if you have suggestion for get better my cod I become glad

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