Question regarding Fractal Indicator

Hi,
I have some experience w python but Im fairly new to bt.
Im currently codeing up a simply dummy strategy with the fractal indicator. The logic is simple:
Buy if the current bullish_fractal is higher than the last bullish_fractal.class Rotation_Strategy(bt.Strategy):
# ## added in loggin fuction as it helpful in bug fixing # def log(self, txt, dt=None): # dt = self.datas[0].datetime.date(0) # print('%s, %s' % (dt.isoformat(), txt)) def __init__(self): self.dclose = self.datas[0].close self.high = self.datas[0].high self.open = self.datas[0].open self.low = self.datas[0].low self.fractal = Fractal(self.data, period=5, bardist=0.01) def notify_order(self, order): if order.status in [order.Completed]: self.bar_executed = len(self) ### record entry price for logging purposes if order.isbuy(): self.bar_entry = order.executed.price def next(self): if not self.position: if self.fractal.fractal_bullish[0] > self.fractal.fractal_bullish[1]: self.buy(size=1) else: if len(self) >= (self.bar_executed + 3): self.close()
However, when I run this logic, it takes the LAST BAR (regardless of whether it has a bullish_fractal or not)  But
I want it to take the value of the last bullish fractal. Hope that made sense.Thx!

@aarzt93 said in Question regarding Fractal Indicator:
However, when I run this logic, it takes the LAST BAR (regardless of whether it has a bullish_fractal or not)  But
I want it to take the value of the last bullish fractal. Hope that made sense.Sorry, but at least here it doesn't make any sense.
Additionally, if you want to post code (or output) please see the top of the forum
For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

Thx for reply and sorry about the code thing. Let me rephrase that question:
I want to buy if the current bullish fractal is higher than the last bullish fractal.
With the code that I posted, it simply looks at the last bar and checks if I there
has been a bullish fractal at the last bar  and since thats never the case, because
the fractal indicator has period 5, it doesnt give me any signals.Hope that makes sense now.
Thank you

I believe you are mistaken into what the
Fractal
study does. It shows you things that have happened in the past ... and it actually logs them in the past.You are never going to get a realtime signal to buy/sell with
Fractal
, and that's why it is called aStudy
and categorized as one in the sources.From the reference quoted in the documentation for
Fractal
The obvious drawback here is that fractals are lagging indicators. A fractal can't be drawn until we are two days into the reversal
You need to look the appropriate (periodwise) number of bars in the past to understand in the study identified a turning point in the past. If you then believe the trend is going to continue, you can enter.

Quote from Investopedia: "The obvious drawback here is that fractals are lagging indicators. A fractal can't be drawn until we are two days into the reversal."
I get that part about the past.
Here is the simple idea:
If the market made a bullish fractal  call it "low 2" on day 0, which I know earliest 2 bars (days) later (given I use a 5 bar fractal) and this bullish fractal is higher than the last bullish fractal BEFORE  call that one "low 1" so a higher low so to speak. Now I want to after enter long on day 3, so 2 days after low 2 (because it doesnt reveal itself any earlier).The problem (at least for me) again:
How do I access the last bullish fractal (low 1) in my buying logic? This:self.fractal.fractal_bearish[1]
gives me somehow just the last bar and not low 1
I initally thought that
if self.fractal.fractal_bearish[0] > self.fractal.fractal_bearish[1]: self.buy(size=1)
would do the job, but it doesnt.
I hope that this made sense.

@aarzt93 said in Question regarding Fractal Indicator:
How do I access the last bullish fractal (low 1) in my buying logic? This:
self.fractal.fractal_bearish[1]gives me somehow just the last bar and not low 1
Yes, index
1
will always give you the last value (aka last bar), which is right before the current one, which is at index0
. This is so for all indicators and lines.@aarzt93 said in Question regarding Fractal Indicator:
I initally thought that
if self.fractal.fractal_bearish[0] > self.fractal.fractal_bearish[1]: self.buy(size=1)
would do the job, but it doesnt.
You haven't then got this.
@aarzt93 said in Question regarding Fractal Indicator:
Quote from Investopedia: "The obvious drawback here is that fractals are lagging indicators. A fractal can't be drawn until we are two days into the reversal."
I get that part about the past.Depending on the period you use, the last
bullish
,bearish
indication, will be at leastx
periods in the past. For the default period of5
this will will[2]
.Comparing if the value is greater than or less than makes no sense, because you are looking for an indication at a given point in time (when the study marks that a swing happened) and not for a value which is greater than or less than. Any value which is not an indication will be a
NaN
because there is nothing there.

@backtrader
okay, so is there a way to store all the bearish/bullish fractals in a container (dict/array) and have them printed out, so that I can gather some statistics on them ?

@backtrader
I have done the following:
I created an empty container in the constructor of the strategy.self.__special_array_for_later = []
Then I wanted to fill it up with the bearish fractals (highs) when iterating over the bars:
if self.fractal.fractal_bearish: self.__special_array_for_later.append(self.high[2])
But when I print it out later it gives me all the high prices instead of only those highs that were marked with
a bearish fractal.

@aarzt93 said in Question regarding Fractal Indicator:
But when I print it out later it gives me all the high prices instead of only those highs that were marked with
a bearish fractal.@aarzt93 said in Question regarding Fractal Indicator:
if self.fractal.fractal_bearish: self.__special_array_for_later.append(self.high[2])
@backtrader said in Question regarding Fractal Indicator:
Any value which is not an indication will be a NaN because there is nothing there.
It was clearly stated that values which are not marked as fractal are
NaN
, so you should be specifically looking to skipNaN
values. In any case the logic is flawed, because the mark for a fractal doesn't happen now, it happens two periods in the past, exactly as thehigh
you want to store.@aarzt93 said in Question regarding Fractal Indicator:
okay, so is there a way to store all the bearish/bullish fractals in a container (dict/array) and have them printed out, so that I can gather some statistics on them ?
They are already stored in the indicator itself, which is a line. You probably want to read the documentation here: Docs  Platform Concepts and look for Slicing