diff --git a/Experts/x-saherelm.xfima.backtester.ea.mq5 b/Experts/x-saherelm.xfima.backtester.ea.mq5 index d87eb2b6..0e09aee8 100644 --- a/Experts/x-saherelm.xfima.backtester.ea.mq5 +++ b/Experts/x-saherelm.xfima.backtester.ea.mq5 @@ -148,6 +148,7 @@ input bool showHKBand = false; // Show HK Band input bool showATRBand = false; // Show ATR Band input bool showBarTime = true; // Show Bar Time input bool showZigZag = false; // Show ZigZag +input bool showCyclesMa = false; // Show Cycles MA input bool showFiboZone = false; // Show Fibo Zone // @@ -343,6 +344,7 @@ int OnInit() fimaInputs.showHKBand = showHKBand; fimaInputs.showATRBand = showATRBand; fimaInputs.showZigZag = showZigZag; + fimaInputs.showCyclesMa = showCyclesMa; fimaInputs.showFiboZone = showFiboZone; fimaInputs.startCalculationForLastBars = startCalculationForLastBars; fimaInputs.sarArrowCode = sarArrowCode; diff --git a/Helpers/x-saherelm.xfima.helper.mq5 b/Helpers/x-saherelm.xfima.helper.mq5 index 2e2b9a95..5e04adb4 100644 --- a/Helpers/x-saherelm.xfima.helper.mq5 +++ b/Helpers/x-saherelm.xfima.helper.mq5 @@ -671,6 +671,7 @@ class XCXFIMAHelper : public XCBaseHelper mInputs.showHKBand, mInputs.showATRBand, mInputs.showZigZag, + mInputs.showCyclesMa, mInputs.showFiboZone, mInputs.startCalculationForLastBars, mInputs.sarArrowCode, diff --git a/Indicators/x-saherelm.xfima.mq5 b/Indicators/x-saherelm.xfima.mq5 index 24bd6c83..48884e26 100644 --- a/Indicators/x-saherelm.xfima.mq5 +++ b/Indicators/x-saherelm.xfima.mq5 @@ -1464,6 +1464,10 @@ void DefineBuffers() // // MA State ... + // + // Draw Type ... + ENUM_DRAW_TYPE cyclesMADrawType = showCyclesMa ? DRAW_LINE : DRAW_NONE; + // // SC ... @@ -1474,6 +1478,7 @@ void DefineBuffers() // PlotIndexSetInteger(scMaBufferPlotIndex, PLOT_SHOW_DATA, showCyclesMa); PlotIndexSetDouble(scMaBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + PlotIndexSetInteger(scMaBufferPlotIndex, PLOT_DRAW_TYPE, cyclesMADrawType); // ArraySetAsSeries(scMaStateBuffer, true); @@ -1489,6 +1494,7 @@ void DefineBuffers() // PlotIndexSetInteger(mcMaBufferPlotIndex, PLOT_SHOW_DATA, showCyclesMa); PlotIndexSetDouble(mcMaBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + PlotIndexSetInteger(mcMaBufferPlotIndex, PLOT_DRAW_TYPE, cyclesMADrawType); // ArraySetAsSeries(scMaStateBuffer, true); @@ -1504,6 +1510,7 @@ void DefineBuffers() // PlotIndexSetInteger(lcMaBufferPlotIndex, PLOT_SHOW_DATA, showCyclesMa); PlotIndexSetDouble(lcMaBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + PlotIndexSetInteger(lcMaBufferPlotIndex, PLOT_DRAW_TYPE, cyclesMADrawType); // ArraySetAsSeries(lcMaStateBuffer, true); @@ -1519,6 +1526,7 @@ void DefineBuffers() // PlotIndexSetInteger(hcMaBufferPlotIndex, PLOT_SHOW_DATA, showCyclesMa); PlotIndexSetDouble(hcMaBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + PlotIndexSetInteger(hcMaBufferPlotIndex, PLOT_DRAW_TYPE, cyclesMADrawType); // ArraySetAsSeries(hcMaStateBuffer, true); diff --git a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 index 3680a698..df4cb2f5 100644 --- a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 +++ b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 @@ -284,19 +284,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller { // // Configure ... - drawLeg = true; - drawZones = true; - drawIZones = true; - drawTrends = true; - drawSCTrend = true; - drawMCTrend = true; - drawLCTrend = true; - drawHCTrend = true; - drawSupport = true; - drawISupport = true; - drawOrderFlow = true; - drawResistance = true; - drawIResistance = true; + drawLeg = false; + drawZones = false; + drawIZones = false; + drawTrends = false; + drawSCTrend = false; + drawMCTrend = false; + drawLCTrend = false; + drawHCTrend = false; + drawSupport = false; + drawISupport = false; + drawOrderFlow = false; + drawResistance = false; + drawIResistance = false; // manageLegs = true; @@ -1570,8 +1570,18 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller bool useSignaller4 = false; // - // Validator Flags ... + XBoxZone tmpZone; string provider = NULL; + ENUM_X_DIRECTION tmpDir; + + // + bool signaller1HasSignal = false; + bool signaller2HasSignal = false; + bool signaller3HasSignal = false; + bool signaller4HasSignal = false; + + // + // Validator Flags ... bool validateByOrderFlow = false; // @@ -1615,16 +1625,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // // Signal Detection Flags ... - // - XBoxZone tmpZone; - ENUM_X_DIRECTION tmpDir; - - // - bool signaller1HasSignal = false; - bool signaller2HasSignal = false; - bool signaller3HasSignal = false; - bool signaller4HasSignal = false; - // // Signaller 1 ... if (useSignaller1) @@ -2048,16 +2048,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // XOHCL pBar; + XOHCL p2Bar; bool isBullish = false; bool isBearish = false; // // Read PBar ... result = bar.GetPreviousBar(pBar); + result = result && + pBar.GetPreviousBar(p2Bar); if (!result) { // pBar.Clean(); + p2Bar.Clean(); return result; } @@ -2105,10 +2109,10 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // // Reading pBar Patterns ... - XPatternAnalysis pBarAnalysis; + XPatternAnalysis pBarPatterns; poiDetector.AnalyseBarPatterns( pBar, - pBarAnalysis, + pBarPatterns, structureConfig.barsAnalysisConfig // ); @@ -2119,11 +2123,11 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller bar.open > pBar.low) && ( // - pBarAnalysis.IsPinned(X_DIRECTION_BULLISH) || - pBarAnalysis.IsEngulfed(X_DIRECTION_BULLISH) || - pBarAnalysis.IsMomentum(X_DIRECTION_BULLISH) || - pBarAnalysis.IsPiercing(X_DIRECTION_BULLISH) || - pBarAnalysis.IsSignalKey(X_DIRECTION_BULLISH) + pBarPatterns.IsPinned(X_DIRECTION_BULLISH) || + pBarPatterns.IsEngulfed(X_DIRECTION_BULLISH) || + pBarPatterns.IsMomentum(X_DIRECTION_BULLISH) || + pBarPatterns.IsPiercing(X_DIRECTION_BULLISH) || + pBarPatterns.IsSignalKey(X_DIRECTION_BULLISH) // ); bool isPBarHasBearishPatterns = @@ -2131,11 +2135,11 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller bar.open < pBar.high) && ( // - pBarAnalysis.IsPinned(X_DIRECTION_BEARISH) || - pBarAnalysis.IsEngulfed(X_DIRECTION_BEARISH) || - pBarAnalysis.IsMomentum(X_DIRECTION_BEARISH) || - pBarAnalysis.IsPiercing(X_DIRECTION_BEARISH) || - pBarAnalysis.IsSignalKey(X_DIRECTION_BEARISH) + pBarPatterns.IsPinned(X_DIRECTION_BEARISH) || + pBarPatterns.IsEngulfed(X_DIRECTION_BEARISH) || + pBarPatterns.IsMomentum(X_DIRECTION_BEARISH) || + pBarPatterns.IsPiercing(X_DIRECTION_BEARISH) || + pBarPatterns.IsSignalKey(X_DIRECTION_BEARISH) // ); @@ -2195,6 +2199,13 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller affectedZonesBearish // ); + // + // Detecting Boundary Trend ... + XTrend boundaryTrend; + bool hasBoundaryTrend = fimaParser.HasBoundaryTrend(boundaryTrend, pBar.Index()); + bool hasBoundaryBullishTrend = hasBoundaryTrend && boundaryTrend.IsBullish(); + bool hasBoundaryBearishTrend = hasBoundaryTrend && boundaryTrend.IsBearish(); + // // Do ... @@ -2255,6 +2266,37 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // result = zone.IsValid(); + + // + // Zone Validations ... + if (result) + { + // + if (boundaryTrend.IsValid()) + { + poiDrawer.DrawTrendLine(boundaryTrend, structureDrawConfig.drawConfig); + } + + // + poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig); + poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); + + // + DebugBreak(); + } + + // + result = zone.IsValid(); + + // + // Reset Flags ... + if (!result) + { + // + zone.Clean(); + isBullish = false; + isBearish = false; + } } // @@ -2273,8 +2315,10 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller dir = X_DIRECTION_NONE; } pBar.Clean(); + p2Bar.Clean(); XClean(zones); - pBarAnalysis.Clean(); + pBarPatterns.Clean(); + boundaryTrend.Clean(); XClean(affectedZones); XClean(affectedZonesBullish); XClean(affectedZonesBearish);