/** * Check Bar Has Signal Based on Strategy 4 ... * * @param bar: XOHCL, reference to Bar ... * @param zone: XBoxZone, reference to holds affected zone ... * @param targets: XTarget, reference to detected Signal's Targets collections ... * @param dir: ENUM_X_DIRECTION, detected Signal's direction ... * * @return ( bool ) */ bool Strategy3HasSignal( XOHCL &bar, XBoxZone &zone, XTarget &targets[], ENUM_X_DIRECTION &dir // ) { // bool result = false; // // Prepare ... zone.Clean(); XClean(targets); dir = X_DIRECTION_NONE; // // Validate ... result = bar.IsValid(); if (!result) { return result; } // // Validation Flags ... bool validateByBarPatterns = true; // // Define Requirements ... // XOHCL pBar; XOHCL p2Bar; XOHCL p3Bar; bool isBullish = false; bool isBearish = false; // // Read PBar ... result = bar.GetPreviousBar(pBar); result = result && pBar.GetPreviousBar(p2Bar); result = result && p2Bar.GetPreviousBar(p3Bar); if (!result) { // pBar.Clean(); p2Bar.Clean(); p3Bar.Clean(); // return result; } // // Do ... // // Retrieve pBar Patterns ... XPatternAnalysis pBarPatterns; XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig; // poiDetector.AnalyseBarPatterns( pBar, pBarPatterns, patternConfig // ); // bool isConsolidation = poiDetector.DetectXPVZone(zone, p2Bar.Index()); // isBullish = isConsolidation && zone.IsBullish(); // isBearish = isConsolidation && zone.IsBearish(); // // Summarize Result ... result = isBullish || isBearish; // // Force PBar Has Pattern ... if (result && validateByBarPatterns) { // // Analyse Bar Patterns ... result = pBarPatterns.IsValid(); // // Bullish ... bool isPBarHasBullishPatterns = result && ( // 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) // ); // // Bearish ... bool isPBarHasBearishPatterns = result && ( // 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) // ); // isBullish = isBullish && isPBarHasBullishPatterns && !isPBarHasBearishPatterns; // isBearish = isBearish && isPBarHasBearishPatterns && !isPBarHasBullishPatterns; // // Summarize Result ... result = isBullish || isBearish; // // Reset Flags ... if (!result) { // isBullish = false; isBearish = false; } } // if (result) { // poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig); poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); DebugBreak(); // result = false; isBullish = false; isBearish = false; } // // // // Validate based on Bars Patterns ... // bool validateByBarPatterns = true; // if (validateByBarPatterns) // { // // // // Reading pBar Patterns ... // XPatternAnalysis pBarAnalysis; // poiDetector.AnalyseBarPatterns( // pBar, // pBarAnalysis, // structureConfig.barsAnalysisConfig // // ); // // // // Bullish ... // bool isPBarHasBullishPatterns = // (bar.close > pBar.low || // 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) // // // ); // // // // Bearish ... // bool isPBarHasBearishPatterns = // (bar.close < pBar.high || // 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) // // // ); // // // isBullish = // isBullish && // isPBarHasBullishPatterns && // !isPBarHasBearishPatterns; // // // isBearish = // isBearish && // isPBarHasBearishPatterns && // !isPBarHasBullishPatterns; // // // // Summarize Result ... // result = isBullish || // isBearish; // } // // // // Checking PullBack ... // bool validateByPullback = false; // if (validateByPullback) // { // // // XBoxZone pullback; // ENUM_X_DIRECTION pullbackDir; // bool isPullBack = result && // poiDetector.IsPullbackPattern( // pBar, // pullback, // pullbackDir, // 2, // false // Force Break ... // ); // bool isPullbackBullish = isPullBack && // IsXBullish(pullbackDir); // bool isPullbackBearish = isPullBack && // IsXBearish(pullbackDir); // // // isBullish = // isBullish && // isPullbackBullish; // // // isBearish = // isBearish && // isPullbackBearish; // // // // Summarize Result ... // result = isBullish || // isBearish; // } // // Validate ... result = isBullish || isBearish; // // Prepare Zone ... if (result) { } // // Prepare Targets ... if (result) { } // // Cleanup ... if (!result) { // zone.Clean(); XClean(targets); dir = X_DIRECTION_NONE; } pBar.Clean(); p2Bar.Clean(); p3Bar.Clean(); pBarPatterns.Clean(); // return result; } // // // bool isConsolidation = poiDetector.DetectXPVZone(zone, p2Bar.Index()); // // // isBullish = // isConsolidation && // zone.IsBullish(); // // // isBearish = // isConsolidation && // zone.IsBearish(); // // // // Summarize Result ... // result = isBullish || isBearish; // // // // Force PBar Has Pattern ... // if (result && validateByBarPatterns) // { // // // // Analyse Bar Patterns ... // result = pBarPatterns.IsValid(); // // // // Bullish ... // bool isPBarHasBullishPatterns = // result && // ( // // // 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) // // // ); // // // // Bearish ... // bool isPBarHasBearishPatterns = // result && // ( // // // 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) // // // ); // // // isBullish = // isBullish && // isPBarHasBullishPatterns && // !isPBarHasBearishPatterns; // // // isBearish = // isBearish && // isPBarHasBearishPatterns && // !isPBarHasBullishPatterns; // // // // Summarize Result ... // result = isBullish || isBearish; // // // // Reset Flags ... // if (!result) // { // // // isBullish = false; // isBearish = false; // } // } // // // if (result) // { // // // poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig); // poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); // DebugBreak(); // // // result = false; // isBullish = false; // isBearish = false; // } // // // // Validate based on Bars Patterns ... // bool validateByBarPatterns = true; // if (validateByBarPatterns) // { // // // // Reading pBar Patterns ... // XPatternAnalysis pBarAnalysis; // poiDetector.AnalyseBarPatterns( // pBar, // pBarAnalysis, // structureConfig.barsAnalysisConfig // // ); // // // // Bullish ... // bool isPBarHasBullishPatterns = // (bar.close > pBar.low || // 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) // // // ); // // // // Bearish ... // bool isPBarHasBearishPatterns = // (bar.close < pBar.high || // 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) // // // ); // // // isBullish = // isBullish && // isPBarHasBullishPatterns && // !isPBarHasBearishPatterns; // // // isBearish = // isBearish && // isPBarHasBearishPatterns && // !isPBarHasBullishPatterns; // // // // Summarize Result ... // result = isBullish || // isBearish; // } // // // // Checking PullBack ... // bool validateByPullback = false; // if (validateByPullback) // { // // // XBoxZone pullback; // ENUM_X_DIRECTION pullbackDir; // bool isPullBack = result && // poiDetector.IsPullbackPattern( // pBar, // pullback, // pullbackDir, // 2, // false // Force Break ... // ); // bool isPullbackBullish = isPullBack && // IsXBullish(pullbackDir); // bool isPullbackBearish = isPullBack && // IsXBearish(pullbackDir); // // // isBullish = // isBullish && // isPullbackBullish; // // // isBearish = // isBearish && // isPullbackBearish; // // // // Summarize Result ... // result = isBullish || // isBearish; // } /** * Check Bar Has Signal Based on Strategy 4 ... * * @param bar: XOHCL, reference to Bar ... * @param zone: XBoxZone, reference to holds affected zone ... * @param targets: XTarget, reference to detected Signal's Targets collections ... * @param dir: ENUM_X_DIRECTION, detected Signal's direction ... * * @return ( bool ) */ bool Strategy3HasSignal( XOHCL &bar, XBoxZone &zone, XTarget &targets[], ENUM_X_DIRECTION &dir // ) { // bool result = false; // // Prepare ... zone.Clean(); XClean(targets); dir = X_DIRECTION_NONE; // // Validate ... result = bar.IsValid(); if (!result) { return result; } // // Validation Flags ... bool validateByBarPatterns = false; // // Define Requirements ... // XOHCL pBar; XOHCL p2Bar; XOHCL p3Bar; bool isBullish = false; bool isBearish = false; // // Read PBar ... result = bar.GetPreviousBar(pBar); result = result && pBar.GetPreviousBar(p2Bar); result = result && p2Bar.GetPreviousBar(p3Bar); if (!result) { // pBar.Clean(); p2Bar.Clean(); p3Bar.Clean(); // return result; } // // Do ... // // Retrieve pBar Patterns ... XPatternAnalysis pBarPatterns; XPatternAnalysis p2BarPatterns; XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig; // poiDetector.AnalyseBarPatterns( pBar, pBarPatterns, patternConfig // ); poiDetector.AnalyseBarPatterns( p2Bar, p2BarPatterns, patternConfig // ); // bool hasSupport = p2BarPatterns.IsValid() && p2BarPatterns.IsSupport(); bool hasResistance = p2BarPatterns.IsValid() && p2BarPatterns.IsResistance(); // isBullish = hasSupport && p2BarPatterns.Count(X_DIRECTION_BULLISH) >= 4; // isBearish = hasResistance && p2BarPatterns.Count(X_DIRECTION_BEARISH) >= 4; // // Summarize Result ... result = isBullish || isBearish; // // Extract Affected Zone ... if (result) { // XOHCL tmpBar; XPivot tmpPivot; XBoxZone tmpZone; // if (hasSupport) { // hasSupport = p2BarPatterns.GetSupport(tmpBar, tmpPivot, tmpZone); isBullish = isBullish && hasSupport && (IsActed(pBar, tmpZone) || IsTested(pBar, tmpZone)); } // if (hasResistance) { // hasResistance = p2BarPatterns.GetResistance(tmpBar, tmpPivot, tmpZone); isBearish = isBearish && hasResistance && (IsActed(pBar, tmpZone) || IsTested(pBar, tmpZone)); } // // Cleanup ... tmpBar.Clean(); tmpZone.Clean(); tmpPivot.Clean(); // // Summarize Result ... result = isBullish || isBearish; } // // Validate based on Bars Patterns ... if (result && validateByBarPatterns) { // // Bullish... bool isPBarHasBullishPatterns = pBarPatterns.IsValid() && ( // 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) // ); // // Bearish ... bool isPBarHasBearishPatterns = pBarPatterns.IsValid() && ( // 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) // ); // isBullish = isBullish && isPBarHasBullishPatterns && !isPBarHasBearishPatterns; // isBearish = isBearish && isPBarHasBearishPatterns && !isPBarHasBullishPatterns; // // Summarize Result ... result = isBullish || isBearish; } if (result) { // poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); poiDrawer.DrawPatternAnalysis(p2BarPatterns, structureDrawConfig.barAnalysisDrawConfig); DebugBreak(); // result = false; isBullish = false; isBearish = false; } // // // bool isConsolidation = poiDetector.DetectXPVZone(zone, p2Bar.Index()); // // // isBullish = // isConsolidation && // zone.IsBullish(); // // // isBearish = // isConsolidation && // zone.IsBearish(); // // // // Summarize Result ... // result = isBullish || isBearish; // // // // Force PBar Has Pattern ... // if (result && validateByBarPatterns) // { // // // // Analyse Bar Patterns ... // result = pBarPatterns.IsValid(); // // // // Bullish ... // bool isPBarHasBullishPatterns = // result && // ( // // // 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) // // // ); // // // // Bearish ... // bool isPBarHasBearishPatterns = // result && // ( // // // 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) // // // ); // // // isBullish = // isBullish && // isPBarHasBullishPatterns && // !isPBarHasBearishPatterns; // // // isBearish = // isBearish && // isPBarHasBearishPatterns && // !isPBarHasBullishPatterns; // // // // Summarize Result ... // result = isBullish || isBearish; // // // // Reset Flags ... // if (!result) // { // // // isBullish = false; // isBearish = false; // } // } // // // if (result) // { // // // poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig); // poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); // DebugBreak(); // // // result = false; // isBullish = false; // isBearish = false; // } // // // // Checking PullBack ... // bool validateByPullback = false; // if (validateByPullback) // { // // // XBoxZone pullback; // ENUM_X_DIRECTION pullbackDir; // bool isPullBack = result && // poiDetector.IsPullbackPattern( // pBar, // pullback, // pullbackDir, // 2, // false // Force Break ... // ); // bool isPullbackBullish = isPullBack && // IsXBullish(pullbackDir); // bool isPullbackBearish = isPullBack && // IsXBearish(pullbackDir); // // // isBullish = // isBullish && // isPullbackBullish; // // // isBearish = // isBearish && // isPullbackBearish; // // // // Summarize Result ... // result = isBullish || // isBearish; // } // // Validate ... result = isBullish || isBearish; // // Prepare Zone ... if (result) { } // // Prepare Targets ... if (result) { } // // Cleanup ... if (!result) { // zone.Clean(); XClean(targets); dir = X_DIRECTION_NONE; } pBar.Clean(); p2Bar.Clean(); p3Bar.Clean(); pBarPatterns.Clean(); patternConfig.Clean(); p2BarPatterns.Clean(); // return result; } bool validateByPVChange = false; bool validateByPVInside = false; // // Validate By PV Inside ... if (result && validateByPVInside) { // double pVale = fimaHelper.GetVale(pBar.Index()); double pPeak = fimaHelper.GetPeak(pBar.Index()); // bool isValePassed = pVale <= support.upper && pVale >= support.upper && fimaParser.IsValeSame(pBar.Index()); // bool isPeakPassed = pPeak <= resistance.upper && pPeak >= resistance.upper && fimaParser.IsPeakSame(pBar.Index()); // isBullish = isBullish && isValePassed; // isBearish = isBearish && isPeakPassed; // // Summarize Result ... result = isBullish || isBearish; } // // Validate by PV Change ... if (result && validateByPVChange) { // // bullish => p3, p2 vale under last ... // bearish => p3, p2 peak over last ... // bool isValePassed = fimaParser.IsValeUnderLast(p2Bar.Index()) || fimaParser.IsValeUnderLast(p3Bar.Index()); // bool isPeakPassed = fimaParser.IsPeakOverLast(p2Bar.Index()) || fimaParser.IsPeakOverLast(p3Bar.Index()); // isBullish = isBullish && isValePassed; // isBearish = isBearish && isPeakPassed; // // Summarize Result ... result = isBullish || isBearish; }