[SQX129RC1] Snippet signal opposite blocks are incorrect?

Hello,

High percentage of opposite blocks snippets definition are incorrect!

I've manually checked around 10 before i stopped and 8 were incorrect..

Could you please review the code and fix these.. It's a critical bug in any sense.

For illustration: Almost all ADX definitions are incorrect.

@BuildingBlock(name="ADX changes direction downwards", display="ADX(#Period#) changes direction downwards", returnType = ReturnTypes.Boolean)
@Help("Is triggered if ADX changes direction downwards")
@OppositeBlock("ADXChangesDown") -> UP?
@BuildingBlock(name="ADX changes direction upwards", display="ADX(#Period#) changes direction upwards", returnType = ReturnTypes.Boolean)
@Help("Is triggered if ADX changes direction upwards")
@OppositeBlock("ADXChangesUp") -> Down ?

etc, etc..

ATR are wrong too, did not check any more..

(Addendum) It might be intentional and it might be correct for ADX and ATR this way. Anyway I will leave bug request for reference in case it makes some sense.

Thank you,

Enyx
Attachments
No attachments
  • Votes 0
  • Project StrategyQuant X
  • Type Bug
  • Status Refused
  • Priority Normal

History

DB
#1

Enyx

31.07.2020 14:05

Task created

DB
#2

Enyx

31.07.2020 14:23

overview: errors are easily visible



