diff --git a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 index 22b9b46c..d4179e41 100644 --- a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 +++ b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 @@ -895,6 +895,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller result = false; bool isBullish = false; bool isBearish = false; + ENUM_X_DIRECTION tmpDir; // // Do Signal Detection ... @@ -904,10 +905,72 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // Here we Have to Prepare Some Directional Confirmations Using Indicators ... // for Validate Signals ... + // + int verifierBarIndex = pBar.Index(); + + // + bool hasSarSwitch = fimaHelper.HasSARSwitch(tmpDir, verifierBarIndex); + bool isSarSwitchedToBullish = hasSarSwitch && + IsXBullish(tmpDir); + bool isSarSwitchedToBearish = hasSarSwitch && + IsXBearish(tmpDir); + + // + bool hasMACross = fimaHelper.HasMACross( + tmpDir, + verifierBarIndex, + structureConfig.maCrossValidationDiffMultiplier // + ); + bool isCrossedOver = hasMACross && + IsXBullish(tmpDir); + bool isCrossedUnder = hasMACross && + IsXBearish(tmpDir); + + // + bool hasHKSwitch = fimaHelper.HasHKSwitch(tmpDir, verifierBarIndex); + bool isHKSwitchedToBullish = hasHKSwitch && + IsXBullish(tmpDir); + bool isHKSwitchedToBearish = hasHKSwitch && + IsXBearish(tmpDir); + + // + bool isBoundaryFakeBreaked = fimaHelper.IsBoundaryFakeBreaked(tmpDir, verifierBarIndex); + bool isBoundaryFakeBreakedBullish = isBoundaryFakeBreaked && + IsXBullish(tmpDir); + bool isBoundaryFakeBreakedBearish = isBoundaryFakeBreaked && + IsBearish(tmpDir); + // bool hasZigZagHigherLow = fimaHelper.HasZigZagHigherLow(bar.Index(), true); bool hasZigZagLowerHigh = fimaHelper.HasZigZagLowerHigh(bar.Index(), true); + // + // Summarize Confirmations ... + + // + bool isBullishConfirmed = + (hasZigZagHigherLow && + ( + // + isCrossedOver || + isHKSwitchedToBullish || + isSarSwitchedToBullish || + isBoundaryFakeBreakedBullish + // + )); + + // + bool isBearishConfirmed = + (hasZigZagLowerHigh && + ( + // + isCrossedUnder || + isHKSwitchedToBearish || + isSarSwitchedToBearish || + isBoundaryFakeBreakedBullish + // + )); + // // Validation Patterns ... int directionalPatternsValidations = 3; @@ -916,11 +979,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // Check Bullish Conditions ... isBullish = // + // Confirmations Passed ... + isBullishConfirmed && + // + // Quarters Has Minor Support Zone ... _structure.barAnalysis.HasMinorSupport() && + // + // Current Bar's Price Placed Propper ... bar.open > _structure.barAnalysis.minorSupport.upper && bar.close > _structure.barAnalysis.minorSupport.upper && + // + // Required Number of Pivots Validation Exists ... (_structure.barsAnalysis[1].Count(X_DIRECTION_BULLISH) >= directionalPatternsValidations) && // + // Bar or PBar ReTested Quarter Zone ... (IsTested( pBar, _structure.barAnalysis.minorSupport // @@ -928,9 +1000,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller IsTested( p2Bar, _structure.barAnalysis.minorSupport // - )) && - // - (hasZigZagHigherLow) + )) // ; @@ -938,11 +1008,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // Check Bearish Conditions ... isBearish = // + // Confirmations Passed ... + isBearishConfirmed && + // + // Quarters Has Minor Resistance Zone ... _structure.barAnalysis.HasMinorResistance() && + // + // Current Bar's Price Placed Propper ... bar.open < _structure.barAnalysis.minorResistance.lower && bar.close < _structure.barAnalysis.minorResistance.lower && + // + // Required Number of Pivots Validation Exists ... (_structure.barsAnalysis[1].Count(X_DIRECTION_BEARISH) >= directionalPatternsValidations) && // + // Bar or pBar ReTested Quarter Zone ... (IsTested( pBar, _structure.barAnalysis.minorResistance // @@ -950,9 +1029,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller IsTested( p2Bar, _structure.barAnalysis.minorResistance // - )) && - // - (hasZigZagLowerHigh) + )) // ;