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/

    Trade object: why is sell size 0?

    General Discussion
    4
    19
    2674
    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.
    • D
      duality_ last edited by

      First problem I had is identifying whether a trade is a buy or sell. Order has isbuy() method, but what about trades?

      I can now see from correlation with orders that trades that are sell have a size of 0, which is odd. Is there a way to see the sell amount? And is there some method to get the trade type (buy / sell)?

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

        Sells are neither buy nor sell. They can long or short. This may seem like a stupid distinction, but a Trade is composed of the combination of 1 or more buy operations and 1 or more sell operations (which may be executed through auxiliary methods like close or order_target_xxxx)

        This is explained in the docs: Docs - Trade

        That's why Trade has a long attribute. Or you can check whether size is positive o negative.

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

          @duality_ said in Trade object: why is sell size 0?:

          I can now see from correlation with orders that trades that are sell have a size of 0

          No. They have a negative size.

          D 1 Reply Last reply Reply Quote 0
          • D
            duality_ @backtrader last edited by

            Hmm I think they are 0. I use this code to debug:

                def notify_order(self, o):
                    print("Order {} {} {} {} {}".format(o.data._name, 'buy ' if o.isbuy() else 'sell', o.size, o.getstatusname(), o.getordername()))
            
                def notify_trade(self, t):
                    print("Trade {} {}*{} = {}".format(t.getdataname(), t.size, t.price, t.value))
            

            Here's a part of the output:

            Order ETH/BTC buy  667356 Submitted Market
            Order ETH/BTC buy  667356 Accepted Market
            Order ETH/BTC buy  667356 Completed Market
            Trade ETH/BTC 667356*0.05344 = 35663.50464
            Order BTC/USD sell -25 Submitted Market
            Order BTC/USD sell -25 Accepted Market
            Order BTC/USD sell -25 Completed Market
            Trade BTC/USD 0*1190.49 = 0.0
            

            Similar with other outputs.

            B 1 Reply Last reply Reply Quote 0
            • D
              duality_ last edited by

              So I tried the .long attribute of a trade (BTW this is not in the reference in notify_trade, but all my trades seem to be long. Not sure if this is correct?

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

                @duality_ said in Trade object: why is sell size 0?:

                Trade BTC/USD 0*1190.49 = 0.0
                

                Yes, it s 0 because you have closed the trade.

                @duality_ said in Trade object: why is sell size 0?:

                So I tried the .long attribute of a trade (BTW this is not in the reference in notify_trade, but all my trades seem to be long. Not sure if this is correct?

                If your trades look like the one above ... they will all be long. But we cannot know.

                1 Reply Last reply Reply Quote 0
                • D
                  duality_ last edited by duality_

                  I've read what you wrote and the docs but this doesn't make much sense to me.

                  What I need to know is to debug when and how the strategy trades. Currently what I can do based on what I know is use notify_order and only output info when the order has been completed. Hope that's okay.

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

                    A trade is the combination of multiple orders and is either long or short. That is determined by the opening order.

                    • If you buy 25 units, you have opened a long trade with size 25
                    • You can then buy and sell multiple times, which will change the current size of the trade as long as you don't take the size to 0
                    • When the size goes down to 0 the trade is closed and the current size remains at 0 and cannot be modified (any futher orders, generate new trades)

                    Apply the inverse logic for a short trade, which starts with a sell order.

                    L 1 Reply Last reply Reply Quote 1
                    • L
                      Laurent Michelizza @backtrader last edited by

                      @backtrader said in Trade object: why is sell size 0?:

                      A trade is the combination of multiple orders and is either long or short. That is determined by the opening order.

                      • If you buy 25 units, you have opened a long trade with size 25
                      • You can then buy and sell multiple times, which will change the current size of the trade as long as you don't take the size to 0
                      • When the size goes down to 0 the trade is closed and the current size remains at 0 and cannot be modified (any futher orders, generate new trades)

                      Apply the inverse logic for a short trade, which starts with a sell order.

                      Thanks, this is definitely the best behavior. I use this in my framework when constantly re-balancing a trade size.

                      1 Reply Last reply Reply Quote 0
                      • D
                        duality_ last edited by

                        @Laurent-Michelizza so you have one trade open almost indefinitely?

                        @backtrader how do I know then how much has been traded in a trade if it's closed and the size is zero?

                        B L 2 Replies Last reply Reply Quote 0
                        • B
                          backtrader administrators @duality_ last edited by

                          @duality_ said in Trade object: why is sell size 0?:

                          @backtrader how do I know then how much has been traded in a trade if it's closed and the size is zero?

                          The problem when answering your questions is that the size is dynamic, i.e.: it can start at 25, move up to 50, go down to 5, move to 17, down to 15, up to 100 and then go down to 0 to close it.

                          Which of all those size values is the one you want to keep track of?

                          1 Reply Last reply Reply Quote 0
                          • D
                            duality_ last edited by

                            The answer to this should be obvious if you're looking from a trader's point-of-view: how much of what have I traded at what point in time?

                            An analogy to the real-life food market would be:

                            • 2018-02-03 traded $3 for 7 apples
                            • 2018-02-43 traded $4 for 7 apples
                            • 2018-02-12 traded 3 apples for 2 oranges
                            • 2018-02-23 traded 1 orange for $2

                            As you can see there's no traded $0 for 7 apples because a trade is closed or something similar.

                            So back to your example of a trade going from a size 25 to 50, back to 5 etc., assuming I understand how this works, for me this would mean that I have 1. bought 25, 2. bought 25 (totaling 50), 3. sold 45 (totaling 5).

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

                              Size 0 doesn't indicate that you have traded anything for 0: it is the final size status of the trade, i.e.: the trade is closed.

                              If you have another expectation, the Trade object isn't going to fulfill it.

                              @duality_ said in Trade object: why is sell size 0?:

                              how much of what have I traded at what point in time?

                              Check tradehistory: Docs - Cerebro

                              1 Reply Last reply Reply Quote 0
                              • D
                                duality_ last edited by

                                So is using orders and filtering when they are completed better for what I want?

                                B 1 Reply Last reply Reply Quote 0
                                • vbs
                                  vbs last edited by

                                  Not sure if I did understand what you want exactly but did you take a look at the BuySell observer? It keeps track of all executed orders indenpendently of trades (i.e. position size going to 0).

                                  D 1 Reply Last reply Reply Quote 0
                                  • D
                                    duality_ @vbs last edited by

                                    @vbs yes this does basically what I would do: check every order and see if it's already executed and if it is, use that.

                                    1 Reply Last reply Reply Quote 0
                                    • L
                                      Laurent Michelizza @duality_ last edited by

                                      @duality_ said in Trade object: why is sell size 0?:

                                      @Laurent-Michelizza so you have one trade open almost indefinitely?

                                      Yes sort of. I pick a side, and then a forecast adjusts the size on each bar.

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

                                        @duality_ said in Trade object: why is sell size 0?:

                                        So is using orders and filtering when they are completed better for what I want?

                                        It is really unclear (at least here) what you want. You are issuing the orders, so you obviously know the size of each order. If your trades consist of a single buy/sell pair, you already know the size. You can of course track order notifications and see the size of each completed order.

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          duality_ last edited by

                                          I don't know the size because I use order_target_percent.

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