diff --git a/Classes/x-saherelm.x-market.pattern.class.mq5 b/Classes/x-saherelm.x-market.pattern.class.mq5 index 597f2c76..2d02724b 100644 --- a/Classes/x-saherelm.x-market.pattern.class.mq5 +++ b/Classes/x-saherelm.x-market.pattern.class.mq5 @@ -30,176 +30,6 @@ // // Definitions ... -enum ENUM_X_DETECTOR_ZONE_ACTION -{ - X_DETECTOR_ZONE_ACTION_NONE = 0, - // - // Support ... - X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED = 1, - X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED = 2, - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED = 3, - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_REFINED = 4, - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED = 5, - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED = 6, - // - // Resistance ... - X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED = 7, - X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED = 8, - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED = 9, - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED = 10, - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED = 11, - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED = 12, -}; - -bool IsXValid(ENUM_X_DETECTOR_ZONE_ACTION value) -{ - return value != X_DETECTOR_ZONE_ACTION_NONE; -} - -string ToXString(ENUM_X_DETECTOR_ZONE_ACTION value) -{ - // - string result = NULL; - - // - if (!IsXValid(value)) - { - return result; - } - - // - switch (value) - { - // - case X_DETECTOR_ZONE_ACTION_NONE: - result = "NONE"; - break; - // - case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED: - result = "MAJOR_SUPPORT_DETECTED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED: - result = "MAJOR_SUPPORT_BREAKED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED: - result = "MINOR_SUPPORT_DETECTED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_REFINED: - result = "MINOR_SUPPORT_REFINED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED: - result = "MINOR_SUPPORT_BREAKED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED: - result = "MINOR_SUPPORT_RETESTED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED: - result = "MAJOR_RESISTANCE_DETECTED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED: - result = "MAJOR_RESISTANCE_BREAKED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED: - result = "MINOR_RESISTANCE_DETECTED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED: - result = "MINOR_RESISTANCE_REFINED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED: - result = "MINOR_RESISTANCE_BREAKED"; - break; - // - case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED: - result = "MINOR_RESISTANCE_RETESTED"; - break; - } - - // - return result; -} - -int XExtractValids( - ENUM_X_DETECTOR_ZONE_ACTION &source[], - ENUM_X_DETECTOR_ZONE_ACTION &dest[] // -) -{ - // - int result = 0; - - // - // Prepare ... - XClean(dest); - - // - // Validate ... - bool has = HasChild(source); - if (!has) - { - return result; - } - - // - // Calculations ... - int count = ArraySize(source); - for (int i = 0; i < count; i++) - { - // - has = IsXValid(source[i]); - if (has) - { - // - Add( - source[i], - dest // - ); - } - } - - // - // Check Size ... - result = ArraySize(dest); - - // - return result; -} - -bool HasXValid(ENUM_X_DETECTOR_ZONE_ACTION &source[]) -{ - // - bool result = false; - - // - result = HasChild(source); - if (!result) - { - return result; - } - - // - for (int i = 0; i < ArraySize(source); i++) - { - // - result = IsXValid(source[i]); - if (result) - { - break; - } - } - - // - return result; -} - // // Implementation ... class XCMarketPatternDetector : public XCBase @@ -2850,6 +2680,48 @@ class XCMarketPatternDetector : public XCBase // Validate Analysis ... result = analysis.IsValid(); + // + // Update Quarter ... + if (result) + { + // + // Update Quarter ... + UpdateZones( + bar, + analysis.quarterActions, + config.quarterZonesValidationLength, // Zones Validation Length ... + config.quarterZonesRequiredToStart, // Zones Count to Start Processing ... + config.quarterZoneDetectionLoopback // Zones Detection Loopback ... + ); + + // + // Fill Quarter Props ... + analysis.majorSupport = majorSupport; + analysis.minorSupport = minorSupport; + analysis.quarter = CalculateQuarter(); + analysis.majorResistance = majorResistance; + analysis.minorResistance = minorResistance; + + // + // Update To Times ... + if (analysis.majorSupport.IsValid()) + { + analysis.majorSupport.to = bar.time; + } + if (analysis.minorSupport.IsValid()) + { + analysis.minorSupport.to = bar.time; + } + if (analysis.majorResistance.IsValid()) + { + analysis.majorResistance.to = bar.time; + } + if (analysis.minorResistance.IsValid()) + { + analysis.minorResistance.to = bar.time; + } + } + // // Cleanup Resources ... iZone.Clean(); @@ -3630,15 +3502,7 @@ class XCMarketPatternDetector : public XCBase } // - // Preparing Actions ... - if (!HasChild(actions)) - { - // - Add( - X_DETECTOR_ZONE_ACTION_NONE, - actions // - ); - } + // Actions Counting ... result = ArraySize(actions); // diff --git a/Experts/x-saherelm.xfima.backtester.ea.mq5 b/Experts/x-saherelm.xfima.backtester.ea.mq5 index 3eb0a53f..19d9614b 100644 --- a/Experts/x-saherelm.xfima.backtester.ea.mq5 +++ b/Experts/x-saherelm.xfima.backtester.ea.mq5 @@ -512,7 +512,7 @@ void OnTick() // // Bar Index ... - int barIndex = 1; + int barIndex = 0; // // Signallers Calling OnTick ... diff --git a/Libraries/x-saherelm.x-pivot.analysis.lib.mq5 b/Libraries/x-saherelm.x-pivot.analysis.lib.mq5 index 968a9c39..5c1a786c 100644 --- a/Libraries/x-saherelm.x-pivot.analysis.lib.mq5 +++ b/Libraries/x-saherelm.x-pivot.analysis.lib.mq5 @@ -1300,6 +1300,15 @@ struct XPatternAnalysis ENUM_X_BAR_PATTERN patterns[]; // All Bars Exists Patterns ... ENUM_X_DIRECTION patternsDir[]; // Each Exists Patterns Directions ... + // + // Quarter Analysis ... + double quarter; // Premium Discount Verifier ... + XBoxZone majorSupport; // Major Support Zone ... + XBoxZone minorSupport; // Minor Support Zone ... + XBoxZone majorResistance; // Major Resistance Zone ... + XBoxZone minorResistance; // Minor Resistance Zone ... + ENUM_X_DETECTOR_ZONE_ACTION quarterActions[]; // Specified Quarter Actions based on Time ... + // // Constructor ... XPatternAnalysis() @@ -1326,6 +1335,14 @@ struct XPatternAnalysis resistance.Clean(); XClean(patternsDir); + // + quarter = 0; + XClean(quarterActions); + majorSupport.Clean(); + minorSupport.Clean(); + majorResistance.Clean(); + minorResistance.Clean(); + // ZeroMemory(this); } @@ -1348,6 +1365,123 @@ struct XPatternAnalysis return result; } + // + // Quarter Actions ... + + /** + * Check Has Major Support or not ... + * + * @return ( bool ) + */ + bool HasMajorSupport() + { + return IsValid() && + majorSupport.IsValid(); + } + + /** + * Check Has Minor Support or not ... + * + * @return ( bool ) + */ + bool HasMinorSupport() + { + return IsValid() && + IsQuarterReady() && + minorSupport.IsValid(); + } + + /** + * Check Has Major Resistance or not ... + * + * @return ( bool ) + */ + bool HasMajorResistance() + { + return IsValid() && + majorResistance.IsValid(); + } + + /** + * Check Has Minor Resistance or not ... + * + * @return ( bool ) + */ + bool HasMinorResistance() + { + return IsValid() && + IsQuarterReady() && + minorResistance.IsValid(); + } + + /** + * Check Zones Quarter Initialized ... + * + * @return ( bool ) + */ + bool IsQuarterReady() + { + // + return IsValid() && + HasMajorSupport() && + HasMajorResistance() && + quarter > 0; + } + + /** + * Check Has Quarter Actions ... + * + * @return ( bool ) + */ + bool HasQuarterActions() + { + return HasChild(quarterActions); + } + + /** + * Check Contains Specified Quarter Actions or not ... + * + * @param value: ENUM_X_DETECTOR_ZONE_ACTION, Specified Action ... + * + * @return ( bool ) + */ + bool HasQuarterAction(ENUM_X_DETECTOR_ZONE_ACTION value) + { + // + bool result = false; + + // + result = IsXValid(value) && + HasQuarterActions() && + Contains(value, quarterActions); + + // + return result; + } + + /** + * Check Minor Support Retested or not ... + * + * @return ( bool ) + */ + bool IsMinorSupportRetested() + { + return HasQuarterAction(X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED); + } + + /** + * Check Minor Resistance Retested or not ... + * + * @return ( bool ) + */ + bool IsMinorResistanceRetested() + { + return HasQuarterAction(X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED); + } + + // + // Pattern Actions ... + // int Count( ENUM_X_DIRECTION forDir = X_DIRECTION_NONE // @@ -2308,6 +2442,12 @@ struct XPatternAnalysisConfig // // Props ... + // + // Quarter ... + int quarterZonesRequiredToStart; + int quarterZoneDetectionLoopback; + int quarterZonesValidationLength; + // // PV ... int pvValidationLength; @@ -2365,6 +2505,12 @@ struct XPatternAnalysisConfig */ void Clean() { + // + // Quarter ... + quarterZonesRequiredToStart = 0; + quarterZoneDetectionLoopback = 0; + quarterZonesValidationLength = 0; + // // PV ... pvValidationLength = 0; @@ -2416,6 +2562,12 @@ struct XPatternAnalysisConfig */ void Default() { + // + // Quarter ... + quarterZonesRequiredToStart = 20; + quarterZonesValidationLength = 3; + quarterZoneDetectionLoopback = 1500; + // // PV ... pvValidationLength = 5; diff --git a/Libraries/x-saherelm.x-poi.lib.mq5 b/Libraries/x-saherelm.x-poi.lib.mq5 index 507d387a..1e92bb5c 100644 --- a/Libraries/x-saherelm.x-poi.lib.mq5 +++ b/Libraries/x-saherelm.x-poi.lib.mq5 @@ -285,6 +285,121 @@ int GetAllBarPatters(ENUM_X_BAR_PATTERN &dest[]) return ArraySize(dest); } +/** + * Quarter Zones Actions ... + **/ +enum ENUM_X_DETECTOR_ZONE_ACTION +{ + X_DETECTOR_ZONE_ACTION_NONE = 0, + // + // Support ... + X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED = 1, + X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED = 2, + X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED = 3, + X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_REFINED = 4, + X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED = 5, + X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED = 6, + // + // Resistance ... + X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED = 7, + X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED = 8, + X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED = 9, + X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED = 10, + X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED = 11, + X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED = 12, +}; + +/** + * Validate an ENUM member ... + * + * @param value: ENUM_X_DETECTOR_ZONE_ACTION ... + * + * @return ( bool ) + */ +bool IsXValid(ENUM_X_DETECTOR_ZONE_ACTION value) +{ + return value != X_DETECTOR_ZONE_ACTION_NONE; +} + +/** + * Converts a Pattern ENUM to String Representation ... + * + * @param value: ENUM_X_DETECTOR_ZONE_ACTION, member ... + * + * @return ( string ) + */ +string ToXString(ENUM_X_DETECTOR_ZONE_ACTION value) +{ + // + string result = NULL; + + // + if (!IsXValid(value)) + { + return result; + } + + // + switch (value) + { + // + case X_DETECTOR_ZONE_ACTION_NONE: + result = "NONE"; + break; + // + case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED: + result = "MAJOR_SUPPORT_DETECTED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED: + result = "MAJOR_SUPPORT_BREAKED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED: + result = "MINOR_SUPPORT_DETECTED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_REFINED: + result = "MINOR_SUPPORT_REFINED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED: + result = "MINOR_SUPPORT_BREAKED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED: + result = "MINOR_SUPPORT_RETESTED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED: + result = "MAJOR_RESISTANCE_DETECTED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED: + result = "MAJOR_RESISTANCE_BREAKED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED: + result = "MINOR_RESISTANCE_DETECTED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED: + result = "MINOR_RESISTANCE_REFINED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED: + result = "MINOR_RESISTANCE_BREAKED"; + break; + // + case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED: + result = "MINOR_RESISTANCE_RETESTED"; + break; + } + + // + return result; +} + // // Structures ... diff --git a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 index fd280c67..d60309df 100644 --- a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 +++ b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 @@ -348,187 +348,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller return; } - // - // Manage Zones of Pattern Detector ... - ENUM_X_DETECTOR_ZONE_ACTION zoneActions[]; - int zoneActionsCount = poiDetector.UpdateZones( - iBar, - zoneActions, - 3, // Validation Length ... - 20, // Required Zones ... - 1500 // Loopback ... - ); - has = IsValidSize(zoneActionsCount); - if (has) - { - // - } - - // - // Sample Draws ... - - // - // Support ... - if (poiDetector.majorSupport.IsValid()) - { - // - XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; - iConfig.zonesWidth = 3; - - // - poiDrawer.DrawZone( - poiDetector.majorSupport, - iConfig // - ); - } - if (poiDetector.minorSupport.IsValid()) - { - // - XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; - iConfig.zonesStyle = STYLE_DASH; - - // - poiDrawer.DrawZone( - poiDetector.minorSupport, - iConfig // - ); - } - - // - // Resistance ... - if (poiDetector.majorResistance.IsValid()) - { - // - XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; - iConfig.zonesWidth = 3; - - // - poiDrawer.DrawZone( - poiDetector.majorResistance, - iConfig // - ); - } - if (poiDetector.minorResistance.IsValid()) - { - // - XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; - iConfig.zonesStyle = STYLE_DASH; - - // - poiDrawer.DrawZone( - poiDetector.minorResistance, - iConfig // - ); - } - - // - // Quarter Line ... - if (poiDetector.majorSupport.IsValid() && - poiDetector.majorResistance.IsValid()) - { - // - double quarter = poiDetector.CalculateQuarter(); - - // - datetime quarterFrom = MathMin(poiDetector.majorResistance.from, - poiDetector.majorSupport.from); - datetime quarterTo = MathMax(poiDetector.majorResistance.to, - poiDetector.majorSupport.to); - string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom)); - - // - CChartObjectTrend *iObj; - has = poiDrawer.DrawTrendLine( - quarter, - quarterFrom, - quarter, - quarterTo, - iObj, - quarterName, - false, // Ray Right ... - false // Ray Left ... - ); - if (has) { - // - iObj.Width(2); - iObj.Color(clrYellow); - - // - poiDrawer.drawnObjects.Add(iObj); - } - } - - // - // Check Actions for Debugging ... - has = HasXValid(zoneActions) && - (Contains( - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED, - zoneActions) || - Contains( - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED, - zoneActions)); - if (has) - { - // - // Draw Bar Arrow Based On Action ... - XPivot msPivot; - XPivot mrPivot; - - // - // Support ReTest ... - has = Contains( - X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED, - zoneActions // - ); - has = - has && - ToPivot( - iBar, - msPivot, - X_DIRECTION_BULLISH, - X_BAR_PATTERN_SUPPORT // - ); - if (has) - { - // - poiDrawer.DrawPivot( - msPivot, - structureDrawConfig.drawConfig // - ); - } - - // - // Resistance ReTest ... - has = Contains( - X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED, - zoneActions // - ); - has = - has && - ToPivot( - iBar, - mrPivot, - X_DIRECTION_BEARISH, - X_BAR_PATTERN_RESISTANCE // - ); - if (has) - { - // - poiDrawer.DrawPivot( - mrPivot, - structureDrawConfig.drawConfig // - ); - } - - // - // Cleanup Pivots ... - msPivot.Clean(); - mrPivot.Clean(); - - // - Print("Hot Zone Actions ..."); - } - // // Retrieve Conditions ... has = fimaHelper.GetConditions( @@ -553,6 +372,111 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller structureConfig, barIndex // ); + + // + // Sample Draws ... + + // + // Support ... + if (structure.barAnalysis.IsQuarterReady()) + { + // + // Majors ... + + // + XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; + iConfig.zonesWidth = 3; + + // + poiDrawer.DrawZone( + structure.barAnalysis.majorSupport, + iConfig // + ); + + // + poiDrawer.DrawZone( + structure.barAnalysis.majorResistance, + iConfig // + ); + + // + // Minors ... + + // + if (structure.barAnalysis.HasMinorSupport()) + { + // + XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; + iConfig.zonesStyle = STYLE_DASH; + + // + poiDrawer.DrawZone( + structure.barAnalysis.minorSupport, + iConfig // + ); + } + + // + if (structure.barAnalysis.HasMinorResistance()) + { + // + XPOIDrawConfig iConfig = structureDrawConfig.drawConfig; + iConfig.zonesStyle = STYLE_DASH; + + // + poiDrawer.DrawZone( + structure.barAnalysis.minorResistance, + iConfig // + ); + } + + // + // Quarter Draw ... + if (structure.barAnalysis.quarter > 0) + { + // + double quarter = structure.barAnalysis.quarter; + + // + datetime quarterFrom = MathMin(poiDetector.majorResistance.from, + poiDetector.majorSupport.from); + datetime quarterTo = iBar.time; + string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom)); + + // + CChartObjectTrend *iObj; + has = poiDrawer.DrawTrendLine( + quarter, + quarterFrom, + quarter, + quarterTo, + iObj, + quarterName, + false, // Ray Right ... + false // Ray Left ... + ); + if (has) + { + // + iObj.Width(2); + iObj.Color(clrYellow); + + // + poiDrawer.drawnObjects.Add(iObj); + } + } + } + + // + // Resistance ... + + // + // Quarter Line ... + if (poiDetector.majorSupport.IsValid() && + poiDetector.majorResistance.IsValid()) + { + } + // poiDrawer.drawnObjects.Clear(); // poiDrawer.DrawMarketStructure( // structure, diff --git a/XFIMAEA/Classes/x-saherelm.xfima.x-poi.detector.class.mq5 b/XFIMAEA/Classes/x-saherelm.xfima.x-poi.detector.class.mq5 index 28f2c0d2..a141fe1c 100644 --- a/XFIMAEA/Classes/x-saherelm.xfima.x-poi.detector.class.mq5 +++ b/XFIMAEA/Classes/x-saherelm.xfima.x-poi.detector.class.mq5 @@ -427,6 +427,12 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector iPatternAnalysis, structure.barsAnalysis // ); + + // + if (i == barIndex) + { + structure.barAnalysis = iPatternAnalysis; + } } // diff --git a/XFIMAEA/Libraries/x-saherelm.xfima.lib.mq5 b/XFIMAEA/Libraries/x-saherelm.xfima.lib.mq5 index 51debf5d..4e9700a5 100644 --- a/XFIMAEA/Libraries/x-saherelm.xfima.lib.mq5 +++ b/XFIMAEA/Libraries/x-saherelm.xfima.lib.mq5 @@ -36,7 +36,8 @@ struct XFIMAMarketStructure { // - XOHCL bar; // Spacified Start Bar for Analysing ... + XOHCL bar; // Spacified Start Bar for Analysing ... + XPatternAnalysis barAnalysis; // Structure Bar Pattern Analysis ... // XPivotAnalysis pvAnalysis; // PV Pivot Analysis Result ... @@ -62,6 +63,7 @@ struct XFIMAMarketStructure { // bar.Clean(); + barAnalysis.Clean(); // pvAnalysis.Clean(); @@ -83,7 +85,8 @@ struct XFIMAMarketStructure bool result = false; // - result = bar.IsValid(); + result = bar.IsValid() && + barAnalysis.IsValid(); // return result;