LongEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] <= TrueRange(Main chart)[TrueRangeShift]); ShortEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] >= TrueRange(Main chart)[TrueRangeShift]);
It makes no sense to have the opposite signal as < or > if using ATR, as ATR is never showing any market direction, only volatility. In the above case, we would enter a long trade when the volatility is low and enter short went the volatility is high - this makes no sense. The long entry rule should be identical to the short entry rule in the above case, even if SQX will then most likely not use it indeed (which would make sense though). In any case, it makes no sense to use the ATR in this way to create a symmetric long/short rule and this should be fixed.
Thanks.
Sure, with the OppositeBlocks.csv it´s possible, but it creates other issues, as the OppositeBlocks.csv is not correctly working for other indicators like HighestInRange and LowestInRange. Regardless what you put there, the HighestInRange is always also HighestInRange when SQX generates and the OppositeBlocks.csv is active. Reported here: https://roadmap.strategyquant.com/tasks/sq4_8574
These rules should be correctly defined out of the box and we should not be forced to use such a "dirty hack" to give it the correct opposite signal. Having ATRrising as the opposite of ATRfalling as the opposite for long/short entry signals, makes absolutely no sense to begin with and should be fixed in their java code, not by having us correct it in the OppositeBlocks.csv.
LongEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] <= TrueRange(Main chart)[TrueRangeShift]); ShortEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] <= TrueRange(Main chart)[TrueRangeShift]);
And obviously, that will fire longs and shorts simultaneously which is not allowed by default and instead will fire longs only unless using a template to either make it fire both or neither.
And if you don't want that either then I guess turning off ATR in the block selection is the only current solution. I mean, as SQX stands today, we won't get symmetrical strats for something like ATR>RSI either. For "ATR>RSI" the opposite is neither "ATR<RSI" nor "ATR>RSI." So it's not super easy to fix symmetry issues involving non-directional indicators outside of the predefined conditions. Although it is possible, the ending solution would be:
ATR>RSI
ATR>100-RSI
for more info about symmetry outside of predefined signals:
https://roadmap.strategyquant.com/tasks/sq4_8659/edit
I don´t really agree with that. It can very well use them in combination (and that´s, by the way, how it works in the other platform which I am using) for example:
LongEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] <= TrueRange(Main chart)[TrueRangeShift]) && Indicator1 > 50; ShortEntrySignal = (ATR(Main chart,ATRPeriod)[ATRShift] <= TrueRange(Main chart)[TrueRangeShift]) && Indicator1 < 50;
in this way, it would work as a volatility filter in addition to a directional indicator. Hence I still say that generating rules like posted in my initial post makes no sense for non-directional indicators like the ATR.
When two non-directional indicators are compared to each other, the comparator need not change for the opposite logic.
I don´t agree with that for the same reason as the multi-condition example I gave above. Non-directional indicators, when compared, should never have the opposite logic, as this is not really the opposite. They can be used in combination with another directional indicator like in my example above while having the same logic for short + long. And that´s the kind of strategies SQX should come up with in such cases (and so does the other platform since years).