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/

    Different commissions for each order type

    Indicators/Strategies/Analyzers
    3
    4
    311
    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
      anas laamrani 0 last edited by

      I would like to set different commissions depending on the order type, if it is buy/sell operations, it should charges a percentage comm = X, and if it is a close operation, it should charge double: 2X.

      def next(self):
          if condition1:
              self.broker.setcommission(0.0045)
              self.buy()
          elif condition2:
              self.broker.setcommission(0.009)
              self.close()
      

      Is there any way through commission scheme or other method to do this?
      Thank you in advance.

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

        As you can see here:

        For order management 3 primitives:

        • buy
        • sell
        • cancel

        For order execution logic the following execution types:

        • Market
        • Close
        • Limit
        • Stop
        • StopLimit

        So I think this should work:

        if self.p.exectype == 'Close':
          self.broker.setcommission(0.009)
        else: // can be Market, Limit, Stop, or StopLimit
          self.broker.setcommission(0.0045)
        
        1 Reply Last reply Reply Quote 0
        • A
          anas laamrani 0 last edited by

          @balibou thank you for your reply, I think exectype == 'Close' refers to the "close price" rather than close operation.
          I've made a simple solution:

          commissions = []
          
          class CommInfo_My(bt.CommInfoBase):
              global commissions
          
              def _getcommission(self, size, price, pseudoexec):
                  if commissions:
                      comm = commissions[0] * size * price
          
                  if not pseudoexec:
                      commissions.pop(0)
          
                  return comm
          
          def next(self):
              if condition1:
                  commissions.append(0.0045)
                  self.buy()
              elif condition2:
                  commissions.append(0.009)
                  self.close()
          
          cerebro.broker.addcommissioninfo(strategyDraft.CommInfo_My())
          
          Jaylon Nichols 1 Reply Last reply Reply Quote 1
          • Jaylon Nichols
            Jaylon Nichols @anas laamrani 0 last edited by

            @anas-laamrani-0Thanks for code:) Also how would I add leverage to this commotion scheme?
            PS. I am trying to simulate margin trading on BTC/USD in Phemex.

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