Backtrader Community

    • 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/

    backtrader.linebuffer.LineBuffer object at

    Indicators/Strategies/Analyzers
    2
    4
    2851
    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.
    • A
      abyaby last edited by

      Hi,
      Could anyone help me?
      I dont know which Buy and Sell price I am getting. Wheather on actuel closing bar or next closing price.
      Please take a quick look on my code.

      I have backtested since months with following logic.

          if not self.position:
              # Not yet ... we MIGHT BUY if ...
              if self.bcross == 1.0:
                  # BUY, BUY, BUY!!! (with default parameters)
                  price = self.data.close
                  self.log("BUY CREATE, {}".format(price))
                  # Keep track of the created order to avoid a 2nd order
                  self.order = self.buy(
                      exectype=bt.Order.Limit,
                      price=price)
          else:
              # Already in the market ... we might sell
              if self.scross == -1.0:
                  # SELL, SELL, SELL!!! (with all possible default parameters)
                  price = self.data.close
                  self.log("SELL CREATE, {}".format(price))
                  # Keep track of the created order to avoid a 2nd order
                  self.order = self.sell(
                      exectype=bt.Order.Limit,
                      price=price)
      

      As you can see I used price = self.data.close instead self.data.close[0]

      My log function is this and unfortunatly it was off.

      def log(self, txt, dt=None):
          dt = dt or self.data.datetime[0]
          if debug:
              print("{}, {}".format(bt.num2date(dt), txt))
      

      I got good and bad end results and they all were reproduceable! plotting, sharpratio, vwr, sqn, Analyzer everything was working well.

      my datafeed is

      symbol = 'BTC/USDT'
      # 2018-10-24T14:10:00Z - 2018-10-24T17:50:00Z
      # 2018-10-24T23:00:00Z - 2018-10-25T01:45:00Z
      hist_start_date = datetime.utcnow() - timedelta(days=500)
      hist_stop_date = datetime.utcnow() - timedelta(hours=1)
      data = bt.feeds.CCXT(exchange='binance',
                          symbol=symbol,
                          timeframe=bt.TimeFrame.Minutes,
                          fromdate=hist_start_date,
                          todate=hist_stop_date,
                          compression=60)
      

      Today I debug and came to know that something is going wrong and got these results

      0_1558705832803_0304e80c-6b28-4fd3-b214-5ff2abf8080a-image.png

      @backtrader How could I go live, if I tested my strategies with self.data.close ? Is buy price, "buy at closing price of next bar" ?
      Sell = "selling at closing price of next bar"?
      Or did I backtested something unrealistic and I have to make new strategies with self.data.close[0] ?

      Thanks for helping.

      B 1 Reply Last reply Reply Quote 0
      • B
        backtrader administrators @abyaby last edited by

        @abyaby said in backtrader.linebuffer.LineBuffer object at:

        I dont know which Buy and Sell price I am getting

        Neither do we.

        @abyaby said in backtrader.linebuffer.LineBuffer object at:

        As you can see I used price = self.data.close instead self.data.close[0]

        I guess you already realized that's wrong.

        @abyaby said in backtrader.linebuffer.LineBuffer object at:

        How could I go live, if I tested my strategies with self.data.close ?

        If could means you already did ... I hope you had luck.

        If could means you plan to ... I would do proper backtesting.

        @abyaby said in backtrader.linebuffer.LineBuffer object at:

        Is buy price, "buy at closing price of next bar" ?
        Sell = "selling at closing price of next bar"?

        Your orders are Limit and your data is unknown ... my guess is as good as any other as to what you got.

        1 Reply Last reply Reply Quote 0
        • A
          abyaby last edited by

          @backtrader Thanks a lot of your fast and brief answer.

          1 Reply Last reply Reply Quote 0
          • A
            abyaby last edited by

            @backtrader Thanks that you mentioned the Limit Order. I thought, it doesnt matter, if I add

            cerebro.broker.setcommission(commission=0.002)
            

            Regarding unkown data
            I have backtest self.data.close and self.data.close[0] again.

            PnL with Limit order are different

            PnL with Market order are the same. What could it mean? I was especting data.close with market order a random number but surprisingly its the same.

            data.close[0] vs. data.close
            order.market -478.3 order.market -478.3
            order.limit -634.26 order.limit 2370.7

            And if some one know why data.close and data.close[0] have defferent limit order PnL ?

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