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/

    A Dynamic Indicator

    Blog
    5
    7
    2246
    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.
    • B
      backtrader administrators last edited by

      Use the link below to go the original post

      Click here to see the full blog post

      1 Reply Last reply Reply Quote 2
      • K
        kazi last edited by

        Great stuff! Would someone be interested in coding the Mcginley dynamic indicator?

        http://www.tradeforextrading.com/index.php/mcginley-dynamic-indicator

        1 Reply Last reply Reply Quote 0
        • K
          kazi last edited by

          I also came across this one: https://www.investopedia.com/terms/d/dynamicmomentumindex.asp

          1 Reply Last reply Reply Quote 0
          • B
            Benoît Zuber last edited by

            Actually I have a problem running this. I am not sure if I am missing something but it seems that the indicator is computed all at once during strategy initialization. This is a problem since the indicator should be influenced by trades, which are computed later. This is my indicator code:
            '''
            class DynamicHighest(bt.Indicator):
            """indicates the highest high since a trade was open."""
            lines = ('dyn_highest',)

            def __init__(self):
                self._tradeopen = False
                self.addminperdiod = 2
            
            def tradeopen(self, isopen):
                self._tradeopen = isopen
                print("tradeopen {isopen}".format(isopen=isopen))
            
            def next(self):
                if self._tradeopen:
                    print("trade is open")
                    self.lines.dyn_highest[0] = max(self.data[0].high, self.dyn_highest[-1])
                else:
                    print("trade is close")
                    self.lines.dyn_highest[0] = 0 
            

            '''
            now when I run cerebro I get this output:
            trade is close
            trade is close
            trade is close
            .
            .
            .
            trade is close
            trade is close
            trade is close
            trade is close
            trade is close
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.13
            BUY
            tradeopen True
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.15
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.19
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.17
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.19
            dyn_highest: 0.00 | stoplimit: -0.03 | close: 0.20
            dyn_highest: 0.00 | stoplimit: -0.04 | close: 0.19
            dyn_highest: 0.00 | stoplimit: -0.04 | close: 0.20
            dyn_highest: 0.00 | stoplimit: -0.04 | close: 0.19
            dyn_highest: 0.00 | stoplimit: -0.04 | close: 0.19
            dyn_highest: 0.00 | stoplimit: -0.04 | close: 0.23

            So as we see dyn_highest stays 0 the whole time.
            Is there a way to prevent precalculation of the indicator?

            1 Reply Last reply Reply Quote 0
            • Emil Giovanni Constantinescu
              Emil Giovanni Constantinescu last edited by

              Running into the same problem as Benoit described below. Everything gets computed during the initialization of the code resulting in either full nan or 0 (depending the logic assignment you want to adopt).

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

                Benoît -- have you tried runonce=False?

                B 1 Reply Last reply Reply Quote 2
                • B
                  Benoît Zuber @bigdavediode last edited by

                  @bigdavediode Yes, that fixed the problem, thank you!

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