@backtrader Actually I have a problem running this, following the solution in the blog post that you wrote. 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] = 0now 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?