find . -name *.java | xargs grep '@Opposite' ./Comparisons/IsLower.java:@OppositeBlock("IsGreater") ./Comparisons/NotEquals.java:@OppositeBlock("Equals") ./Comparisons/IsRising.java:@OppositeBlock("IsFalling") ./Comparisons/IsLowerOrEqual.java:@OppositeBlock("IsGreaterOrEqual") ./Comparisons/Not.java:@OppositeBlock("Not") ./Comparisons/IsGreaterOrEqual.java:@OppositeBlock("IsLowerOrEqual") ./Comparisons/CrossesBelow.java:@OppositeBlock("CrossesAbove") ./Comparisons/IsGreater.java:@OppositeBlock("IsLower") ./Comparisons/Equals.java:@OppositeBlock("NotEquals") ./Comparisons/IsFalling.java:@OppositeBlock("IsRising") ./Comparisons/CrossesAbove.java:@OppositeBlock("CrossesBelow") ./Indicators/BollingerBands/BBBarClosesAboveDown.java:@OppositeBlock("BBBarClosesBelowUp") ./Indicators/BollingerBands/BBLowerRising.java:@OppositeBlock("BBUpperFalling") ./Indicators/BollingerBands/BBBarOpensBelowUpAfterOpenAbove.java:@OppositeBlock("BBBarOpensAboveDownAfterOpenBelow") ./Indicators/BollingerBands/BBBarOpensBelowDown.java:@OppositeBlock("BBBarOpensAboveUp") ./Indicators/BollingerBands/BBLowerFalling.java:@OppositeBlock("BBUpperRising") ./Indicators/BollingerBands/BBBarClosesBelowUp.java:@OppositeBlock("BBBarClosesAboveDown") ./Indicators/BollingerBands/BBBarOpensAboveDownAfterOpenBelow.java:@OppositeBlock("BBBarOpensBelowUpAfterOpenAbove") ./Indicators/BollingerBands/BBBarOpensAboveUpAfterOpenBelow.java:@OppositeBlock("BBBarOpensBelowDownAfterOpenAbove") ./Indicators/BollingerBands/BBUpperRising.java:@OppositeBlock("BBLowerFalling") ./Indicators/BollingerBands/BBBarOpensBelowUp.java:@OppositeBlock("BBBarOpensAboveDown") ./Indicators/BollingerBands/BBUpperFalling.java:@OppositeBlock("BBLowerRising") ./Indicators/BollingerBands/BBBarClosesBelowDown.java:@OppositeBlock("BBBarClosesAboveUp") ./Indicators/BollingerBands/BBBarOpensBelowDownAfterOpenAbove.java:@OppositeBlock("BBBarOpensAboveUpAfterOpenBelow") ./Indicators/BollingerBands/BBBarClosesAboveUp.java:@OppositeBlock("BBBarClosesBelowDown") ./Indicators/BollingerBands/BBBarOpensAboveUp.java:@OppositeBlock("BBBarOpensBelowDown") ./Indicators/BollingerBands/BBBarOpensAboveDown.java:@OppositeBlock("BBBarOpensBelowUp") ./Indicators/Fractal/IsBullishFractal.java:@OppositeBlock("IsBearishFractal") ./Indicators/Fractal/IsBearishFractal.java:@OppositeBlock("IsBullishFractal") ./Indicators/StdDev/StdDevCrossDown.java:@OppositeBlock("StdDevCrossDown") ./Indicators/StdDev/StdDevChangesUp.java:@OppositeBlock("StdDevChangesUp") ./Indicators/StdDev/StdDevCrossUp.java:@OppositeBlock("StdDevCrossUp") ./Indicators/StdDev/StdDevHigher.java:@OppositeBlock("StdDevHigher") ./Indicators/StdDev/StdDevFalling.java:@OppositeBlock("StdDevFalling") ./Indicators/StdDev/StdDevRising.java:@OppositeBlock("StdDevRising") ./Indicators/StdDev/StdDevLower.java:@OppositeBlock("StdDevLower") ./Indicators/StdDev/StdDevChangesDown.java:@OppositeBlock("StdDevChangesDown") ./Indicators/Aroon/AroonRiseFromBottom.java:@OppositeBlock("AroonFallFromTop") ./Indicators/Aroon/AroonCrossesAbove.java:@OppositeBlock("AroonCrossesBelow") ./Indicators/Aroon/AroonCrossesBelow.java:@OppositeBlock("AroonCrossesAbove") ./Indicators/Aroon/AroonFallFromTop.java:@OppositeBlock("AroonRiseFromBottom") ./Indicators/CCI/CCICrossDown.java:@OppositeBlock(value="CCICrossUp", oscillator=true, middleValue=0, field="Level") ./Indicators/CCI/CCIChangesDown.java:@OppositeBlock("CCIChangesUp") ./Indicators/CCI/CCILower.java:@OppositeBlock(value="CCIHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/CCI/CCIHigher.java:@OppositeBlock(value="CCILower", oscillator=true, middleValue=0, field="Level") ./Indicators/CCI/CCIChangesUp.java:@OppositeBlock("CCIChangesDown") ./Indicators/CCI/CCICrossUp.java:@OppositeBlock(value="CCICrossDown", oscillator=true, middleValue=0, field="Level") ./Indicators/CCI/CCIRising.java:@OppositeBlock("CCIFalling") ./Indicators/CCI/CCIFalling.java:@OppositeBlock("CCIRising") ./Indicators/LinReg/LinRegBarClosesAbove.java:@OppositeBlock("LinRegBarClosesBelow") ./Indicators/LinReg/LinRegRising.java:@OppositeBlock("LinRegFalling") ./Indicators/LinReg/LinRegBarOpensBelow.java:@OppositeBlock("LinRegBarOpensAbove") ./Indicators/LinReg/LinRegFalling.java:@OppositeBlock("LinRegRising") ./Indicators/LinReg/LinRegBarOpensAboveAfterOpenBelow.java:@OppositeBlock("LinRegBarOpensBelowAfterOpenAbove") ./Indicators/LinReg/LinRegBarClosesBelow.java:@OppositeBlock("LinRegBarClosesAbove") ./Indicators/LinReg/LinRegBarOpensAbove.java:@OppositeBlock("LinRegBarOpensBelow") ./Indicators/LinReg/LinRegBarOpensBelowAfterOpenAbove.java:@OppositeBlock("LinRegBarOpensAboveAfterOpenBelow") ./Indicators/ADX/ADXLower.java:@OppositeBlock(value="ADXLower", middleValue=50, field="Level") ./Indicators/ADX/ADXChangesUp.java:@OppositeBlock("ADXChangesUp") ./Indicators/ADX/ADXFalling.java:@OppositeBlock("ADXFalling") ./Indicators/ADX/ADXCrossUp.java:@OppositeBlock(value="ADXCrossUp", middleValue=50, field="Level") ./Indicators/ADX/ADXChangesDown.java:@OppositeBlock("ADXChangesDown") ./Indicators/ADX/ADXHigher.java:@OppositeBlock(value="ADXHigher", middleValue=50, field="Level") ./Indicators/ADX/ADXCrossDown.java:@OppositeBlock(value="ADXCrossDown", middleValue=50, field="Level") ./Indicators/ADX/ADXRising.java:@OppositeBlock("ADXRising") ./Indicators/Momentum/MomChangesDown.java:@OppositeBlock("MomChangesDown") ./Indicators/Momentum/MomRising.java:@OppositeBlock("MomRising") ./Indicators/Momentum/MomHigher.java:@OppositeBlock(value="MomHigher", oscillator=true, middleValue=100, field="Level") ./Indicators/Momentum/MomChangesUp.java:@OppositeBlock("MomChangesUp") ./Indicators/Momentum/MomFalling.java:@OppositeBlock("MomFalling") ./Indicators/Momentum/MomLower.java:@OppositeBlock(value="MomLower", oscillator=true, middleValue=100, field="Level") ./Indicators/Momentum/MomCrossDown.java:@OppositeBlock(value="MomCrossDown", oscillator=true, middleValue=100, field="Level") ./Indicators/Momentum/MomCrossUp.java:@OppositeBlock(value="MomCrossUp", oscillator=true, middleValue=100, field="Level") ./Indicators/BullsPower/BUPChangesDown.java:@OppositeBlock("BEPChangesUp") ./Indicators/BullsPower/BUPLower.java:@OppositeBlock(value="BEPHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/BullsPower/BUPFalling.java:@OppositeBlock("BEPRising") ./Indicators/BullsPower/BUPRising.java:@OppositeBlock("BEPFalling") ./Indicators/BullsPower/BUPHigher.java:@OppositeBlock(value="BEPLower", oscillator=true, middleValue=0, field="Level") ./Indicators/BullsPower/BUPCrossUp.java:@OppositeBlock(value="BEPCrossDown", oscillator=true, middleValue=0, field="Level") ./Indicators/BullsPower/BUPCrossDown.java:@OppositeBlock(value="BEPCrossUp", oscillator=true, middleValue=0, field="Level") ./Indicators/BullsPower/BUPChangesUp.java:@OppositeBlock("BEPChangesDown") ./Indicators/BullsPower/BullsPower.java:@OppositeBlock("BearsPower") ./Indicators/Stochastic/StochSlowDHigher.java:@OppositeBlock(value="StochSlowDLower", oscillator=true, middleValue=50, field="Level") ./Indicators/Stochastic/StochFastKCrossDown.java:@OppositeBlock(value="StochFastKCrossUp", oscillator=true, middleValue=50, field="Level") ./Indicators/Stochastic/StochFastKDown.java:@OppositeBlock("StochFastKUp") ./Indicators/Stochastic/StochSlowDCrossUp.java:@OppositeBlock(value="StochSlowDCrossDown", oscillator=true, middleValue=50, field="Level") ./Indicators/Stochastic/StochSlowDLower.java:@OppositeBlock(value="StochSlowDHigher", oscillator=true, middleValue=50, field="Level") ./Indicators/Stochastic/StochSlowDRising.java:@OppositeBlock("StochSlowDFalling") ./Indicators/Stochastic/StochFastKUp.java:@OppositeBlock("StochFastKDown") ./Indicators/Stochastic/StochFastKCrossUp.java:@OppositeBlock(value="StochFastKCrossDown", oscillator=true, middleValue=50, field="Level") ./Indicators/Stochastic/StochSlowDChangesDown.java:@OppositeBlock("StochSlowDChangesUp") ./Indicators/Stochastic/StochSlowDFalling.java:@OppositeBlock("StochSlowDRising") ./Indicators/Stochastic/StochSlowDChangesUp.java:@OppositeBlock("StochSlowDChangesDown") ./Indicators/Stochastic/StochSlowDCrossDown.java:@OppositeBlock(value="StochSlowDCrossUp", oscillator=true, middleValue=50, field="Level") ./Indicators/QQE/QQEValue2Rising.java:@OppositeBlock("QQEValue2Falling") ./Indicators/QQE/QQEValue1CrossBelow.java:@OppositeBlock(value="QQEValue1CrossAbove", oscillator=true, middleValue=50, field="Level") ./Indicators/QQE/QQEValue1CrossAbove.java:@OppositeBlock(value="QQEValue1CrossBelow", oscillator=true, middleValue=50, field="Level") ./Indicators/QQE/QQEValue1CrossBelowValue2.java:@OppositeBlock("QQEValue1CrossAboveValue2") ./Indicators/QQE/QQEValue1ChangesUp.java:@OppositeBlock("QQEValue1ChangesDown") ./Indicators/QQE/QQEValue1LowerValue2.java:@OppositeBlock("QQEValue1HigherValue2") ./Indicators/QQE/QQEValue2Falling.java:@OppositeBlock("QQEValue2Rising") ./Indicators/QQE/QQEValue1ChangesDown.java:@OppositeBlock("QQEValue1ChangesUp") ./Indicators/QQE/QQEValue1Falling.java:@OppositeBlock("QQEValue1Rising") ./Indicators/QQE/QQEValue1Lower.java:@OppositeBlock(value="QQEValue1Higher", oscillator=true, middleValue=50, field="Level") ./Indicators/QQE/QQEValue1HigherValue2.java:@OppositeBlock("QQEValue1LowerValue2") ./Indicators/QQE/QQEValue1Rising.java:@OppositeBlock("QQEValue1Falling") ./Indicators/QQE/QQEValue1CrossAboveValue2.java:@OppositeBlock("QQEValue1CrossBelowValue2") ./Indicators/QQE/QQEValue1Higher.java:@OppositeBlock(value="QQEValue1Lower", oscillator=true, middleValue=50, field="Level") ./Indicators/RSI/RSIRising.java:@OppositeBlock("RSIFalling") ./Indicators/RSI/RSIHigher.java:@OppositeBlock(value="RSILower", oscillator=true, middleValue=50, field="Level") ./Indicators/RSI/RSICrossUp.java:@OppositeBlock(value="RSICrossDown", oscillator=true, middleValue=50, field="Level") ./Indicators/RSI/RSIChangesUp.java:@OppositeBlock("RSIChangesDown") ./Indicators/RSI/RSIFalling.java:@OppositeBlock("RSIRising") ./Indicators/RSI/RSIChangesDown.java:@OppositeBlock("RSIChangesUp") ./Indicators/RSI/RSILower.java:@OppositeBlock(value="RSIHigher", oscillator=true, middleValue=50, field="Level") ./Indicators/RSI/RSICrossDown.java:@OppositeBlock(value="RSICrossUp", oscillator=true, middleValue=50, field="Level") ./Indicators/Ichimoku/IchimokuSenkouSpanCrossBearish.java:@OppositeBlock("IchimokuSenkouSpanCrossBullish") ./Indicators/Ichimoku/IchimokuSenkouSpanCrossBullish.java:@OppositeBlock("IchimokuSenkouSpanCrossBearish") ./Indicators/Ichimoku/IchimokuKijunSenCrossBearish.java:@OppositeBlock("IchimokuKijunSenCrossBullish") ./Indicators/Ichimoku/IchimokuTenkanKijunCrossBullish.java:@OppositeBlock("IchimokuTenkanKijunCrossBearish") ./Indicators/Ichimoku/IchimokuKumoBreakoutBearish.java:@OppositeBlock("IchimokuKumoBreakoutBullish") ./Indicators/Ichimoku/IchimokuKumoBreakoutBullish.java:@OppositeBlock("IchimokuKumoBreakoutBearish") ./Indicators/Ichimoku/IchimokuTenkanKijunCrossBearish.java:@OppositeBlock("IchimokuTenkanKijunCrossBullish") ./Indicators/Ichimoku/IchimokuKijunSenCrossBullish.java:@OppositeBlock("IchimokuKijunSenCrossBearish") ./Indicators/OSMA/OSMACrossZeroDown.java:@OppositeBlock("OSMACrossZeroUp") ./Indicators/OSMA/OSMAFalling.java:@OppositeBlock("OSMARising") ./Indicators/OSMA/OSMACrossZeroUp.java:@OppositeBlock("OSMACrossZeroDown") ./Indicators/OSMA/OSMAChangesUp.java:@OppositeBlock("OSMAChangesDown") ./Indicators/OSMA/OSMARising.java:@OppositeBlock("OSMAFalling") ./Indicators/OSMA/OSMAHigherZero.java:@OppositeBlock("OSMALowerZero") ./Indicators/OSMA/OSMAChangesDown.java:@OppositeBlock("OSMAChangesUp") ./Indicators/OSMA/OSMALowerZero.java:@OppositeBlock("OSMAHigherZero") ./Indicators/MovingAverage/MABarOpensAboveAfterOpenBelow.java:@OppositeBlock("MABarOpensBelowAfterOpenAbove") ./Indicators/MovingAverage/MARising.java:@OppositeBlock("MAFalling") ./Indicators/MovingAverage/MABarClosesAbove.java:@OppositeBlock("MABarClosesBelow") ./Indicators/MovingAverage/MABarOpensBelowAfterOpenAbove.java:@OppositeBlock("MABarOpensAboveAfterOpenBelow") ./Indicators/MovingAverage/MABarOpensBelow.java:@OppositeBlock("MABarOpensAbove") ./Indicators/MovingAverage/MABarClosesBelow.java:@OppositeBlock("MABarClosesAbove") ./Indicators/MovingAverage/MAFalling.java:@OppositeBlock("MARising") ./Indicators/MovingAverage/MABarOpensAbove.java:@OppositeBlock("MABarOpensBelow") ./Indicators/AwesomeOscillator/AWOHigher.java:@OppositeBlock(value="AWOLower", oscillator=true, middleValue=0, field="Level") ./Indicators/AwesomeOscillator/AWOChangesDown.java:@OppositeBlock("AWOChangesUp") ./Indicators/AwesomeOscillator/AWOCrossUp.java:@OppositeBlock(value="AWOCrossDown", oscillator=true, middleValue=0, field="Level") ./Indicators/AwesomeOscillator/AWOFalling.java:@OppositeBlock("AWORising") ./Indicators/AwesomeOscillator/AWOLower.java:@OppositeBlock(value="AWOHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/AwesomeOscillator/AWOChangesUp.java:@OppositeBlock("AWOChangesDown") ./Indicators/AwesomeOscillator/AWORising.java:@OppositeBlock("AWOFalling") ./Indicators/AwesomeOscillator/AWOCrossDown.java:@OppositeBlock(value="AWOCrossUp", oscillator=true, middleValue=0, field="Level") ./Indicators/ATR/ATRChangesUp.java:@OppositeBlock("ATRChangesUp") ./Indicators/ATR/ATRHigher.java:@OppositeBlock("ATRHigher") ./Indicators/ATR/ATRCrossDown.java:@OppositeBlock("ATRCrossDown") ./Indicators/ATR/ATRCrossUp.java:@OppositeBlock("ATRCrossUp") ./Indicators/ATR/ATRChangesDown.java:@OppositeBlock("ATRChangesDown") ./Indicators/ATR/ATRRising.java:@OppositeBlock("ATRRising") ./Indicators/ATR/ATRLower.java:@OppositeBlock("ATRLower") ./Indicators/ATR/ATRFalling.java:@OppositeBlock("ATRFalling") ./Indicators/MACD/MACDMainLowerZero.java:@OppositeBlock("MACDMainHigherZero") ./Indicators/MACD/MACDMainFalling.java:@OppositeBlock("MACDMainRising") ./Indicators/MACD/MACDMainCrossAboveZero.java:@OppositeBlock("MACDMainCrossBelowZero") ./Indicators/MACD/MACDMainChangesUp.java:@OppositeBlock("MACDMainChangesDown") ./Indicators/MACD/MACDMainLowerSignal.java:@OppositeBlock("MACDMainHigherSignal") ./Indicators/MACD/MACDMainCrossBelowZero.java:@OppositeBlock("MACDMainCrossAboveZero") ./Indicators/MACD/MACDMainChangesDown.java:@OppositeBlock("MACDMainChangesUp") ./Indicators/MACD/MACDSignalFalling.java:@OppositeBlock("MACDSignalRising") ./Indicators/MACD/MACDMainCrossAboveSignal.java:@OppositeBlock("MACDMainCrossBelowSignal") ./Indicators/MACD/MACDMainHigher.java:@OppositeBlock(value="MACDMainLower", oscillator=true, middleValue=0, field="Level") ./Indicators/MACD/MACDMainHigherSignal.java:@OppositeBlock("MACDMainLowerSignal") ./Indicators/MACD/MACDMainCrossBelow.java:@OppositeBlock(value="MACDMainCrossAbove", oscillator=true, middleValue=0, field="Level") ./Indicators/MACD/MACDMainCrossBelowSignal.java:@OppositeBlock("MACDMainCrossAboveSignal") ./Indicators/MACD/MACDMainCrossAbove.java:@OppositeBlock(value="MACDMainCrossBelow", oscillator=true, middleValue=0, field="Level") ./Indicators/MACD/MACDMainLower.java:@OppositeBlock(value="MACDMainHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/MACD/MACDMainRising.java:@OppositeBlock("MACDMainFalling") ./Indicators/MACD/MACDSignalRising.java:@OppositeBlock("MACDSignalFalling") ./Indicators/MACD/MACDMainHigherZero.java:@OppositeBlock("MACDMainLowerZero") ./Indicators/AvgVolume/VolumeRising.java:@OppositeBlock("VolumeRising") ./Indicators/AvgVolume/VolumeFalling.java:@OppositeBlock("VolumeFalling") ./Indicators/AvgVolume/AvgVolumeFalling.java:@OppositeBlock("AvgVolumeFalling") ./Indicators/AvgVolume/AvgVolumeRising.java:@OppositeBlock("AvgVolumeRising") ./Indicators/WilliamsPR/WPRFalling.java:@OppositeBlock("WPRRising") ./Indicators/WilliamsPR/WPRCrossDown.java:@OppositeBlock(value="WPRCrossUp", oscillator=true, middleValue=-50, field="Level") ./Indicators/WilliamsPR/WPRChangesUp.java:@OppositeBlock("WPRChangesDown") ./Indicators/WilliamsPR/WPRCrossUp.java:@OppositeBlock(value="WPRCrossDown", oscillator=true, middleValue=-50, field="Level") ./Indicators/WilliamsPR/WPRHigher.java:@OppositeBlock(value="WPRLower", oscillator=true, middleValue=-50, field="Level") ./Indicators/WilliamsPR/WPRChangesDown.java:@OppositeBlock("WPRChangesUp") ./Indicators/WilliamsPR/WPRLower.java:@OppositeBlock(value="WPRHigher", oscillator=true, middleValue=-50, field="Level") ./Indicators/WilliamsPR/WPRRising.java:@OppositeBlock("WPRFalling") ./Indicators/BearsPower/BEPCrossDown.java:@OppositeBlock(value="BUPCrossUp", oscillator=true, middleValue=0, field="Level") ./Indicators/BearsPower/BEPChangesUp.java:@OppositeBlock("BUPChangesDown") ./Indicators/BearsPower/BEPFalling.java:@OppositeBlock("BUPRising") ./Indicators/BearsPower/BEPRising.java:@OppositeBlock("BUPFalling") ./Indicators/BearsPower/BEPHigher.java:@OppositeBlock(value="BUPLower", oscillator=true, middleValue=0, field="Level") ./Indicators/BearsPower/BEPCrossUp.java:@OppositeBlock(value="BUPCrossDown", oscillator=true, middleValue=0, field="Level") ./Indicators/BearsPower/BEPLower.java:@OppositeBlock(value="BUPHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/BearsPower/BearsPower.java:@OppositeBlock("BullsPower") ./Indicators/BearsPower/BEPChangesDown.java:@OppositeBlock("BUPChangesUp") ./Indicators/Trend/IsDowntrend.java:@OppositeBlock("IsUptrend") ./Indicators/Trend/IsUptrend.java:@OppositeBlock("IsDowntrend") ./Indicators/ParabolicSAR/PSARBarHigher.java:@OppositeBlock("PSARBarLower") ./Indicators/ParabolicSAR/PSARBarLower.java:@OppositeBlock("PSARBarHigher") ./Indicators/DeMarker/DEMLower.java:@OppositeBlock(value="DEMHigher", oscillator=true, middleValue=0, field="Level") ./Indicators/DeMarker/DEMHigher.java:@OppositeBlock(value="DEMLower", oscillator=true, middleValue=0, field="Level") ./Indicators/DeMarker/DEMFalling.java:@OppositeBlock("DEMRising") ./Indicators/DeMarker/DEMRising.java:@OppositeBlock("DEMFalling") ./Indicators/DeMarker/DEMCrossDown.java:@OppositeBlock(value="DEMCrossUp", oscillator=true, middleValue=0, field="Level") ./Indicators/DeMarker/DEMChangesUp.java:@OppositeBlock("DEMChangesDown") ./Indicators/DeMarker/DEMCrossUp.java:@OppositeBlock(value="DEMCrossDown", oscillator=true, middleValue=0, field="Level") ./Indicators/DeMarker/DEMChangesDown.java:@OppositeBlock("DEMChangesUp") ./Indicators/DirectionalIndex/DICrossUp.java:@OppositeBlock("DICrossDown") ./Indicators/DirectionalIndex/DIPlusRising.java:@OppositeBlock("DIMinusRising") ./Indicators/DirectionalIndex/DIPlusLower.java:@OppositeBlock("DIPlusHigher") ./Indicators/DirectionalIndex/DIPlusFalling.java:@OppositeBlock("DIMinusFalling") ./Indicators/DirectionalIndex/DIMinusChangesDown.java:@OppositeBlock("DIPlusChangesDown") ./Indicators/DirectionalIndex/DIPlusChangesUp.java:@OppositeBlock("DIMinusChangesUp") ./Indicators/DirectionalIndex/DICrossDown.java:@OppositeBlock("DICrossUp") ./Indicators/DirectionalIndex/DIMinusRising.java:@OppositeBlock("DIPlusRising") ./Indicators/DirectionalIndex/DIPlusHigher.java:@OppositeBlock("DIPlusLower") ./Indicators/DirectionalIndex/DIPlusChangesDown.java:@OppositeBlock("DIMinusChangesDown") ./Indicators/DirectionalIndex/DIMinusChangesUp.java:@OppositeBlock("DIPlusChangesUp") ./Indicators/DirectionalIndex/DIMinusFalling.java:@OppositeBlock("DIPlusFalling") ./Indicators/KeltnerChannel/KCUpperFalling.java:@OppositeBlock("KCLowerRising") ./Indicators/KeltnerChannel/KCBarOpensAboveUpperAfterOpenBelow.java:@OppositeBlock("KCBarOpensBelowLowerAfterOpenAbove") ./Indicators/KeltnerChannel/KCBarClosesBelowUpper.java:@OppositeBlock("KCBarClosesAboveLower") ./Indicators/KeltnerChannel/KCBarOpensAboveLower.java:@OppositeBlock("KCBarOpensBelowUpper") ./Indicators/KeltnerChannel/KCBarClosesBelowLower.java:@OppositeBlock("KCBarClosesAboveUpper") ./Indicators/KeltnerChannel/KCLowerFalling.java:@OppositeBlock("KCUpperRising") ./Indicators/KeltnerChannel/KCBarOpensBelowLower.java:@OppositeBlock("KCBarOpensAboveUpper") ./Indicators/KeltnerChannel/KCBarClosesAboveLower.java:@OppositeBlock("KCBarClosesBelowUpper") ./Indicators/KeltnerChannel/KCBarOpensAboveLowerAfterOpenBelow.java:@OppositeBlock("KCBarOpensBelowUpperAfterOpenAbove") ./Indicators/KeltnerChannel/KCBarOpensBelowUpperAfterOpenAbove.java:@OppositeBlock("KCBarOpensAboveLowerAfterOpenBelow") ./Indicators/KeltnerChannel/KCBarClosesAboveUpper.java:@OppositeBlock("KCBarClosesBelowLower") ./Indicators/KeltnerChannel/KCUpperRising.java:@OppositeBlock("KCLowerFalling") ./Indicators/KeltnerChannel/KCBarOpensBelowLowerAfterOpenAbove.java:@OppositeBlock("KCBarOpensAboveUpperAfterOpenBelow") ./Indicators/KeltnerChannel/KCLowerRising.java:@OppositeBlock("KCUpperFalling") ./Indicators/KeltnerChannel/KCBarOpensBelowUpper.java:@OppositeBlock("KCBarOpensAboveLower") ./Indicators/KeltnerChannel/KCBarOpensAboveUpper.java:@OppositeBlock("KCBarOpensBelowLower") ./Indicators/HighestLowest/Lowest.java:@OppositeBlock("Highest") ./Indicators/HighestLowest/BarOpensAboveHighestAfterOpenBelow.java:@OppositeBlock("BarOpensBelowLowestAfterOpenAbove") ./Indicators/HighestLowest/BarOpensBelowLowestAfterOpenAbove.java:@OppositeBlock("BarOpensAboveHighestAfterOpenBelow") ./Indicators/HighestLowest/HighestIndex.java:@OppositeBlock("HighestIndex") ./Indicators/HighestLowest/BarOpensBelowHighestAfterOpenAbove.java:@OppositeBlock("BarOpensAboveLowestAfterOpenBelow") ./Indicators/HighestLowest/LowestIndex.java:@OppositeBlock("LowestIndex") ./Indicators/HighestLowest/BarOpensAboveLowestAfterOpenBelow.java:@OppositeBlock("BarOpensBelowHighestAfterOpenAbove") ./Indicators/HighestLowest/Highest.java:@OppositeBlock("Lowest") ./CandlePatterns/DarkCloud.java:@OppositeBlock("PiercingLine") ./CandlePatterns/PiercingLine.java:@OppositeBlock("DarkCloud") ./CandlePatterns/BearishEngulfing.java:@OppositeBlock("BullishEngulfing") ./CandlePatterns/Hammer.java:@OppositeBlock("ShootingStar") ./CandlePatterns/BullishEngulfing.java:@OppositeBlock("BearishEngulfing") ./CandlePatterns/ShootingStar.java:@OppositeBlock("Hammer") ./BarAndTime/BarDayOfWeekIs.java:@OppositeBlock("BarDayOfWeekIs") ./BarAndTime/BarMonthIsNot.java:@OppositeBlock("BarMonthIsNot") ./BarAndTime/BarMonthIs.java:@OppositeBlock("BarMonthIs") ./BarAndTime/BarDayOfWeekIsNot.java:@OppositeBlock("BarDayOfWeekIsNot") ./Price/LowW.java:@OppositeBlock("HighW") ./Price/SessionOpen.java:@OppositeBlock("SessionOpen") ./Price/HighW.java:@OppositeBlock("LowW") ./Price/HeikenAshiHigh.java:@OppositeBlock("HeikenAshiLow") ./Price/Ask.java:@OppositeBlock("Bid") ./Price/High.java:@OppositeBlock("Low") ./Price/HighD.java:@OppositeBlock("LowD") ./Price/SessionHigh.java:@OppositeBlock("SessionLow") ./Price/HighM.java:@OppositeBlock("LowM") ./Price/Low.java:@OppositeBlock("High") ./Price/HeikenAshiLow.java:@OppositeBlock("HeikenAshiHigh") ./Price/Bid.java:@OppositeBlock("Ask") ./Price/LowD.java:@OppositeBlock("HighD") ./Price/SessionLow.java:@OppositeBlock("SessionHigh") ./Price/SessionClose.java:@OppositeBlock("SessionClose") ./Price/LowM.java:@OppositeBlock("HighM") ./StrategyControl/MarketPositionIsShort.java:@OppositeBlock("MarketPositionIsLong") ./StrategyControl/MarketPositionIsNotShort.java:@OppositeBlock("MarketPositionIsNotLong") ./StrategyControl/MarketPositionIsLong.java:@OppositeBlock("MarketPositionIsShort") ./StrategyControl/MarketPositionIsNotLong.java:@OppositeBlock("MarketPositionIsNotShort") ./Functions/Plus.java:@OppositeBlock("Minus") ./Functions/Minus.java:@OppositeBlock("Plus")



DB
#3

Enyx

31.07.2020 15:04

Subject changed from [SQX129RC1] Critical: Snippet signal opposite blocks are incorrect! to [SQX129RC1] Snippet signal opposite blocks are incorrect?

Description changed:

Hello,

High percentage of opposite blocks snippets definition are incorrect!

I've manually checked around 10 before i stopped and 8 were incorrect..

Could you please review the code and fix these.. It's a critical bug in any sense.

For illustration: Almost all ADX definitions are incorrect.

@BuildingBlock(name="ADX changes direction downwards", display="ADX(#Period#) changes direction downwards", returnType = ReturnTypes.Boolean)
@Help("Is triggered if ADX changes direction downwards")
@OppositeBlock("ADXChangesDown") -> UP?
@BuildingBlock(name="ADX changes direction upwards", display="ADX(#Period#) changes direction upwards", returnType = ReturnTypes.Boolean)
@Help("Is triggered if ADX changes direction upwards")
@OppositeBlock("ADXChangesUp") -> Down ?

etc, etc..

ATR are wrong too, did not check any more..

(Addendum) It might be intentional and it might be correct for ADX and ATR this way. Anyway I will leave bug request for reference in case it makes some sense.

Thank you,

Enyx

h
#4

hankeys

02.08.2020 21:00
ADX and other building blocks could be nondirectional - you dont want to BUY when ADX is falling or SELL when ADX is raising


ADX measuring volatility - so you want to BUY and SELL when the ADX is raising, or vice versa

MF
#5

Mark Fric

03.08.2020 11:08

Status changed from New to Refused

they are not incorrect, as hankeys said - some blocks are non directional.


We had a discoussion about this in earlier tasks, and the signal blocks should be correct like this.


Votes: 0

Drop files to upload

or

choose files

Max size: 5MB

Not allowed: exe, msi, application, reg, php, js, htaccess, htpasswd, gitignore

...
Wait please