From c79ee42d7c1d9e56ca126df025cbe3e6709c525a Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sun, 9 Feb 2025 21:29:21 +0330 Subject: [PATCH] add support back indicators usage ... --- Classes/x-saherelm.x-expert.class.mq5 | 38 - Helpers/x-saherelm.x121.helper.mq5 | 2799 +++++++++-------- ...per.mq5 => x-saherelm.x121.xcc.helper.mq5} | 22 +- ...per.mq5 => x-saherelm.x121.xct.helper.mq5} | 22 +- ...herelm.xcc.mq5 => x-saherelm.x121.xcc.mq5} | 6 +- ...herelm.xct.mq5 => x-saherelm.x121.xct.mq5} | 6 +- Libraries/x-saherelm.x-poi.lib.mq5 | 82 +- .../x-121.smc.market.cycle.helper.class.mq5 | 28 +- X121SMCEA/Experts/x-121.smc.expert.class.mq5 | 44 +- X121SMCEA/Libraries/x-121.smc.guard.lib.mq5 | 50 +- X121SMCEA/Libraries/x-121.smc.lib.mq5 | 6 +- .../x-121.smc.xsupdemobs.signal.lib.mq5 | 266 +- .../Strategy/x-121.smc.strategy.class.mq5 | 138 +- 13 files changed, 1787 insertions(+), 1720 deletions(-) rename Helpers/{x-saherelm.xcc.helper.mq5 => x-saherelm.x121.xcc.helper.mq5} (92%) rename Helpers/{x-saherelm.xct.helper.mq5 => x-saherelm.x121.xct.helper.mq5} (91%) rename Indicators/{x-saherelm.xcc.mq5 => x-saherelm.x121.xcc.mq5} (99%) rename Indicators/{x-saherelm.xct.mq5 => x-saherelm.x121.xct.mq5} (98%) diff --git a/Classes/x-saherelm.x-expert.class.mq5 b/Classes/x-saherelm.x-expert.class.mq5 index b0dfce65..db922b45 100644 --- a/Classes/x-saherelm.x-expert.class.mq5 +++ b/Classes/x-saherelm.x-expert.class.mq5 @@ -23,8 +23,6 @@ // Imports ... #include "../Classes/x-saherelm.x-alert.class.mq5" #include "../Classes/x-saherelm.x-trade.class.mq5" -#include "../Helpers/x-saherelm.xcc.helper.mq5" -#include "../Helpers/x-saherelm.xct.helper.mq5" // // Definitions ... @@ -607,36 +605,6 @@ class XCBaseExpert : public XCBaseAlert // // Initialize Indicator Helpers ... - // - // Bar Timer ... - XCTInputs ctInputs; - ctInputs.Default(); // Default Configurations ... - mCTHelper = new XCXCTHelper(); - result = mCTHelper.Init( - _Symbol, - _Period, - ctInputs // - ); - if (!result) - { - return result; - } - - // - // Bar Styles ... - XCCInputs ccInputs; - ccInputs.Default(); // Default Configurations ... - mCCHelper = new XCXCCHelper(); - result = mCCHelper.Init( - _Symbol, - _Period, - ccInputs // - ); - if (!result) - { - return result; - } - // // Create Trader Instance and Configure it ... mTrader = new XCTrade( @@ -655,13 +623,9 @@ class XCBaseExpert : public XCBaseAlert { // delete mTrader; - delete mCTHelper; - delete mCCHelper; // ZeroMemory(mTrader); - ZeroMemory(mCTHelper); - ZeroMemory(mCCHelper); } /** @@ -866,8 +830,6 @@ class XCBaseExpert : public XCBaseAlert // XTimeTracker mTimeTracker; // Time Tracker for Providing Reports ... - XCXCTHelper *mCTHelper; // Bar Timer Indicator Helper class ... - XCXCCHelper *mCCHelper; // Chart Styler Indicator Helper Class ... // // Actions ... diff --git a/Helpers/x-saherelm.x121.helper.mq5 b/Helpers/x-saherelm.x121.helper.mq5 index d2e44d0e..8b1651b9 100644 --- a/Helpers/x-saherelm.x121.helper.mq5 +++ b/Helpers/x-saherelm.x121.helper.mq5 @@ -23,7 +23,9 @@ // // Imports ... #include "../Helpers/x-saherelm.x121.xatr.helper.mq5" +#include "../Helpers/x-saherelm.x121.xcc.helper.mq5" #include "../Helpers/x-saherelm.x121.xche.helper.mq5" +#include "../Helpers/x-saherelm.x121.xct.helper.mq5" #include "../Helpers/x-saherelm.x121.xdon.helper.mq5" #include "../Helpers/x-saherelm.x121.xhk.helper.mq5" #include "../Helpers/x-saherelm.x121.xpv.helper.mq5" @@ -37,6 +39,8 @@ struct X121Inputs // // Props ... bool showRSI; + X121XCCInputs xccInputs; + X121XCTInputs xctInputs; X121XPVInputs xpvInputs; X121XHKInputs xhkInputs; X121XATRInputs xatrInputs; @@ -61,6 +65,8 @@ struct X121Inputs void Clean() { // + xccInputs.Clean(); + xctInputs.Clean(); xpvInputs.Clean(); xhkInputs.Clean(); xatrInputs.Clean(); @@ -79,6 +85,8 @@ struct X121Inputs void Default() { // + xccInputs.Default(); + xctInputs.Default(); xpvInputs.Default(); xhkInputs.Default(); xatrInputs.Default(); @@ -101,6 +109,8 @@ struct X121Inputs // result = // + xccInputs.IsValid() && + xctInputs.IsValid() && xpvInputs.IsValid() && xhkInputs.IsValid() && xatrInputs.IsValid() && @@ -126,6 +136,8 @@ struct X121Inputs int result = 0; // + int xccMax = xccInputs.Max(); + int xctMax = xctInputs.Max(); int xpvMax = xpvInputs.Max(); int xhkMax = xpvInputs.Max(); int xatrMax = xatrInputs.Max(); @@ -135,7 +147,8 @@ struct X121Inputs int xvwapMax = xvwapInputs.Max(); // - result = MathMax(xpvMax, xpvMax); + result = MathMax(xccMax, xctMax); + result = MathMax(result, xpvMax); result = MathMax(result, xatrMax); result = MathMax(result, xstrMax); result = MathMax(result, xcheMax); @@ -1489,6 +1502,8 @@ class XCX121Helper : public XCBase // // Helpers ... + XCX121XCCHelper *xccHelper; + XCX121XCTHelper *xctHelper; XCX121XPVHelper *xpvHelper; XCX121XHKHelper *xhkHelper; XCX121XATRHelper *xatrHelper; @@ -1508,6 +1523,8 @@ class XCX121Helper : public XCBase ~XCX121Helper() { // + delete xccHelper; + delete xctHelper; delete xpvHelper; delete xhkHelper; delete xatrHelper; @@ -1517,6 +1534,8 @@ class XCX121Helper : public XCBase delete xvwapHelper; // + ZeroMemory(xccHelper); + ZeroMemory(xctHelper); ZeroMemory(xpvHelper); ZeroMemory(xhkHelper); ZeroMemory(xatrHelper); @@ -1578,6 +1597,8 @@ class XCX121Helper : public XCBase // mInputs = inputs; + xccInputs = inputs.xccInputs; + xctInputs = inputs.xctInputs; xpvInputs = inputs.xpvInputs; xhkInputs = inputs.xhkInputs; xatrInputs = inputs.xatrInputs; @@ -1589,115 +1610,141 @@ class XCX121Helper : public XCBase // // Initial Helpers ... - // // - // // XPV ... - // xpvHelper = new XCX121XPVHelper(); - // result = xpvHelper.Init( - // symbol, - // period, - // xpvInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XCC ... + xccHelper = new XCX121XCCHelper(); + result = xccHelper.Init( + symbol, + period, + xccInputs // + ); + if (!result) + { + return result; + } - // // - // // XHK ... - // xhkHelper = new XCX121XHKHelper(); - // result = xhkHelper.Init( - // symbol, - // period, - // xhkInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XCT ... + xctHelper = new XCX121XCTHelper(); + result = xctHelper.Init( + symbol, + period, + xctInputs // + ); + if (!result) + { + return result; + } - // // - // // XATR ... - // xatrHelper = new XCX121XATRHelper(); - // result = xatrHelper.Init( - // symbol, - // period, - // xatrInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XPV ... + xpvHelper = new XCX121XPVHelper(); + result = xpvHelper.Init( + symbol, + period, + xpvInputs // + ); + if (!result) + { + return result; + } - // // - // // XSTR ... - // xstrHelper = new XCX121XSTRHelper(); - // result = xstrHelper.Init( - // symbol, - // period, - // xstrInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XHK ... + xhkHelper = new XCX121XHKHelper(); + result = xhkHelper.Init( + symbol, + period, + xhkInputs // + ); + if (!result) + { + return result; + } - // // - // // XCHE ... - // xcheHelper = new XCX121XCHEHelper(); - // result = xcheHelper.Init( - // symbol, - // period, - // xcheInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XATR ... + xatrHelper = new XCX121XATRHelper(); + result = xatrHelper.Init( + symbol, + period, + xatrInputs // + ); + if (!result) + { + return result; + } - // // - // // XDON ... - // xdonHelper = new XCX121XDONHelper(); - // result = xdonHelper.Init( - // symbol, - // period, - // xdonInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XSTR ... + xstrHelper = new XCX121XSTRHelper(); + result = xstrHelper.Init( + symbol, + period, + xstrInputs // + ); + if (!result) + { + return result; + } - // // - // // XVWAP ... - // xvwapHelper = new XCX121XVWAPHelper(); - // result = xvwapHelper.Init( - // symbol, - // period, - // xvwapInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XCHE ... + xcheHelper = new XCX121XCHEHelper(); + result = xcheHelper.Init( + symbol, + period, + xcheInputs // + ); + if (!result) + { + return result; + } - // // - // if (inputs.showRSI) - // { - // // - // mRSIHandler = iRSI( - // symbol, - // period, - // xatrInputs.rsiLength, - // xatrInputs.rsiAppliedTo // - // ); + // + // XDON ... + xdonHelper = new XCX121XDONHelper(); + result = xdonHelper.Init( + symbol, + period, + xdonInputs // + ); + if (!result) + { + return result; + } - // // - // result = mRSIHandler != INVALID_HANDLE; - // if (!result) - // { - // return result; - // } - // } + // + // XVWAP ... + xvwapHelper = new XCX121XVWAPHelper(); + result = xvwapHelper.Init( + symbol, + period, + xvwapInputs // + ); + if (!result) + { + return result; + } + + // + if (inputs.showRSI) + { + // + mRSIHandler = iRSI( + symbol, + period, + xatrInputs.rsiLength, + xatrInputs.rsiAppliedTo // + ); + + // + result = mRSIHandler != INVALID_HANDLE; + if (!result) + { + return result; + } + } // return result; @@ -1884,1279 +1931,1279 @@ class XCX121Helper : public XCBase conditions.period = mPeriod; conditions.time = TimeCurrent(); - // // - // int zIndex = barIndex; - // int cIndex = zIndex + 1; - // int pIndex = cIndex + 1; - // int ppIndex = pIndex + 1; - - // // - // XOHCL zBar; - // result = zBar.Init( - // mSymbol, - // mPeriod, - // zIndex // - // ); - // if (!result) - // { - // return result; - // } - - // // - // XOHCL cBar; - // result = cBar.Init( - // mSymbol, - // mPeriod, - // cIndex // - // ); - // if (!result) - // { - // return result; - // } - - // // - // XOHCL pBar; - // result = pBar.Init( - // mSymbol, - // mPeriod, - // pIndex // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XPV ... - // X121XPVConditions xpvConditions; - // result = GetPVConditions( - // xpvConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XHK ... - // X121XHKConditions xhkConditions; - // result = GetHKConditions( - // xhkConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XATR ... - // X121XATRConditions xatrConditions; - // result = GetATRConditions( - // xatrConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XSTR ... - // X121XSTRConditions xstrConditions; - // result = GetSTRConditions( - // xstrConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XCHE ... - // X121XCHEConditions xcheConditions; - // result = GetCHEConditions( - // xcheConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XDON ... - // X121XDONConditions xdonConditions; - // result = GetDONConditions( - // xdonConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // XVWAP ... - // X121XVWAPConditions xvwapConditions; - // result = GetVWAPConditions( - // xvwapConditions, - // barIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - - // // - // // Fill Volume Buffer ... - // for (int i = barIndex; i < barIndex + loopback; i++) - // { - // // - // // Reading Bar Valuem ... - // long iVol = iVolume( - // mSymbol, - // mPeriod, - // i // - // ); - - // // - // Add( - // iVol, - // conditions.volumeBuffer // - // ); - // } - - // // - // // Fill X121 Conditions Reference by Using - // // Retrieved Conditions ... - - // // - // int cIDX = 1; - // int pIDX = cIDX + 1; - - // // - // // XPV ... - - // // - // // Buffers ... - - // // - // Copy( - // xpvConditions.peaksBuffer, - // conditions.peaksBuffer // - // ); - - // // - // Copy( - // xpvConditions.valesBuffer, - // conditions.valesBuffer // - // ); - - // // - // Copy( - // xpvConditions.sarBuffer, - // conditions.sarBuffer // - // ); - - // // - // Copy( - // xpvConditions.cHHBuffer, - // conditions.cHHBuffer // - // ); - - // // - // Copy( - // xpvConditions.cLLBuffer, - // conditions.cLLBuffer // - // ); - - // // - // Copy( - // xpvConditions.sHHBuffer, - // conditions.sHHBuffer // - // ); - - // // - // Copy( - // xpvConditions.sLLBuffer, - // conditions.sLLBuffer // - // ); - - // // - // Copy( - // xpvConditions.mHHBuffer, - // conditions.mHHBuffer // - // ); - - // // - // Copy( - // xpvConditions.mLLBuffer, - // conditions.mLLBuffer // - // ); - - // // - // Copy( - // xpvConditions.lHHBuffer, - // conditions.lHHBuffer // - // ); - - // // - // Copy( - // xpvConditions.lLLBuffer, - // conditions.lLLBuffer // - // ); - - // // - // Copy( - // xpvConditions.hHHBuffer, - // conditions.hHHBuffer // - // ); - - // // - // Copy( - // xpvConditions.hLLBuffer, - // conditions.hLLBuffer // - // ); - - // // - // // Conditions ... - - // // - // conditions.isNewPeak = xpvConditions.isNewPeak; - // conditions.isNewVale = xpvConditions.isNewVale; - // conditions.isSarBullish = xpvConditions.isSarBullish; - // conditions.isSarBearish = xpvConditions.isSarBearish; - // conditions.isNewPeakOverLast = xpvConditions.isNewPeakOverLast; - // conditions.isNewValeOverLast = xpvConditions.isNewValeOverLast; - // conditions.isNewPeakUnderLast = xpvConditions.isNewPeakUnderLast; - // conditions.isNewValeUnderLast = xpvConditions.isNewValeUnderLast; - // conditions.isRejectedPrevVale = xpvConditions.isRejectedPrevVale; - // conditions.isRejectedPrevPeak = xpvConditions.isRejectedPrevPeak; - // conditions.isBreakedUpPrevPeak = xpvConditions.isBreakedUpPrevPeak; - // conditions.isBreakedDownPrevVale = xpvConditions.isBreakedDownPrevVale; - // conditions.isSarSwitchedToBullish = xpvConditions.isSarSwitchedToBullish; - // conditions.isSarSwitchedToBearish = xpvConditions.isSarSwitchedToBearish; - - // // - // // XHK ... - - // // - // // Buffers ... - - // // - // Copy( - // xhkConditions.xhkRawOpenBuffer, - // conditions.xhkRawOpenBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkRawHighBuffer, - // conditions.xhkRawHighBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkRawLowBuffer, - // conditions.xhkRawLowBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkRawCloseBuffer, - // conditions.xhkRawCloseBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkSMOpenBuffer, - // conditions.xhkSMOpenBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkSMHighBuffer, - // conditions.xhkSMHighBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkSMLowBuffer, - // conditions.xhkSMLowBuffer // - // ); - - // // - // Copy( - // xhkConditions.xhkSMCloseBuffer, - // conditions.xhkSMCloseBuffer // - // ); - - // // - // // Conditions ... - // conditions.isSMHKBullish = xhkConditions.isSMHKBullish; - // conditions.isRawHKBullish = xhkConditions.isRawHKBullish; - // conditions.isSMHKBearish = xhkConditions.isSMHKBearish; - // conditions.isRawHKBearish = xhkConditions.isRawHKBearish; - // conditions.isBreakedUpSMHK = xhkConditions.isBreakedUpSMHK; - // conditions.isBreakedUpRawHK = xhkConditions.isBreakedUpRawHK; - // conditions.isRejectedUpSMHK = xhkConditions.isRejectedUpSMHK; - // conditions.isClosedOverSMHK = xhkConditions.isClosedOverSMHK; - // conditions.isRejectedUpRawHK = xhkConditions.isRejectedUpRawHK; - // conditions.isBreakedDownSMHK = xhkConditions.isBreakedDownSMHK; - // conditions.isClosedUnderSMHK = xhkConditions.isClosedUnderSMHK; - // conditions.isClosedOverRawHK = xhkConditions.isClosedOverRawHK; - // conditions.isClosedUnderRawHK = xhkConditions.isClosedUnderRawHK; - // conditions.isBreakedDownRawHK = xhkConditions.isBreakedDownRawHK; - // conditions.isRejectedDownSMHK = xhkConditions.isRejectedDownSMHK; - // conditions.isRejectedDownRawHK = xhkConditions.isRejectedDownRawHK; - // conditions.isRawHKBreakedUpSMHK = xhkConditions.isRawHKBreakedUpSMHK; - // conditions.isRawHKClosedOverSMHK = xhkConditions.isRawHKClosedOverSMHK; - // conditions.isSMHKSwitchedToBearish = xhkConditions.isSMHKSwitchedToBearish; - // conditions.isRawHKSwitchedToBearish = xhkConditions.isRawHKSwitchedToBearish; - // conditions.isRawHKClosedUnderSMHK = xhkConditions.isRawHKClosedUnderSMHK; - // conditions.isRawHKBreakedDownSMHK = xhkConditions.isRawHKBreakedDownSMHK; - // conditions.isSMHKSwitchedToBullish = xhkConditions.isSMHKSwitchedToBullish; - // conditions.isRawHKSwitchedToBullish = xhkConditions.isRawHKSwitchedToBullish; - - // // - // // XATR ... - - // // - // // Buffers ... - - // // - // Copy( - // xatrConditions.atrUpperBuffer, - // conditions.atrUpperBuffer // - // ); - - // // - // Copy( - // xatrConditions.atrLowerBuffer, - // conditions.atrLowerBuffer // - // ); - - // // - // Copy( - // xatrConditions.atrUpperRawBuffer, - // conditions.atrUpperRawBuffer // - // ); - - // // - // Copy( - // xatrConditions.atrLowerRawBuffer, - // conditions.atrLowerRawBuffer // - // ); - - // // - // Copy( - // xatrConditions.atrBuffer, - // conditions.atrBuffer // - // ); - - // // - // Copy( - // xatrConditions.rsiBuffer, - // conditions.rsiBuffer // - // ); - - // // - // // Conditions ... - - // // - // conditions.isRsiOverSold = xatrConditions.isRsiOverSold; - // conditions.isRsiOverBought = xatrConditions.isRsiOverBought; - // conditions.isBreakedUpAtrUpper = xatrConditions.isBreakedUpAtrUpper; - // conditions.isBreakedUpAtrLower = xatrConditions.isBreakedUpAtrLower; - // conditions.isClosedOverAtrUpper = xatrConditions.isClosedOverAtrUpper; - // conditions.isRejectedUpAtrUpper = xatrConditions.isRejectedUpAtrUpper; - // conditions.isRejectedUpAtrLower = xatrConditions.isRejectedUpAtrLower; - // conditions.isClosedOverAtrLower = xatrConditions.isClosedOverAtrLower; - // conditions.isBreakedDownAtrUpper = xatrConditions.isBreakedDownAtrUpper; - // conditions.isBreakedDownAtrLower = xatrConditions.isBreakedDownAtrLower; - // conditions.isClosedUnderAtrUpper = xatrConditions.isClosedUnderAtrUpper; - // conditions.isClosedUnderAtrLower = xatrConditions.isClosedUnderAtrLower; - // conditions.isRejectedDownAtrUpper = xatrConditions.isRejectedDownAtrUpper; - // conditions.isRejectedDownAtrLower = xatrConditions.isRejectedDownAtrLower; - // conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold; - // conditions.isRsiCrossedUnderOverSold = xatrConditions.isRsiCrossedUnderOverSold; - // conditions.isRsiCrossedOverOverBought = xatrConditions.isRsiCrossedOverOverBought; - // conditions.isRsiCrossedUnderOverBought = xatrConditions.isRsiCrossedUnderOverBought; - - // // - // // XSTR ... - - // // - // // Buffers ... - - // // - // Copy( - // xstrConditions.strBuffer, - // conditions.strBuffer // - // ); - - // // - // Copy( - // xstrConditions.strPriceBuffer, - // conditions.strPriceBuffer // - // ); - - // // - // Copy( - // xstrConditions.strUpBuffer, - // conditions.strUpBuffer // - // ); - - // // - // Copy( - // xstrConditions.strDownBuffer, - // conditions.strDownBuffer // - // ); - - // // - // Copy( - // xstrConditions.strStateBuffer, - // conditions.strStateBuffer // - // ); - - // // - // // Conditions ... - - // // - // conditions.isStrBullish = xstrConditions.isStrBullish; - // conditions.isStrBearish = xstrConditions.isStrBearish; - // conditions.isStrSwitchedToBullish = xstrConditions.isStrSwitchedToBullish; - // conditions.isStrSwitchedToBearish = xstrConditions.isStrSwitchedToBearish; - - // // - // // XCHE ... - - // // - // // Buffers ... - - // // - // Copy( - // xcheConditions.le1Buffer, - // conditions.le1Buffer // - // ); - - // // - // Copy( - // xcheConditions.se1Buffer, - // conditions.se1Buffer // - // ); - - // // - // Copy( - // xcheConditions.le2Buffer, - // conditions.le2Buffer // - // ); - - // // - // Copy( - // xcheConditions.se2Buffer, - // conditions.se2Buffer // - // ); - - // // - // Copy( - // xcheConditions.le1StartBuffer, - // conditions.le1StartBuffer // - // ); - - // // - // Copy( - // xcheConditions.se1StartBuffer, - // conditions.se1StartBuffer // - // ); - - // // - // Copy( - // xcheConditions.le2StartBuffer, - // conditions.le2StartBuffer // - // ); - - // // - // Copy( - // xcheConditions.se2StartBuffer, - // conditions.se2StartBuffer // - // ); - - // // - // // Conditions ... - - // conditions.isCheBullish = xcheConditions.isCheBullish; - // conditions.isCheBearish = xcheConditions.isCheBearish; - // conditions.isChe1Bullish = xcheConditions.isChe1Bullish; - // conditions.isChe1Bearish = xcheConditions.isChe1Bearish; - // conditions.isChe2Bullish = xcheConditions.isChe2Bullish; - // conditions.isChe2Bearish = xcheConditions.isChe2Bearish; - // conditions.isClosedOverCheMin = xcheConditions.isClosedOverCheMin; - // conditions.isClosedOverCheMax = xcheConditions.isClosedOverCheMax; - // conditions.isClosedUnderCheMin = xcheConditions.isClosedUnderCheMin; - // conditions.isClosedUnderCheMax = xcheConditions.isClosedUnderCheMax; - // conditions.isCheSwitchedToBullish = xcheConditions.isCheSwitchedToBullish; - // conditions.isCheSwitchedToBearish = xcheConditions.isCheSwitchedToBearish; - // conditions.isChe1SwitchedToBullish = xcheConditions.isChe1SwitchedToBullish; - // conditions.isChe1SwitchedToBearish = xcheConditions.isChe1SwitchedToBearish; - // conditions.isChe2SwitchedToBullish = xcheConditions.isChe2SwitchedToBullish; - // conditions.isChe2SwitchedToBearish = xcheConditions.isChe2SwitchedToBearish; - - // // - // // XDON ... - - // // - // // Buffers ... - - // // - // Copy( - // xdonConditions.donOpenUpperBuffer, - // conditions.donOpenUpperBuffer // - // ); - - // // - // Copy( - // xdonConditions.donOpenLowerBuffer, - // conditions.donOpenLowerBuffer // - // ); - - // // - // Copy( - // xdonConditions.donHighUpperBuffer, - // conditions.donHighUpperBuffer // - // ); - - // // - // Copy( - // xdonConditions.donHighLowerBuffer, - // conditions.donHighLowerBuffer // - // ); - - // // - // Copy( - // xdonConditions.donLowUpperBuffer, - // conditions.donLowUpperBuffer // - // ); - - // // - // Copy( - // xdonConditions.donLowLowerBuffer, - // conditions.donLowLowerBuffer // - // ); - - // // - // Copy( - // xdonConditions.donCloseUpperBuffer, - // conditions.donCloseUpperBuffer // - // ); - - // // - // Copy( - // xdonConditions.donCloseLowerBuffer, - // conditions.donCloseLowerBuffer // - // ); - - // // - // // Conditions ... - - // // - // conditions.isBreakedDonLowUpper = xdonConditions.isBreakedDonLowUpper; - // conditions.isBreakedDonLowLower = xdonConditions.isBreakedDonLowLower; - // conditions.isRejectedDonLowUpper = xdonConditions.isRejectedDonLowUpper; - // conditions.isRejectedDonLowLower = xdonConditions.isRejectedDonLowLower; - // conditions.isBreakedDonOpenUpper = xdonConditions.isBreakedDonOpenUpper; - // conditions.isBreakedDonHighUpper = xdonConditions.isBreakedDonHighUpper; - // conditions.isBreakedDonOpenLower = xdonConditions.isBreakedDonOpenLower; - // conditions.isBreakedDonHighLower = xdonConditions.isBreakedDonHighLower; - // conditions.isRejectedDonOpenUpper = xdonConditions.isRejectedDonOpenUpper; - // conditions.isRejectedDonHighUpper = xdonConditions.isRejectedDonHighUpper; - // conditions.isRejectedDonOpenLower = xdonConditions.isRejectedDonOpenLower; - // conditions.isRejectedDonHighLower = xdonConditions.isRejectedDonHighLower; - // conditions.isBreakedDonCloseUpper = xdonConditions.isBreakedDonCloseUpper; - // conditions.isBreakedDonCloseLower = xdonConditions.isBreakedDonCloseLower; - // conditions.isRejectedDonCloseUpper = xdonConditions.isRejectedDonCloseUpper; - // conditions.isRejectedDonCloseLower = xdonConditions.isRejectedDonCloseLower; - - // // - // // XVWAP ... - - // // - // // Buffers ... - - // // - // Copy( - // xvwapConditions.vwapFastBuffer, - // conditions.vwapFastBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapMidBuffer, - // conditions.vwapMidBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapSlowBuffer, - // conditions.vwapSlowBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapVolumeBuffer, - // conditions.vwapVolumeBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapPriceBuffer, - // conditions.vwapPriceBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapFastStateBuffer, - // conditions.vwapFastStateBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapMidStateBuffer, - // conditions.vwapMidStateBuffer // - // ); - - // // - // Copy( - // xvwapConditions.vwapSlowStateBuffer, - // conditions.vwapSlowStateBuffer // - // ); - - // // - // // Conditions ... - - // // - // conditions.isVWapMidBullish = xvwapConditions.isVWapMidBullish; - // conditions.isVWapMidBearish = xvwapConditions.isVWapMidBearish; - // conditions.isVWapFastBullish = xvwapConditions.isVWapFastBullish; - // conditions.isVWapFastBearish = xvwapConditions.isVWapFastBearish; - // conditions.isVWapMidNeutural = xvwapConditions.isVWapMidNeutural; - // conditions.isVWapSlowBullish = xvwapConditions.isVWapSlowBullish; - // conditions.isVWapSlowBearish = xvwapConditions.isVWapSlowBearish; - // conditions.isVWapFastOverMid = xvwapConditions.isVWapFastOverMid; - // conditions.isVWapMidOverSlow = xvwapConditions.isVWapMidOverSlow; - // conditions.isVWapFastNeutural = xvwapConditions.isVWapFastNeutural; - // conditions.isVWapSlowNeutural = xvwapConditions.isVWapSlowNeutural; - // conditions.isVWapFastUnderMid = xvwapConditions.isVWapFastUnderMid; - // conditions.isVWapMidUnderSlow = xvwapConditions.isVWapMidUnderSlow; - // conditions.isVWapBullishState = xvwapConditions.isVWapBullishState; - // conditions.isVWapBearishState = xvwapConditions.isVWapBearishState; - // conditions.isVWapNeuturalState = xvwapConditions.isVWapNeuturalState; - // conditions.isVWapBullishOrdered = xvwapConditions.isVWapBullishOrdered; - // conditions.isVWapBearishOrdered = xvwapConditions.isVWapBearishOrdered; - // conditions.isVWapSwitchedToBullishState = xvwapConditions.isVWapSwitchedToBullishState; - // conditions.isVWapSwitchedToBearishState = xvwapConditions.isVWapSwitchedToBearishState; - // conditions.isVWapSwitchedToNeuturalState = xvwapConditions.isVWapSwitchedToNeuturalState; - // conditions.isVWapSwitchedToBullishOrdered = xvwapConditions.isVWapSwitchedToBullishOrdered; - // conditions.isVWapSwitchedToBearishOrdered = xvwapConditions.isVWapSwitchedToBearishOrdered; - - // // - // // Slopes ... - - // // - // double rsiSlope = GetSlope(conditions.rsiBuffer, pIDX, cIDX); - // double strSlope = GetSlope(conditions.strBuffer, pIDX, cIDX); - // double atrUpperSlope = GetSlope(conditions.atrUpperBuffer, pIDX, cIDX); - // double atrLowerSlope = GetSlope(conditions.atrLowerBuffer, pIDX, cIDX); - // double vwapFastSlope = GetSlope(conditions.vwapFastBuffer, pIDX, cIDX); - // double vwapMidSlope = GetSlope(conditions.vwapMidBuffer, pIDX, cIDX); - // double vwapSlowSlope = GetSlope(conditions.vwapSlowBuffer, pIDX, cIDX); - - // // - // bool isRsiSlopeBullish = rsiSlope > 0; - // bool isStrSlopeBullish = strSlope > 0; - // bool isAtrUpperSlopeBullish = atrUpperSlope > 0; - // bool isAtrLowerSlopeBullish = atrLowerSlope > 0; - // bool isVwapFastSlopeBullish = vwapFastSlope > 0; - // bool isVwapMidSlopeBullish = vwapMidSlope > 0; - // bool isVwapSlowSlopeBullish = vwapSlowSlope > 0; - - // // - // bool isRsiSlopeBearish = rsiSlope < 0; - // bool isStrSlopeBearish = strSlope < 0; - // bool isAtrUpperSlopeBearish = atrUpperSlope < 0; - // bool isAtrLowerSlopeBearish = atrLowerSlope < 0; - // bool isVwapFastSlopeBearish = vwapFastSlope < 0; - // bool isVwapMidSlopeBearish = vwapMidSlope < 0; - // bool isVwapSlowSlopeBearish = vwapSlowSlope < 0; - - // // - // conditions.rsiSlope = rsiSlope; - // conditions.strSlope = strSlope; - // conditions.vwapMidSlope = vwapMidSlope; - // conditions.vwapSlowSlope = vwapSlowSlope; - // conditions.atrUpperSlope = atrUpperSlope; - // conditions.atrLowerSlope = atrLowerSlope; - // conditions.vwapFastSlope = vwapFastSlope; - // conditions.isRsiSlopeBearish = isRsiSlopeBearish; - // conditions.isStrSlopeBearish = isStrSlopeBearish; - // conditions.isRsiSlopeBullish = isRsiSlopeBullish; - // conditions.isStrSlopeBullish = isStrSlopeBullish; - // conditions.isVwapMidSlopeBearish = isVwapMidSlopeBearish; - // conditions.isVwapMidSlopeBullish = isVwapMidSlopeBullish; - // conditions.isAtrUpperSlopeBearish = isAtrUpperSlopeBearish; - // conditions.isAtrLowerSlopeBearish = isAtrLowerSlopeBearish; - // conditions.isVwapFastSlopeBearish = isVwapFastSlopeBearish; - // conditions.isVwapSlowSlopeBearish = isVwapSlowSlopeBearish; - // conditions.isAtrUpperSlopeBullish = isAtrUpperSlopeBullish; - // conditions.isAtrLowerSlopeBullish = isAtrLowerSlopeBullish; - // conditions.isVwapFastSlopeBullish = isVwapFastSlopeBullish; - // conditions.isVwapSlowSlopeBullish = isVwapSlowSlopeBullish; - - // // - // // Complex Conditions ... - - // // - // double vwapFast = conditions.vwapFastBuffer[cIDX]; - // double vwapMid = conditions.vwapMidBuffer[cIDX]; - // double vwapSlow = conditions.vwapSlowBuffer[cIDX]; - - // // - // double vwaps[3] = { - // vwapFast, - // vwapMid, - // vwapSlow // - // }; - - // // - // double vwapMin = GetMin(vwaps); - // double vwapMax = GetMax(vwaps); - - // // - // bool isVWapMinBreakedUp = IsBarBreak( - // vwapMin, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isVWapMinBreakedDown = IsBarBreak( - // vwapMin, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isVWapMaxBreakedUp = IsBarBreak( - // vwapMax, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isVWapMaxBreakedDown = IsBarBreak( - // vwapMax, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isVWapFatsOverMid = conditions.vwapFastBuffer[cIDX] > conditions.vwapMidBuffer[cIDX]; - // bool isVWapFatsOverMidPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapMidBuffer[pIDX]; - - // // - // bool isVWapFatsUnderMid = conditions.vwapFastBuffer[cIDX] < conditions.vwapMidBuffer[cIDX]; - // bool isVWapFatsUnderMidPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapMidBuffer[pIDX]; - - // // - // bool isVWapFatsOverSlow = conditions.vwapFastBuffer[cIDX] > conditions.vwapSlowBuffer[cIDX]; - // bool isVWapFatsOverSlowPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapSlowBuffer[pIDX]; - - // // - // bool isVWapFatsUnderSlow = conditions.vwapFastBuffer[cIDX] < conditions.vwapSlowBuffer[cIDX]; - // bool isVWapFatsUnderSlowPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapSlowBuffer[pIDX]; - - // // - // bool isVWapFastCrossedOverMid = isVWapFatsOverMid && - // !isVWapFatsOverMidPrev; - // bool isVWapFastCrossedUnderMid = isVWapFatsUnderMid && - // !isVWapFatsUnderMidPrev; - - // // - // bool isVWapFastCrossedOverSlow = isVWapFatsOverSlow && - // !isVWapFatsOverSlowPrev; - // bool isVWapFastCrossedUnderSlow = isVWapFatsUnderSlow && - // !isVWapFatsUnderSlowPrev; - - // // - // bool isClosedOverVWapMin = cBar.close > vwapMin; - // bool isClosedUnderVWapMin = cBar.close < vwapMin; - - // // - // bool isClosedOverVWapMax = cBar.close > vwapMax; - // bool isClosedUnderVWapMax = cBar.close < vwapMax; - - // // - // bool isSarEqualsToPeak = - // conditions.sarBuffer[cIDX] == conditions.peaksBuffer[cIDX]; - // bool isSarEqualsToVale = - // conditions.sarBuffer[cIDX] == conditions.valesBuffer[cIDX]; - - // // - // bool isSarIncreased = conditions.sarBuffer[cIDX] > conditions.sarBuffer[pIDX]; - // bool isSarDecreased = conditions.sarBuffer[cIDX] < conditions.sarBuffer[pIDX]; - - // // - // double prevSar = conditions.sarBuffer[pIDX]; - // double prevStr = conditions.strBuffer[pIDX]; - // double prevCheLE1 = conditions.le1Buffer[pIDX]; - // double prevCheLE2 = conditions.le2Buffer[pIDX]; - // double prevCheSE1 = conditions.se1Buffer[pIDX]; - // double prevCheSE2 = conditions.se2Buffer[pIDX]; - // double prevAtrUpper = conditions.atrUpperBuffer[pIDX]; - // double prevAtrLower = conditions.atrLowerBuffer[pIDX]; - - // // - // double ches[]; - // if (prevCheLE1 != EMPTY_VALUE) - // { - // // - // Add( - // prevCheLE1, - // ches // - // ); - // } - // if (prevCheLE2 != EMPTY_VALUE) - // { - // // - // Add( - // prevCheLE2, - // ches // - // ); - // } - // if (prevCheSE1 != EMPTY_VALUE) - // { - // // - // Add( - // prevCheSE1, - // ches // - // ); - // } - // if (prevCheSE2 != EMPTY_VALUE) - // { - // // - // Add( - // prevCheSE2, - // ches // - // ); - // } - - // // - // double cheMin = GetMin(ches); - // double cheMax = GetMax(ches); - - // // - // bool isBreakedUpPrevSar = IsBarBreak( - // prevSar, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevSar = IsBarBreak( - // prevSar, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevStr = IsBarBreak( - // prevStr, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevStr = IsBarBreak( - // prevStr, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isRejectedUpPrevAtrUpper = IsBarReject( - // prevAtrUpper, - // X_DIRECTION_BULLISH, - // cBar // - // ); - - // // - // bool isRejectedDownPrevAtrUpper = IsBarReject( - // prevAtrUpper, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isRejectedUpPrevAtrLower = IsBarReject( - // prevAtrLower, - // X_DIRECTION_BULLISH, - // cBar // - // ); - - // // - // bool isRejectedDownPrevAtrLower = IsBarReject( - // prevAtrLower, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevAtrUpper = IsBarBreak( - // prevAtrUpper, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevAtrUpper = IsBarBreak( - // prevAtrUpper, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevAtrLower = IsBarBreak( - // prevAtrLower, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevAtrLower = IsBarBreak( - // prevAtrLower, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevCheLE1 = IsBarBreak( - // prevCheLE1, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedUpPrevCheLE2 = IsBarBreak( - // prevCheLE2, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedUpPrevCheSE1 = IsBarBreak( - // prevCheSE1, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedUpPrevCheSE2 = IsBarBreak( - // prevCheSE2, - // X_DIRECTION_BULLISH, - // cBar // - // ); - - // // - // bool isBreakedDownPrevCheLE1 = IsBarBreak( - // prevCheLE1, - // X_DIRECTION_BEARISH, - // cBar // - // ); - // bool isBreakedDownPrevCheLE2 = IsBarBreak( - // prevCheLE2, - // X_DIRECTION_BEARISH, - // cBar // - // ); - // bool isBreakedDownPrevCheSE1 = IsBarBreak( - // prevCheSE1, - // X_DIRECTION_BEARISH, - // cBar // - // ); - // bool isBreakedDownPrevCheSE2 = IsBarBreak( - // prevCheSE2, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevCheMin = IsBarBreak( - // cheMin, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevCheMin = IsBarBreak( - // cheMin, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isBreakedUpPrevCheMax = IsBarBreak( - // cheMax, - // X_DIRECTION_BULLISH, - // cBar // - // ); - // bool isBreakedDownPrevCheMax = IsBarBreak( - // cheMax, - // X_DIRECTION_BEARISH, - // cBar // - // ); - - // // - // bool isSarCrossedUnderPeak = - // conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] && - // !(conditions.sarBuffer[pIDX] < conditions.peaksBuffer[pIDX]); - // bool isSarCrossedOverVale = - // conditions.sarBuffer[cIDX] > conditions.valesBuffer[cIDX] && - // !(conditions.sarBuffer[pIDX] > conditions.valesBuffer[pIDX]); - - // // - // bool isStrEqualsToPeak = - // conditions.strBuffer[cIDX] == conditions.peaksBuffer[cIDX]; - // bool isStrEqualsToVale = - // conditions.strBuffer[cIDX] == conditions.valesBuffer[cIDX]; - - // // - // bool isStrCrossedUnderPeak = - // conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX] && - // !(conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX]); - // bool isStrCrossedOverVale = - // conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX] && - // !(conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX]); - - // // - // bool isPeakOverAtrUpper = - // conditions.peaksBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; - // bool isValeUnderAtrLower = - // conditions.valesBuffer[cIDX] > conditions.atrLowerBuffer[cIDX]; - - // // - // bool isNewPeakOverAtrUpper = - // isPeakOverAtrUpper && - // conditions.isNewPeak; - // bool isNewValeUnderAtrLower = - // isValeUnderAtrLower && - // conditions.isNewVale; - - // // - // bool isStrUpperOverPeak = - // conditions.strBuffer[cIDX] > conditions.peaksBuffer[cIDX]; - // bool isStrUpperOverPeakPrev = - // conditions.strBuffer[pIDX] > conditions.peaksBuffer[pIDX]; - - // // - // bool isStrUpperUnderPeak = - // conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX]; - // bool isStrUpperUnderPeakPrev = - // conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX]; - - // // - // bool isStrUpperCrossedOverPeak = isStrUpperOverPeak && - // !isStrUpperOverPeakPrev; - // bool isStrUpperCrossedUnderPeak = isStrUpperUnderPeak && - // !isStrUpperUnderPeakPrev; - - // // - // bool isStrLowerOverVale = - // conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX]; - // bool isStrLowerOverValePrev = - // conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX]; - - // // - // bool isStrLowerUnderVale = - // conditions.strBuffer[cIDX] < conditions.valesBuffer[cIDX]; - // bool isStrLowerUnderValePrev = - // conditions.strBuffer[pIDX] < conditions.valesBuffer[pIDX]; - - // // - // bool isStrLowerCrossedOverVale = isStrLowerOverVale && - // !isStrLowerOverValePrev; - // bool isStrLowerCrossedUnderVale = isStrLowerUnderVale && - // !isStrLowerUnderValePrev; - - // // - // bool isDonHighUpperEqualsToPeak = - // conditions.donHighUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX]; - // bool isDonLowLowerEqualsToVale = - // conditions.donLowLowerBuffer[cIDX] == conditions.valesBuffer[cIDX]; - - // // - // bool isStrUpperOverAtrUpper = - // conditions.strUpBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; - // bool isStrUpperOverAtrUpperPrev = - // conditions.strUpBuffer[pIDX] > conditions.atrUpperBuffer[pIDX]; - // bool isStrUpperCrossedOverAtrUpper = isStrUpperOverAtrUpper && - // !isStrUpperOverAtrUpperPrev; - - // // - // bool isStrUpperUnderAtrUpper = - // conditions.strUpBuffer[cIDX] < conditions.atrUpperBuffer[cIDX]; - // bool isStrUpperUnderAtrUpperPrev = - // conditions.strUpBuffer[pIDX] < conditions.atrUpperBuffer[pIDX]; - // bool isStrUpperCrossedUnderAtrUpper = isStrUpperUnderAtrUpper && - // !isStrUpperUnderAtrUpperPrev; - - // // - // bool isStrLowerOverAtrLower = - // conditions.strDownBuffer[cIDX] > conditions.atrLowerBuffer[cIDX]; - // bool isStrLowerOverAtrLowerPrev = - // conditions.strDownBuffer[pIDX] > conditions.atrLowerBuffer[pIDX]; - // bool isStrLowerCrossedOverAtrLower = isStrLowerOverAtrLower && - // !isStrLowerOverAtrLowerPrev; - - // // - // bool isStrLowerUnderAtrLower = - // conditions.strDownBuffer[cIDX] < conditions.atrLowerBuffer[cIDX]; - // bool isStrLowerUnderAtrLowerPrev = - // conditions.strDownBuffer[pIDX] < conditions.atrLowerBuffer[pIDX]; - // bool isStrLowerCrossedUnderAtrLower = isStrLowerUnderAtrLower && - // !isStrLowerUnderAtrLowerPrev; - - // // - // bool isStrUpperOverDonHighUpper = - // conditions.strUpBuffer[cIDX] > conditions.donHighUpperBuffer[cIDX]; - // bool isStrUpperOverDonHighUpperPrev = - // conditions.strUpBuffer[pIDX] > conditions.donHighUpperBuffer[pIDX]; - // bool isStrUpperCrossedOverDonHighUpper = isStrUpperOverDonHighUpper && - // !isStrUpperOverDonHighUpperPrev; - - // // - // bool isStrUpperUnderDonHighUpper = - // conditions.strUpBuffer[cIDX] < conditions.donHighUpperBuffer[cIDX]; - // bool isStrUpperUnderDonHighUpperPrev = - // conditions.strUpBuffer[pIDX] < conditions.donHighUpperBuffer[pIDX]; - // bool isStrUpperCrossedUnderDonHighUpper = isStrUpperUnderDonHighUpper && - // !isStrUpperUnderDonHighUpperPrev; - - // // - // bool isStrLowerOverDonLowLower = - // conditions.strDownBuffer[cIDX] > conditions.donLowLowerBuffer[cIDX]; - // bool isStrLowerOverDonLowLowerPrev = - // conditions.strDownBuffer[pIDX] > conditions.donLowLowerBuffer[pIDX]; - // bool isStrLowerCrossedOverDonLowLower = isStrLowerOverDonLowLower && - // !isStrLowerOverDonLowLowerPrev; - - // // - // bool isStrLowerUnderDonLowLower = - // conditions.strDownBuffer[cIDX] < conditions.donLowLowerBuffer[cIDX]; - // bool isStrLowerUnderDonLowLowerPrev = - // conditions.strDownBuffer[pIDX] < conditions.donLowLowerBuffer[pIDX]; - // bool isStrLowerCrossedUnderDonLowLower = isStrLowerUnderDonLowLower && - // !isStrLowerUnderDonLowLowerPrev; - - // // - // bool isAtrUpperOverPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]; - // bool isAtrUpperEqualsToPeak = conditions.atrUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX]; - - // // - // bool isAtrUpperCrossedUpPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX] && - // !(conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]); - // bool isAtrUpperCrossedDownPeak = conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX] && - // !(conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX]); - - // // - // bool isAtrLowerUnderVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]; - // bool isAtrLowerEqualsToVale = conditions.atrUpperBuffer[cIDX] == conditions.valesBuffer[cIDX]; - - // // - // bool isAtrLowerCrossedUpVale = conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX] && - // !(conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX]); - // bool isAtrLowerCrossedDownVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX] && - // !(conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]); - - // // - // conditions.cheMin = cheMin; - // conditions.cheMax = cheMax; - // conditions.vwapMin = vwapMin; - // conditions.vwapMax = vwapMax; - - // // - // conditions.isSarIncreased = isSarIncreased; - // conditions.isSarDecreased = isSarDecreased; - // conditions.isSarEqualsToPeak = isSarEqualsToPeak; - // conditions.isSarEqualsToVale = isSarEqualsToVale; - // conditions.isStrEqualsToPeak = isStrEqualsToPeak; - // conditions.isStrEqualsToVale = isStrEqualsToVale; - // conditions.isStrUpperOverPeak = isStrUpperOverPeak; - // conditions.isPeakOverAtrUpper = isPeakOverAtrUpper; - // conditions.isStrLowerOverVale = isStrLowerOverVale; - // conditions.isVWapMinBreakedUp = isVWapMinBreakedUp; - // conditions.isVWapMaxBreakedUp = isVWapMaxBreakedUp; - // conditions.isBreakedUpPrevSar = isBreakedUpPrevSar; - // conditions.isBreakedUpPrevStr = isBreakedUpPrevStr; - // conditions.isAtrUpperOverPeak = isAtrUpperOverPeak; - // conditions.isAtrLowerUnderVale = isAtrLowerUnderVale; - // conditions.isStrLowerUnderVale = isStrLowerUnderVale; - // conditions.isStrUpperUnderPeak = isStrUpperUnderPeak; - // conditions.isValeUnderAtrLower = isValeUnderAtrLower; - // conditions.isClosedOverVWapMin = isClosedOverVWapMin; - // conditions.isClosedOverVWapMax = isClosedOverVWapMax; - // conditions.isClosedUnderVWapMin = isClosedUnderVWapMin; - // conditions.isClosedUnderVWapMax = isClosedUnderVWapMax; - // conditions.isVWapMinBreakedDown = isVWapMinBreakedDown; - // conditions.isVWapMaxBreakedDown = isVWapMaxBreakedDown; - // conditions.isSarCrossedOverVale = isSarCrossedOverVale; - // conditions.isStrCrossedOverVale = isStrCrossedOverVale; - // conditions.isBreakedDownPrevStr = isBreakedDownPrevStr; - // conditions.isBreakedDownPrevSar = isBreakedDownPrevSar; - // conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak; - // conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak; - // conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper; - // conditions.isBreakedUpPrevCheLE1 = isBreakedUpPrevCheLE1; - // conditions.isBreakedUpPrevCheLE2 = isBreakedUpPrevCheLE2; - // conditions.isBreakedUpPrevCheSE1 = isBreakedUpPrevCheSE1; - // conditions.isBreakedUpPrevCheSE2 = isBreakedUpPrevCheSE2; - // conditions.isBreakedUpPrevCheMin = isBreakedUpPrevCheMin; - // conditions.isBreakedUpPrevCheMax = isBreakedUpPrevCheMax; - // conditions.isAtrUpperEqualsToPeak = isAtrUpperEqualsToPeak; - // conditions.isAtrLowerEqualsToVale = isAtrLowerEqualsToVale; - // conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower; - // conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper; - // conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower; - // conditions.isBreakedDownPrevCheMin = isBreakedDownPrevCheMin; - // conditions.isBreakedDownPrevCheMax = isBreakedDownPrevCheMax; - // conditions.isBreakedDownPrevCheLE1 = isBreakedDownPrevCheLE1; - // conditions.isBreakedDownPrevCheLE2 = isBreakedDownPrevCheLE2; - // conditions.isBreakedDownPrevCheSE1 = isBreakedDownPrevCheSE1; - // conditions.isBreakedDownPrevCheSE2 = isBreakedDownPrevCheSE2; - // conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper; - // conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower; - // conditions.isBreakedUpPrevAtrUpper = isBreakedUpPrevAtrUpper; - // conditions.isBreakedUpPrevAtrLower = isBreakedUpPrevAtrLower; - // conditions.isAtrUpperCrossedUpPeak = isAtrUpperCrossedUpPeak; - // conditions.isAtrLowerCrossedUpVale = isAtrLowerCrossedUpVale; - // conditions.isVWapFastCrossedOverMid = isVWapFastCrossedOverMid; - // conditions.isRejectedUpPrevAtrUpper = isRejectedUpPrevAtrUpper; - // conditions.isRejectedUpPrevAtrLower = isRejectedUpPrevAtrLower; - // conditions.isAtrUpperCrossedDownPeak = isAtrUpperCrossedDownPeak; - // conditions.isAtrLowerCrossedDownVale = isAtrLowerCrossedDownVale; - // conditions.isBreakedDownPrevAtrUpper = isBreakedDownPrevAtrUpper; - // conditions.isBreakedDownPrevAtrLower = isBreakedDownPrevAtrLower; - // conditions.isVWapFastCrossedUnderMid = isVWapFastCrossedUnderMid; - // conditions.isDonLowLowerEqualsToVale = isDonLowLowerEqualsToVale; - // conditions.isStrUpperCrossedOverPeak = isStrUpperCrossedOverPeak; - // conditions.isStrLowerCrossedOverVale = isStrLowerCrossedOverVale; - // conditions.isStrLowerOverDonLowLower = isStrLowerOverDonLowLower; - // conditions.isVWapFastCrossedOverSlow = isVWapFastCrossedOverSlow; - // conditions.isRejectedDownPrevAtrUpper = isRejectedDownPrevAtrUpper; - // conditions.isRejectedDownPrevAtrLower = isRejectedDownPrevAtrLower; - // conditions.isVWapFastCrossedUnderSlow = isVWapFastCrossedUnderSlow; - // conditions.isStrUpperOverDonHighUpper = isStrUpperOverDonHighUpper; - // conditions.isStrLowerUnderDonLowLower = isStrLowerUnderDonLowLower; - // conditions.isDonHighUpperEqualsToPeak = isDonHighUpperEqualsToPeak; - // conditions.isStrUpperCrossedUnderPeak = isStrUpperCrossedUnderPeak; - // conditions.isStrLowerCrossedUnderVale = isStrLowerCrossedUnderVale; - // conditions.isStrUpperUnderDonHighUpper = isStrUpperUnderDonHighUpper; - // conditions.isStrLowerCrossedOverAtrLower = isStrLowerCrossedOverAtrLower; - // conditions.isStrUpperCrossedOverAtrUpper = isStrUpperCrossedOverAtrUpper; - // conditions.isStrUpperCrossedUnderAtrUpper = isStrUpperCrossedUnderAtrUpper; - // conditions.isStrLowerCrossedUnderAtrLower = isStrLowerCrossedUnderAtrLower; - // conditions.isStrLowerCrossedOverDonLowLower = isStrLowerCrossedOverDonLowLower; - // conditions.isStrUpperCrossedOverDonHighUpper = isStrUpperCrossedOverDonHighUpper; - // conditions.isStrLowerCrossedUnderDonLowLower = isStrLowerCrossedUnderDonLowLower; - // conditions.isStrUpperCrossedUnderDonHighUpper = isStrUpperCrossedUnderDonHighUpper; + // + int zIndex = barIndex; + int cIndex = zIndex + 1; + int pIndex = cIndex + 1; + int ppIndex = pIndex + 1; + + // + XOHCL zBar; + result = zBar.Init( + mSymbol, + mPeriod, + zIndex // + ); + if (!result) + { + return result; + } + + // + XOHCL cBar; + result = cBar.Init( + mSymbol, + mPeriod, + cIndex // + ); + if (!result) + { + return result; + } + + // + XOHCL pBar; + result = pBar.Init( + mSymbol, + mPeriod, + pIndex // + ); + if (!result) + { + return result; + } + + // + // XPV ... + X121XPVConditions xpvConditions; + result = GetPVConditions( + xpvConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XHK ... + X121XHKConditions xhkConditions; + result = GetHKConditions( + xhkConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XATR ... + X121XATRConditions xatrConditions; + result = GetATRConditions( + xatrConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XSTR ... + X121XSTRConditions xstrConditions; + result = GetSTRConditions( + xstrConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XCHE ... + X121XCHEConditions xcheConditions; + result = GetCHEConditions( + xcheConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XDON ... + X121XDONConditions xdonConditions; + result = GetDONConditions( + xdonConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // XVWAP ... + X121XVWAPConditions xvwapConditions; + result = GetVWAPConditions( + xvwapConditions, + barIndex, + loopback // + ); + if (!result) + { + return result; + } + + // + // Fill Volume Buffer ... + for (int i = barIndex; i < barIndex + loopback; i++) + { + // + // Reading Bar Valuem ... + long iVol = iVolume( + mSymbol, + mPeriod, + i // + ); + + // + Add( + iVol, + conditions.volumeBuffer // + ); + } + + // + // Fill X121 Conditions Reference by Using + // Retrieved Conditions ... + + // + int cIDX = 1; + int pIDX = cIDX + 1; + + // + // XPV ... + + // + // Buffers ... + + // + Copy( + xpvConditions.peaksBuffer, + conditions.peaksBuffer // + ); + + // + Copy( + xpvConditions.valesBuffer, + conditions.valesBuffer // + ); + + // + Copy( + xpvConditions.sarBuffer, + conditions.sarBuffer // + ); + + // + Copy( + xpvConditions.cHHBuffer, + conditions.cHHBuffer // + ); + + // + Copy( + xpvConditions.cLLBuffer, + conditions.cLLBuffer // + ); + + // + Copy( + xpvConditions.sHHBuffer, + conditions.sHHBuffer // + ); + + // + Copy( + xpvConditions.sLLBuffer, + conditions.sLLBuffer // + ); + + // + Copy( + xpvConditions.mHHBuffer, + conditions.mHHBuffer // + ); + + // + Copy( + xpvConditions.mLLBuffer, + conditions.mLLBuffer // + ); + + // + Copy( + xpvConditions.lHHBuffer, + conditions.lHHBuffer // + ); + + // + Copy( + xpvConditions.lLLBuffer, + conditions.lLLBuffer // + ); + + // + Copy( + xpvConditions.hHHBuffer, + conditions.hHHBuffer // + ); + + // + Copy( + xpvConditions.hLLBuffer, + conditions.hLLBuffer // + ); + + // + // Conditions ... + + // + conditions.isNewPeak = xpvConditions.isNewPeak; + conditions.isNewVale = xpvConditions.isNewVale; + conditions.isSarBullish = xpvConditions.isSarBullish; + conditions.isSarBearish = xpvConditions.isSarBearish; + conditions.isNewPeakOverLast = xpvConditions.isNewPeakOverLast; + conditions.isNewValeOverLast = xpvConditions.isNewValeOverLast; + conditions.isNewPeakUnderLast = xpvConditions.isNewPeakUnderLast; + conditions.isNewValeUnderLast = xpvConditions.isNewValeUnderLast; + conditions.isRejectedPrevVale = xpvConditions.isRejectedPrevVale; + conditions.isRejectedPrevPeak = xpvConditions.isRejectedPrevPeak; + conditions.isBreakedUpPrevPeak = xpvConditions.isBreakedUpPrevPeak; + conditions.isBreakedDownPrevVale = xpvConditions.isBreakedDownPrevVale; + conditions.isSarSwitchedToBullish = xpvConditions.isSarSwitchedToBullish; + conditions.isSarSwitchedToBearish = xpvConditions.isSarSwitchedToBearish; + + // + // XHK ... + + // + // Buffers ... + + // + Copy( + xhkConditions.xhkRawOpenBuffer, + conditions.xhkRawOpenBuffer // + ); + + // + Copy( + xhkConditions.xhkRawHighBuffer, + conditions.xhkRawHighBuffer // + ); + + // + Copy( + xhkConditions.xhkRawLowBuffer, + conditions.xhkRawLowBuffer // + ); + + // + Copy( + xhkConditions.xhkRawCloseBuffer, + conditions.xhkRawCloseBuffer // + ); + + // + Copy( + xhkConditions.xhkSMOpenBuffer, + conditions.xhkSMOpenBuffer // + ); + + // + Copy( + xhkConditions.xhkSMHighBuffer, + conditions.xhkSMHighBuffer // + ); + + // + Copy( + xhkConditions.xhkSMLowBuffer, + conditions.xhkSMLowBuffer // + ); + + // + Copy( + xhkConditions.xhkSMCloseBuffer, + conditions.xhkSMCloseBuffer // + ); + + // + // Conditions ... + conditions.isSMHKBullish = xhkConditions.isSMHKBullish; + conditions.isRawHKBullish = xhkConditions.isRawHKBullish; + conditions.isSMHKBearish = xhkConditions.isSMHKBearish; + conditions.isRawHKBearish = xhkConditions.isRawHKBearish; + conditions.isBreakedUpSMHK = xhkConditions.isBreakedUpSMHK; + conditions.isBreakedUpRawHK = xhkConditions.isBreakedUpRawHK; + conditions.isRejectedUpSMHK = xhkConditions.isRejectedUpSMHK; + conditions.isClosedOverSMHK = xhkConditions.isClosedOverSMHK; + conditions.isRejectedUpRawHK = xhkConditions.isRejectedUpRawHK; + conditions.isBreakedDownSMHK = xhkConditions.isBreakedDownSMHK; + conditions.isClosedUnderSMHK = xhkConditions.isClosedUnderSMHK; + conditions.isClosedOverRawHK = xhkConditions.isClosedOverRawHK; + conditions.isClosedUnderRawHK = xhkConditions.isClosedUnderRawHK; + conditions.isBreakedDownRawHK = xhkConditions.isBreakedDownRawHK; + conditions.isRejectedDownSMHK = xhkConditions.isRejectedDownSMHK; + conditions.isRejectedDownRawHK = xhkConditions.isRejectedDownRawHK; + conditions.isRawHKBreakedUpSMHK = xhkConditions.isRawHKBreakedUpSMHK; + conditions.isRawHKClosedOverSMHK = xhkConditions.isRawHKClosedOverSMHK; + conditions.isSMHKSwitchedToBearish = xhkConditions.isSMHKSwitchedToBearish; + conditions.isRawHKSwitchedToBearish = xhkConditions.isRawHKSwitchedToBearish; + conditions.isRawHKClosedUnderSMHK = xhkConditions.isRawHKClosedUnderSMHK; + conditions.isRawHKBreakedDownSMHK = xhkConditions.isRawHKBreakedDownSMHK; + conditions.isSMHKSwitchedToBullish = xhkConditions.isSMHKSwitchedToBullish; + conditions.isRawHKSwitchedToBullish = xhkConditions.isRawHKSwitchedToBullish; + + // + // XATR ... + + // + // Buffers ... + + // + Copy( + xatrConditions.atrUpperBuffer, + conditions.atrUpperBuffer // + ); + + // + Copy( + xatrConditions.atrLowerBuffer, + conditions.atrLowerBuffer // + ); + + // + Copy( + xatrConditions.atrUpperRawBuffer, + conditions.atrUpperRawBuffer // + ); + + // + Copy( + xatrConditions.atrLowerRawBuffer, + conditions.atrLowerRawBuffer // + ); + + // + Copy( + xatrConditions.atrBuffer, + conditions.atrBuffer // + ); + + // + Copy( + xatrConditions.rsiBuffer, + conditions.rsiBuffer // + ); + + // + // Conditions ... + + // + conditions.isRsiOverSold = xatrConditions.isRsiOverSold; + conditions.isRsiOverBought = xatrConditions.isRsiOverBought; + conditions.isBreakedUpAtrUpper = xatrConditions.isBreakedUpAtrUpper; + conditions.isBreakedUpAtrLower = xatrConditions.isBreakedUpAtrLower; + conditions.isClosedOverAtrUpper = xatrConditions.isClosedOverAtrUpper; + conditions.isRejectedUpAtrUpper = xatrConditions.isRejectedUpAtrUpper; + conditions.isRejectedUpAtrLower = xatrConditions.isRejectedUpAtrLower; + conditions.isClosedOverAtrLower = xatrConditions.isClosedOverAtrLower; + conditions.isBreakedDownAtrUpper = xatrConditions.isBreakedDownAtrUpper; + conditions.isBreakedDownAtrLower = xatrConditions.isBreakedDownAtrLower; + conditions.isClosedUnderAtrUpper = xatrConditions.isClosedUnderAtrUpper; + conditions.isClosedUnderAtrLower = xatrConditions.isClosedUnderAtrLower; + conditions.isRejectedDownAtrUpper = xatrConditions.isRejectedDownAtrUpper; + conditions.isRejectedDownAtrLower = xatrConditions.isRejectedDownAtrLower; + conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold; + conditions.isRsiCrossedUnderOverSold = xatrConditions.isRsiCrossedUnderOverSold; + conditions.isRsiCrossedOverOverBought = xatrConditions.isRsiCrossedOverOverBought; + conditions.isRsiCrossedUnderOverBought = xatrConditions.isRsiCrossedUnderOverBought; + + // + // XSTR ... + + // + // Buffers ... + + // + Copy( + xstrConditions.strBuffer, + conditions.strBuffer // + ); + + // + Copy( + xstrConditions.strPriceBuffer, + conditions.strPriceBuffer // + ); + + // + Copy( + xstrConditions.strUpBuffer, + conditions.strUpBuffer // + ); + + // + Copy( + xstrConditions.strDownBuffer, + conditions.strDownBuffer // + ); + + // + Copy( + xstrConditions.strStateBuffer, + conditions.strStateBuffer // + ); + + // + // Conditions ... + + // + conditions.isStrBullish = xstrConditions.isStrBullish; + conditions.isStrBearish = xstrConditions.isStrBearish; + conditions.isStrSwitchedToBullish = xstrConditions.isStrSwitchedToBullish; + conditions.isStrSwitchedToBearish = xstrConditions.isStrSwitchedToBearish; + + // + // XCHE ... + + // + // Buffers ... + + // + Copy( + xcheConditions.le1Buffer, + conditions.le1Buffer // + ); + + // + Copy( + xcheConditions.se1Buffer, + conditions.se1Buffer // + ); + + // + Copy( + xcheConditions.le2Buffer, + conditions.le2Buffer // + ); + + // + Copy( + xcheConditions.se2Buffer, + conditions.se2Buffer // + ); + + // + Copy( + xcheConditions.le1StartBuffer, + conditions.le1StartBuffer // + ); + + // + Copy( + xcheConditions.se1StartBuffer, + conditions.se1StartBuffer // + ); + + // + Copy( + xcheConditions.le2StartBuffer, + conditions.le2StartBuffer // + ); + + // + Copy( + xcheConditions.se2StartBuffer, + conditions.se2StartBuffer // + ); + + // + // Conditions ... + + conditions.isCheBullish = xcheConditions.isCheBullish; + conditions.isCheBearish = xcheConditions.isCheBearish; + conditions.isChe1Bullish = xcheConditions.isChe1Bullish; + conditions.isChe1Bearish = xcheConditions.isChe1Bearish; + conditions.isChe2Bullish = xcheConditions.isChe2Bullish; + conditions.isChe2Bearish = xcheConditions.isChe2Bearish; + conditions.isClosedOverCheMin = xcheConditions.isClosedOverCheMin; + conditions.isClosedOverCheMax = xcheConditions.isClosedOverCheMax; + conditions.isClosedUnderCheMin = xcheConditions.isClosedUnderCheMin; + conditions.isClosedUnderCheMax = xcheConditions.isClosedUnderCheMax; + conditions.isCheSwitchedToBullish = xcheConditions.isCheSwitchedToBullish; + conditions.isCheSwitchedToBearish = xcheConditions.isCheSwitchedToBearish; + conditions.isChe1SwitchedToBullish = xcheConditions.isChe1SwitchedToBullish; + conditions.isChe1SwitchedToBearish = xcheConditions.isChe1SwitchedToBearish; + conditions.isChe2SwitchedToBullish = xcheConditions.isChe2SwitchedToBullish; + conditions.isChe2SwitchedToBearish = xcheConditions.isChe2SwitchedToBearish; + + // + // XDON ... + + // + // Buffers ... + + // + Copy( + xdonConditions.donOpenUpperBuffer, + conditions.donOpenUpperBuffer // + ); + + // + Copy( + xdonConditions.donOpenLowerBuffer, + conditions.donOpenLowerBuffer // + ); + + // + Copy( + xdonConditions.donHighUpperBuffer, + conditions.donHighUpperBuffer // + ); + + // + Copy( + xdonConditions.donHighLowerBuffer, + conditions.donHighLowerBuffer // + ); + + // + Copy( + xdonConditions.donLowUpperBuffer, + conditions.donLowUpperBuffer // + ); + + // + Copy( + xdonConditions.donLowLowerBuffer, + conditions.donLowLowerBuffer // + ); + + // + Copy( + xdonConditions.donCloseUpperBuffer, + conditions.donCloseUpperBuffer // + ); + + // + Copy( + xdonConditions.donCloseLowerBuffer, + conditions.donCloseLowerBuffer // + ); + + // + // Conditions ... + + // + conditions.isBreakedDonLowUpper = xdonConditions.isBreakedDonLowUpper; + conditions.isBreakedDonLowLower = xdonConditions.isBreakedDonLowLower; + conditions.isRejectedDonLowUpper = xdonConditions.isRejectedDonLowUpper; + conditions.isRejectedDonLowLower = xdonConditions.isRejectedDonLowLower; + conditions.isBreakedDonOpenUpper = xdonConditions.isBreakedDonOpenUpper; + conditions.isBreakedDonHighUpper = xdonConditions.isBreakedDonHighUpper; + conditions.isBreakedDonOpenLower = xdonConditions.isBreakedDonOpenLower; + conditions.isBreakedDonHighLower = xdonConditions.isBreakedDonHighLower; + conditions.isRejectedDonOpenUpper = xdonConditions.isRejectedDonOpenUpper; + conditions.isRejectedDonHighUpper = xdonConditions.isRejectedDonHighUpper; + conditions.isRejectedDonOpenLower = xdonConditions.isRejectedDonOpenLower; + conditions.isRejectedDonHighLower = xdonConditions.isRejectedDonHighLower; + conditions.isBreakedDonCloseUpper = xdonConditions.isBreakedDonCloseUpper; + conditions.isBreakedDonCloseLower = xdonConditions.isBreakedDonCloseLower; + conditions.isRejectedDonCloseUpper = xdonConditions.isRejectedDonCloseUpper; + conditions.isRejectedDonCloseLower = xdonConditions.isRejectedDonCloseLower; + + // + // XVWAP ... + + // + // Buffers ... + + // + Copy( + xvwapConditions.vwapFastBuffer, + conditions.vwapFastBuffer // + ); + + // + Copy( + xvwapConditions.vwapMidBuffer, + conditions.vwapMidBuffer // + ); + + // + Copy( + xvwapConditions.vwapSlowBuffer, + conditions.vwapSlowBuffer // + ); + + // + Copy( + xvwapConditions.vwapVolumeBuffer, + conditions.vwapVolumeBuffer // + ); + + // + Copy( + xvwapConditions.vwapPriceBuffer, + conditions.vwapPriceBuffer // + ); + + // + Copy( + xvwapConditions.vwapFastStateBuffer, + conditions.vwapFastStateBuffer // + ); + + // + Copy( + xvwapConditions.vwapMidStateBuffer, + conditions.vwapMidStateBuffer // + ); + + // + Copy( + xvwapConditions.vwapSlowStateBuffer, + conditions.vwapSlowStateBuffer // + ); + + // + // Conditions ... + + // + conditions.isVWapMidBullish = xvwapConditions.isVWapMidBullish; + conditions.isVWapMidBearish = xvwapConditions.isVWapMidBearish; + conditions.isVWapFastBullish = xvwapConditions.isVWapFastBullish; + conditions.isVWapFastBearish = xvwapConditions.isVWapFastBearish; + conditions.isVWapMidNeutural = xvwapConditions.isVWapMidNeutural; + conditions.isVWapSlowBullish = xvwapConditions.isVWapSlowBullish; + conditions.isVWapSlowBearish = xvwapConditions.isVWapSlowBearish; + conditions.isVWapFastOverMid = xvwapConditions.isVWapFastOverMid; + conditions.isVWapMidOverSlow = xvwapConditions.isVWapMidOverSlow; + conditions.isVWapFastNeutural = xvwapConditions.isVWapFastNeutural; + conditions.isVWapSlowNeutural = xvwapConditions.isVWapSlowNeutural; + conditions.isVWapFastUnderMid = xvwapConditions.isVWapFastUnderMid; + conditions.isVWapMidUnderSlow = xvwapConditions.isVWapMidUnderSlow; + conditions.isVWapBullishState = xvwapConditions.isVWapBullishState; + conditions.isVWapBearishState = xvwapConditions.isVWapBearishState; + conditions.isVWapNeuturalState = xvwapConditions.isVWapNeuturalState; + conditions.isVWapBullishOrdered = xvwapConditions.isVWapBullishOrdered; + conditions.isVWapBearishOrdered = xvwapConditions.isVWapBearishOrdered; + conditions.isVWapSwitchedToBullishState = xvwapConditions.isVWapSwitchedToBullishState; + conditions.isVWapSwitchedToBearishState = xvwapConditions.isVWapSwitchedToBearishState; + conditions.isVWapSwitchedToNeuturalState = xvwapConditions.isVWapSwitchedToNeuturalState; + conditions.isVWapSwitchedToBullishOrdered = xvwapConditions.isVWapSwitchedToBullishOrdered; + conditions.isVWapSwitchedToBearishOrdered = xvwapConditions.isVWapSwitchedToBearishOrdered; + + // + // Slopes ... + + // + double rsiSlope = GetSlope(conditions.rsiBuffer, pIDX, cIDX); + double strSlope = GetSlope(conditions.strBuffer, pIDX, cIDX); + double atrUpperSlope = GetSlope(conditions.atrUpperBuffer, pIDX, cIDX); + double atrLowerSlope = GetSlope(conditions.atrLowerBuffer, pIDX, cIDX); + double vwapFastSlope = GetSlope(conditions.vwapFastBuffer, pIDX, cIDX); + double vwapMidSlope = GetSlope(conditions.vwapMidBuffer, pIDX, cIDX); + double vwapSlowSlope = GetSlope(conditions.vwapSlowBuffer, pIDX, cIDX); + + // + bool isRsiSlopeBullish = rsiSlope > 0; + bool isStrSlopeBullish = strSlope > 0; + bool isAtrUpperSlopeBullish = atrUpperSlope > 0; + bool isAtrLowerSlopeBullish = atrLowerSlope > 0; + bool isVwapFastSlopeBullish = vwapFastSlope > 0; + bool isVwapMidSlopeBullish = vwapMidSlope > 0; + bool isVwapSlowSlopeBullish = vwapSlowSlope > 0; + + // + bool isRsiSlopeBearish = rsiSlope < 0; + bool isStrSlopeBearish = strSlope < 0; + bool isAtrUpperSlopeBearish = atrUpperSlope < 0; + bool isAtrLowerSlopeBearish = atrLowerSlope < 0; + bool isVwapFastSlopeBearish = vwapFastSlope < 0; + bool isVwapMidSlopeBearish = vwapMidSlope < 0; + bool isVwapSlowSlopeBearish = vwapSlowSlope < 0; + + // + conditions.rsiSlope = rsiSlope; + conditions.strSlope = strSlope; + conditions.vwapMidSlope = vwapMidSlope; + conditions.vwapSlowSlope = vwapSlowSlope; + conditions.atrUpperSlope = atrUpperSlope; + conditions.atrLowerSlope = atrLowerSlope; + conditions.vwapFastSlope = vwapFastSlope; + conditions.isRsiSlopeBearish = isRsiSlopeBearish; + conditions.isStrSlopeBearish = isStrSlopeBearish; + conditions.isRsiSlopeBullish = isRsiSlopeBullish; + conditions.isStrSlopeBullish = isStrSlopeBullish; + conditions.isVwapMidSlopeBearish = isVwapMidSlopeBearish; + conditions.isVwapMidSlopeBullish = isVwapMidSlopeBullish; + conditions.isAtrUpperSlopeBearish = isAtrUpperSlopeBearish; + conditions.isAtrLowerSlopeBearish = isAtrLowerSlopeBearish; + conditions.isVwapFastSlopeBearish = isVwapFastSlopeBearish; + conditions.isVwapSlowSlopeBearish = isVwapSlowSlopeBearish; + conditions.isAtrUpperSlopeBullish = isAtrUpperSlopeBullish; + conditions.isAtrLowerSlopeBullish = isAtrLowerSlopeBullish; + conditions.isVwapFastSlopeBullish = isVwapFastSlopeBullish; + conditions.isVwapSlowSlopeBullish = isVwapSlowSlopeBullish; + + // + // Complex Conditions ... + + // + double vwapFast = conditions.vwapFastBuffer[cIDX]; + double vwapMid = conditions.vwapMidBuffer[cIDX]; + double vwapSlow = conditions.vwapSlowBuffer[cIDX]; + + // + double vwaps[3] = { + vwapFast, + vwapMid, + vwapSlow // + }; + + // + double vwapMin = GetMin(vwaps); + double vwapMax = GetMax(vwaps); + + // + bool isVWapMinBreakedUp = IsBarBreak( + vwapMin, + X_DIRECTION_BULLISH, + cBar // + ); + bool isVWapMinBreakedDown = IsBarBreak( + vwapMin, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isVWapMaxBreakedUp = IsBarBreak( + vwapMax, + X_DIRECTION_BULLISH, + cBar // + ); + bool isVWapMaxBreakedDown = IsBarBreak( + vwapMax, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isVWapFatsOverMid = conditions.vwapFastBuffer[cIDX] > conditions.vwapMidBuffer[cIDX]; + bool isVWapFatsOverMidPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapMidBuffer[pIDX]; + + // + bool isVWapFatsUnderMid = conditions.vwapFastBuffer[cIDX] < conditions.vwapMidBuffer[cIDX]; + bool isVWapFatsUnderMidPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapMidBuffer[pIDX]; + + // + bool isVWapFatsOverSlow = conditions.vwapFastBuffer[cIDX] > conditions.vwapSlowBuffer[cIDX]; + bool isVWapFatsOverSlowPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapSlowBuffer[pIDX]; + + // + bool isVWapFatsUnderSlow = conditions.vwapFastBuffer[cIDX] < conditions.vwapSlowBuffer[cIDX]; + bool isVWapFatsUnderSlowPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapSlowBuffer[pIDX]; + + // + bool isVWapFastCrossedOverMid = isVWapFatsOverMid && + !isVWapFatsOverMidPrev; + bool isVWapFastCrossedUnderMid = isVWapFatsUnderMid && + !isVWapFatsUnderMidPrev; + + // + bool isVWapFastCrossedOverSlow = isVWapFatsOverSlow && + !isVWapFatsOverSlowPrev; + bool isVWapFastCrossedUnderSlow = isVWapFatsUnderSlow && + !isVWapFatsUnderSlowPrev; + + // + bool isClosedOverVWapMin = cBar.close > vwapMin; + bool isClosedUnderVWapMin = cBar.close < vwapMin; + + // + bool isClosedOverVWapMax = cBar.close > vwapMax; + bool isClosedUnderVWapMax = cBar.close < vwapMax; + + // + bool isSarEqualsToPeak = + conditions.sarBuffer[cIDX] == conditions.peaksBuffer[cIDX]; + bool isSarEqualsToVale = + conditions.sarBuffer[cIDX] == conditions.valesBuffer[cIDX]; + + // + bool isSarIncreased = conditions.sarBuffer[cIDX] > conditions.sarBuffer[pIDX]; + bool isSarDecreased = conditions.sarBuffer[cIDX] < conditions.sarBuffer[pIDX]; + + // + double prevSar = conditions.sarBuffer[pIDX]; + double prevStr = conditions.strBuffer[pIDX]; + double prevCheLE1 = conditions.le1Buffer[pIDX]; + double prevCheLE2 = conditions.le2Buffer[pIDX]; + double prevCheSE1 = conditions.se1Buffer[pIDX]; + double prevCheSE2 = conditions.se2Buffer[pIDX]; + double prevAtrUpper = conditions.atrUpperBuffer[pIDX]; + double prevAtrLower = conditions.atrLowerBuffer[pIDX]; + + // + double ches[]; + if (prevCheLE1 != EMPTY_VALUE) + { + // + Add( + prevCheLE1, + ches // + ); + } + if (prevCheLE2 != EMPTY_VALUE) + { + // + Add( + prevCheLE2, + ches // + ); + } + if (prevCheSE1 != EMPTY_VALUE) + { + // + Add( + prevCheSE1, + ches // + ); + } + if (prevCheSE2 != EMPTY_VALUE) + { + // + Add( + prevCheSE2, + ches // + ); + } + + // + double cheMin = GetMin(ches); + double cheMax = GetMax(ches); + + // + bool isBreakedUpPrevSar = IsBarBreak( + prevSar, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevSar = IsBarBreak( + prevSar, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevStr = IsBarBreak( + prevStr, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevStr = IsBarBreak( + prevStr, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isRejectedUpPrevAtrUpper = IsBarReject( + prevAtrUpper, + X_DIRECTION_BULLISH, + cBar // + ); + + // + bool isRejectedDownPrevAtrUpper = IsBarReject( + prevAtrUpper, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isRejectedUpPrevAtrLower = IsBarReject( + prevAtrLower, + X_DIRECTION_BULLISH, + cBar // + ); + + // + bool isRejectedDownPrevAtrLower = IsBarReject( + prevAtrLower, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevAtrUpper = IsBarBreak( + prevAtrUpper, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevAtrUpper = IsBarBreak( + prevAtrUpper, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevAtrLower = IsBarBreak( + prevAtrLower, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevAtrLower = IsBarBreak( + prevAtrLower, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevCheLE1 = IsBarBreak( + prevCheLE1, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedUpPrevCheLE2 = IsBarBreak( + prevCheLE2, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedUpPrevCheSE1 = IsBarBreak( + prevCheSE1, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedUpPrevCheSE2 = IsBarBreak( + prevCheSE2, + X_DIRECTION_BULLISH, + cBar // + ); + + // + bool isBreakedDownPrevCheLE1 = IsBarBreak( + prevCheLE1, + X_DIRECTION_BEARISH, + cBar // + ); + bool isBreakedDownPrevCheLE2 = IsBarBreak( + prevCheLE2, + X_DIRECTION_BEARISH, + cBar // + ); + bool isBreakedDownPrevCheSE1 = IsBarBreak( + prevCheSE1, + X_DIRECTION_BEARISH, + cBar // + ); + bool isBreakedDownPrevCheSE2 = IsBarBreak( + prevCheSE2, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevCheMin = IsBarBreak( + cheMin, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevCheMin = IsBarBreak( + cheMin, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isBreakedUpPrevCheMax = IsBarBreak( + cheMax, + X_DIRECTION_BULLISH, + cBar // + ); + bool isBreakedDownPrevCheMax = IsBarBreak( + cheMax, + X_DIRECTION_BEARISH, + cBar // + ); + + // + bool isSarCrossedUnderPeak = + conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] && + !(conditions.sarBuffer[pIDX] < conditions.peaksBuffer[pIDX]); + bool isSarCrossedOverVale = + conditions.sarBuffer[cIDX] > conditions.valesBuffer[cIDX] && + !(conditions.sarBuffer[pIDX] > conditions.valesBuffer[pIDX]); + + // + bool isStrEqualsToPeak = + conditions.strBuffer[cIDX] == conditions.peaksBuffer[cIDX]; + bool isStrEqualsToVale = + conditions.strBuffer[cIDX] == conditions.valesBuffer[cIDX]; + + // + bool isStrCrossedUnderPeak = + conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX] && + !(conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX]); + bool isStrCrossedOverVale = + conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX] && + !(conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX]); + + // + bool isPeakOverAtrUpper = + conditions.peaksBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; + bool isValeUnderAtrLower = + conditions.valesBuffer[cIDX] > conditions.atrLowerBuffer[cIDX]; + + // + bool isNewPeakOverAtrUpper = + isPeakOverAtrUpper && + conditions.isNewPeak; + bool isNewValeUnderAtrLower = + isValeUnderAtrLower && + conditions.isNewVale; + + // + bool isStrUpperOverPeak = + conditions.strBuffer[cIDX] > conditions.peaksBuffer[cIDX]; + bool isStrUpperOverPeakPrev = + conditions.strBuffer[pIDX] > conditions.peaksBuffer[pIDX]; + + // + bool isStrUpperUnderPeak = + conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX]; + bool isStrUpperUnderPeakPrev = + conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX]; + + // + bool isStrUpperCrossedOverPeak = isStrUpperOverPeak && + !isStrUpperOverPeakPrev; + bool isStrUpperCrossedUnderPeak = isStrUpperUnderPeak && + !isStrUpperUnderPeakPrev; + + // + bool isStrLowerOverVale = + conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX]; + bool isStrLowerOverValePrev = + conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX]; + + // + bool isStrLowerUnderVale = + conditions.strBuffer[cIDX] < conditions.valesBuffer[cIDX]; + bool isStrLowerUnderValePrev = + conditions.strBuffer[pIDX] < conditions.valesBuffer[pIDX]; + + // + bool isStrLowerCrossedOverVale = isStrLowerOverVale && + !isStrLowerOverValePrev; + bool isStrLowerCrossedUnderVale = isStrLowerUnderVale && + !isStrLowerUnderValePrev; + + // + bool isDonHighUpperEqualsToPeak = + conditions.donHighUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX]; + bool isDonLowLowerEqualsToVale = + conditions.donLowLowerBuffer[cIDX] == conditions.valesBuffer[cIDX]; + + // + bool isStrUpperOverAtrUpper = + conditions.strUpBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; + bool isStrUpperOverAtrUpperPrev = + conditions.strUpBuffer[pIDX] > conditions.atrUpperBuffer[pIDX]; + bool isStrUpperCrossedOverAtrUpper = isStrUpperOverAtrUpper && + !isStrUpperOverAtrUpperPrev; + + // + bool isStrUpperUnderAtrUpper = + conditions.strUpBuffer[cIDX] < conditions.atrUpperBuffer[cIDX]; + bool isStrUpperUnderAtrUpperPrev = + conditions.strUpBuffer[pIDX] < conditions.atrUpperBuffer[pIDX]; + bool isStrUpperCrossedUnderAtrUpper = isStrUpperUnderAtrUpper && + !isStrUpperUnderAtrUpperPrev; + + // + bool isStrLowerOverAtrLower = + conditions.strDownBuffer[cIDX] > conditions.atrLowerBuffer[cIDX]; + bool isStrLowerOverAtrLowerPrev = + conditions.strDownBuffer[pIDX] > conditions.atrLowerBuffer[pIDX]; + bool isStrLowerCrossedOverAtrLower = isStrLowerOverAtrLower && + !isStrLowerOverAtrLowerPrev; + + // + bool isStrLowerUnderAtrLower = + conditions.strDownBuffer[cIDX] < conditions.atrLowerBuffer[cIDX]; + bool isStrLowerUnderAtrLowerPrev = + conditions.strDownBuffer[pIDX] < conditions.atrLowerBuffer[pIDX]; + bool isStrLowerCrossedUnderAtrLower = isStrLowerUnderAtrLower && + !isStrLowerUnderAtrLowerPrev; + + // + bool isStrUpperOverDonHighUpper = + conditions.strUpBuffer[cIDX] > conditions.donHighUpperBuffer[cIDX]; + bool isStrUpperOverDonHighUpperPrev = + conditions.strUpBuffer[pIDX] > conditions.donHighUpperBuffer[pIDX]; + bool isStrUpperCrossedOverDonHighUpper = isStrUpperOverDonHighUpper && + !isStrUpperOverDonHighUpperPrev; + + // + bool isStrUpperUnderDonHighUpper = + conditions.strUpBuffer[cIDX] < conditions.donHighUpperBuffer[cIDX]; + bool isStrUpperUnderDonHighUpperPrev = + conditions.strUpBuffer[pIDX] < conditions.donHighUpperBuffer[pIDX]; + bool isStrUpperCrossedUnderDonHighUpper = isStrUpperUnderDonHighUpper && + !isStrUpperUnderDonHighUpperPrev; + + // + bool isStrLowerOverDonLowLower = + conditions.strDownBuffer[cIDX] > conditions.donLowLowerBuffer[cIDX]; + bool isStrLowerOverDonLowLowerPrev = + conditions.strDownBuffer[pIDX] > conditions.donLowLowerBuffer[pIDX]; + bool isStrLowerCrossedOverDonLowLower = isStrLowerOverDonLowLower && + !isStrLowerOverDonLowLowerPrev; + + // + bool isStrLowerUnderDonLowLower = + conditions.strDownBuffer[cIDX] < conditions.donLowLowerBuffer[cIDX]; + bool isStrLowerUnderDonLowLowerPrev = + conditions.strDownBuffer[pIDX] < conditions.donLowLowerBuffer[pIDX]; + bool isStrLowerCrossedUnderDonLowLower = isStrLowerUnderDonLowLower && + !isStrLowerUnderDonLowLowerPrev; + + // + bool isAtrUpperOverPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]; + bool isAtrUpperEqualsToPeak = conditions.atrUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX]; + + // + bool isAtrUpperCrossedUpPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX] && + !(conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]); + bool isAtrUpperCrossedDownPeak = conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX] && + !(conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX]); + + // + bool isAtrLowerUnderVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]; + bool isAtrLowerEqualsToVale = conditions.atrUpperBuffer[cIDX] == conditions.valesBuffer[cIDX]; + + // + bool isAtrLowerCrossedUpVale = conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX] && + !(conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX]); + bool isAtrLowerCrossedDownVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX] && + !(conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]); + + // + conditions.cheMin = cheMin; + conditions.cheMax = cheMax; + conditions.vwapMin = vwapMin; + conditions.vwapMax = vwapMax; + + // + conditions.isSarIncreased = isSarIncreased; + conditions.isSarDecreased = isSarDecreased; + conditions.isSarEqualsToPeak = isSarEqualsToPeak; + conditions.isSarEqualsToVale = isSarEqualsToVale; + conditions.isStrEqualsToPeak = isStrEqualsToPeak; + conditions.isStrEqualsToVale = isStrEqualsToVale; + conditions.isStrUpperOverPeak = isStrUpperOverPeak; + conditions.isPeakOverAtrUpper = isPeakOverAtrUpper; + conditions.isStrLowerOverVale = isStrLowerOverVale; + conditions.isVWapMinBreakedUp = isVWapMinBreakedUp; + conditions.isVWapMaxBreakedUp = isVWapMaxBreakedUp; + conditions.isBreakedUpPrevSar = isBreakedUpPrevSar; + conditions.isBreakedUpPrevStr = isBreakedUpPrevStr; + conditions.isAtrUpperOverPeak = isAtrUpperOverPeak; + conditions.isAtrLowerUnderVale = isAtrLowerUnderVale; + conditions.isStrLowerUnderVale = isStrLowerUnderVale; + conditions.isStrUpperUnderPeak = isStrUpperUnderPeak; + conditions.isValeUnderAtrLower = isValeUnderAtrLower; + conditions.isClosedOverVWapMin = isClosedOverVWapMin; + conditions.isClosedOverVWapMax = isClosedOverVWapMax; + conditions.isClosedUnderVWapMin = isClosedUnderVWapMin; + conditions.isClosedUnderVWapMax = isClosedUnderVWapMax; + conditions.isVWapMinBreakedDown = isVWapMinBreakedDown; + conditions.isVWapMaxBreakedDown = isVWapMaxBreakedDown; + conditions.isSarCrossedOverVale = isSarCrossedOverVale; + conditions.isStrCrossedOverVale = isStrCrossedOverVale; + conditions.isBreakedDownPrevStr = isBreakedDownPrevStr; + conditions.isBreakedDownPrevSar = isBreakedDownPrevSar; + conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak; + conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak; + conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper; + conditions.isBreakedUpPrevCheLE1 = isBreakedUpPrevCheLE1; + conditions.isBreakedUpPrevCheLE2 = isBreakedUpPrevCheLE2; + conditions.isBreakedUpPrevCheSE1 = isBreakedUpPrevCheSE1; + conditions.isBreakedUpPrevCheSE2 = isBreakedUpPrevCheSE2; + conditions.isBreakedUpPrevCheMin = isBreakedUpPrevCheMin; + conditions.isBreakedUpPrevCheMax = isBreakedUpPrevCheMax; + conditions.isAtrUpperEqualsToPeak = isAtrUpperEqualsToPeak; + conditions.isAtrLowerEqualsToVale = isAtrLowerEqualsToVale; + conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower; + conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper; + conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower; + conditions.isBreakedDownPrevCheMin = isBreakedDownPrevCheMin; + conditions.isBreakedDownPrevCheMax = isBreakedDownPrevCheMax; + conditions.isBreakedDownPrevCheLE1 = isBreakedDownPrevCheLE1; + conditions.isBreakedDownPrevCheLE2 = isBreakedDownPrevCheLE2; + conditions.isBreakedDownPrevCheSE1 = isBreakedDownPrevCheSE1; + conditions.isBreakedDownPrevCheSE2 = isBreakedDownPrevCheSE2; + conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper; + conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower; + conditions.isBreakedUpPrevAtrUpper = isBreakedUpPrevAtrUpper; + conditions.isBreakedUpPrevAtrLower = isBreakedUpPrevAtrLower; + conditions.isAtrUpperCrossedUpPeak = isAtrUpperCrossedUpPeak; + conditions.isAtrLowerCrossedUpVale = isAtrLowerCrossedUpVale; + conditions.isVWapFastCrossedOverMid = isVWapFastCrossedOverMid; + conditions.isRejectedUpPrevAtrUpper = isRejectedUpPrevAtrUpper; + conditions.isRejectedUpPrevAtrLower = isRejectedUpPrevAtrLower; + conditions.isAtrUpperCrossedDownPeak = isAtrUpperCrossedDownPeak; + conditions.isAtrLowerCrossedDownVale = isAtrLowerCrossedDownVale; + conditions.isBreakedDownPrevAtrUpper = isBreakedDownPrevAtrUpper; + conditions.isBreakedDownPrevAtrLower = isBreakedDownPrevAtrLower; + conditions.isVWapFastCrossedUnderMid = isVWapFastCrossedUnderMid; + conditions.isDonLowLowerEqualsToVale = isDonLowLowerEqualsToVale; + conditions.isStrUpperCrossedOverPeak = isStrUpperCrossedOverPeak; + conditions.isStrLowerCrossedOverVale = isStrLowerCrossedOverVale; + conditions.isStrLowerOverDonLowLower = isStrLowerOverDonLowLower; + conditions.isVWapFastCrossedOverSlow = isVWapFastCrossedOverSlow; + conditions.isRejectedDownPrevAtrUpper = isRejectedDownPrevAtrUpper; + conditions.isRejectedDownPrevAtrLower = isRejectedDownPrevAtrLower; + conditions.isVWapFastCrossedUnderSlow = isVWapFastCrossedUnderSlow; + conditions.isStrUpperOverDonHighUpper = isStrUpperOverDonHighUpper; + conditions.isStrLowerUnderDonLowLower = isStrLowerUnderDonLowLower; + conditions.isDonHighUpperEqualsToPeak = isDonHighUpperEqualsToPeak; + conditions.isStrUpperCrossedUnderPeak = isStrUpperCrossedUnderPeak; + conditions.isStrLowerCrossedUnderVale = isStrLowerCrossedUnderVale; + conditions.isStrUpperUnderDonHighUpper = isStrUpperUnderDonHighUpper; + conditions.isStrLowerCrossedOverAtrLower = isStrLowerCrossedOverAtrLower; + conditions.isStrUpperCrossedOverAtrUpper = isStrUpperCrossedOverAtrUpper; + conditions.isStrUpperCrossedUnderAtrUpper = isStrUpperCrossedUnderAtrUpper; + conditions.isStrLowerCrossedUnderAtrLower = isStrLowerCrossedUnderAtrLower; + conditions.isStrLowerCrossedOverDonLowLower = isStrLowerCrossedOverDonLowLower; + conditions.isStrUpperCrossedOverDonHighUpper = isStrUpperCrossedOverDonHighUpper; + conditions.isStrLowerCrossedUnderDonLowLower = isStrLowerCrossedUnderDonLowLower; + conditions.isStrUpperCrossedUnderDonHighUpper = isStrUpperCrossedUnderDonHighUpper; // return result; @@ -3177,6 +3224,8 @@ class XCX121Helper : public XCBase // // Inputs ... X121Inputs mInputs; + X121XCCInputs xccInputs; + X121XCTInputs xctInputs; X121XPVInputs xpvInputs; X121XHKInputs xhkInputs; X121XATRInputs xatrInputs; diff --git a/Helpers/x-saherelm.xcc.helper.mq5 b/Helpers/x-saherelm.x121.xcc.helper.mq5 similarity index 92% rename from Helpers/x-saherelm.xcc.helper.mq5 rename to Helpers/x-saherelm.x121.xcc.helper.mq5 index a63b8067..bcef12ea 100644 --- a/Helpers/x-saherelm.xcc.helper.mq5 +++ b/Helpers/x-saherelm.x121.xcc.helper.mq5 @@ -2,7 +2,7 @@ // // SaherElm IT Center MQL5 Helper Class Library // ---------------------------------------------- -// Name: XSCXCCHelper +// Name: XSCX121XCCHelper // Description: provides all Indicator // Helper requirements ... // @@ -29,7 +29,7 @@ // // Input Models ... -struct XCCInputs +struct X121XCCInputs { // // Props ... @@ -50,7 +50,7 @@ struct XCCInputs // // Constructor(s) ... - XCCInputs() + X121XCCInputs() { // Clean(); @@ -134,7 +134,7 @@ struct XCCInputs // // Class ... -class XCXCCHelper : public XCBaseHelper +class XCX121XCCHelper : public XCBaseHelper { // // Public ... @@ -144,14 +144,14 @@ class XCXCCHelper : public XCBaseHelper // // Constructors ... - XCXCCHelper() + XCX121XCCHelper() : XCBaseHelper(_Symbol, _Period) { } // // Deconstructor ... - ~XCXCCHelper() + ~XCX121XCCHelper() { mInputs.Clean(); } @@ -161,7 +161,7 @@ class XCXCCHelper : public XCBaseHelper bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XCCInputs &inputs // Inputs + X121XCCInputs &inputs // Inputs ) { // @@ -185,7 +185,7 @@ class XCXCCHelper : public XCBaseHelper mHandler = iCustom( mSymbol, mPeriod, - "x-saherelm.xcc", + "x-saherelm.x121.xcc", // // Inputs ... // @@ -218,14 +218,14 @@ class XCXCCHelper : public XCBaseHelper // Inputs ... // - XCCInputs GetInputs() + X121XCCInputs GetInputs() { return mInputs; } // bool SetInputs( - XCCInputs &inputs // Configs + X121XCCInputs &inputs // Configs ) { // @@ -245,7 +245,7 @@ class XCXCCHelper : public XCBaseHelper private: // // Props ... - XCCInputs mInputs; // Inputs ... + X121XCCInputs mInputs; // Inputs ... }; // diff --git a/Helpers/x-saherelm.xct.helper.mq5 b/Helpers/x-saherelm.x121.xct.helper.mq5 similarity index 91% rename from Helpers/x-saherelm.xct.helper.mq5 rename to Helpers/x-saherelm.x121.xct.helper.mq5 index 11ba984c..c444481a 100644 --- a/Helpers/x-saherelm.xct.helper.mq5 +++ b/Helpers/x-saherelm.x121.xct.helper.mq5 @@ -2,7 +2,7 @@ // // SaherElm IT Center MQL5 Helper Class Library // ---------------------------------------------- -// Name: XSCXCTHelper +// Name: XSCX121XCTHelper // Description: provides all Indicator // Helper requirements ... // @@ -29,7 +29,7 @@ // // Input Models ... -struct XCTInputs +struct X121XCTInputs { // // Props ... @@ -46,7 +46,7 @@ struct XCTInputs // // Constructor(s) ... - XCTInputs() + X121XCTInputs() { Clean(); } @@ -122,7 +122,7 @@ struct XCTInputs // // Class ... -class XCXCTHelper : public XCBaseHelper +class XCX121XCTHelper : public XCBaseHelper { // // Public ... @@ -132,14 +132,14 @@ class XCXCTHelper : public XCBaseHelper // // Constructors ... - XCXCTHelper() + XCX121XCTHelper() : XCBaseHelper(_Symbol, _Period) { } // // Deconstructor ... - ~XCXCTHelper() + ~XCX121XCTHelper() { mInputs.Clean(); } @@ -149,7 +149,7 @@ class XCXCTHelper : public XCBaseHelper bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period - XCTInputs &inputs // Inputs + X121XCTInputs &inputs // Inputs ) { // @@ -173,7 +173,7 @@ class XCXCTHelper : public XCBaseHelper mHandler = iCustom( mSymbol, mPeriod, - "x-saherelm.xct", + "x-saherelm.x121.xct", // // Inputs ... mInputs.fontSize, // Font Size ... @@ -200,14 +200,14 @@ class XCXCTHelper : public XCBaseHelper // Inputs ... // - XCTInputs GetInputs() + X121XCTInputs GetInputs() { return mInputs; } // bool SetInputs( - XCTInputs &inputs // Configs + X121XCTInputs &inputs // Configs ) { // @@ -227,7 +227,7 @@ class XCXCTHelper : public XCBaseHelper private: // // Props ... - XCTInputs mInputs; // Inputs ... + X121XCTInputs mInputs; // Inputs ... }; // diff --git a/Indicators/x-saherelm.xcc.mq5 b/Indicators/x-saherelm.x121.xcc.mq5 similarity index 99% rename from Indicators/x-saherelm.xcc.mq5 rename to Indicators/x-saherelm.x121.xcc.mq5 index 71bdd194..2f45b84b 100644 --- a/Indicators/x-saherelm.xcc.mq5 +++ b/Indicators/x-saherelm.x121.xcc.mq5 @@ -2,7 +2,7 @@ // // SaherElm IT Center MQL5 Candle Styles // --------------------------------------------------- -// Name: XCC +// Name: X121 XCC // Description: Candle Styles ... // // @@ -16,7 +16,7 @@ #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" -#property description "SaherElm XCC Indicator" +#property description "SaherElm X121 XCC Indicator" #property strict // @@ -25,7 +25,7 @@ // // Indicator Short Name ... -#define ShortName "XCC" +#define ShortName "X121 XCC" // // Holds an SnapShot of Charts Configuration ... diff --git a/Indicators/x-saherelm.xct.mq5 b/Indicators/x-saherelm.x121.xct.mq5 similarity index 98% rename from Indicators/x-saherelm.xct.mq5 rename to Indicators/x-saherelm.x121.xct.mq5 index ebb08a4e..286882ad 100644 --- a/Indicators/x-saherelm.xct.mq5 +++ b/Indicators/x-saherelm.x121.xct.mq5 @@ -2,7 +2,7 @@ // // SaherElm IT Center MQL5 Indicator // --------------------------------------------- -// Name: XCT +// Name: X121 XCT // Description: Trend Magic Indicator ... // // @@ -16,7 +16,7 @@ #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" -#property description "SaherElm XCT Indicator" +#property description "SaherElm X121 XCT Indicator" #property strict // @@ -24,7 +24,7 @@ // // -#define ShortName "XCT" +#define ShortName "X121 XCT" #include "../Libraries/x-saherelm.common.lib.mq5" // diff --git a/Libraries/x-saherelm.x-poi.lib.mq5 b/Libraries/x-saherelm.x-poi.lib.mq5 index 5b75ba3b..704f6f90 100644 --- a/Libraries/x-saherelm.x-poi.lib.mq5 +++ b/Libraries/x-saherelm.x-poi.lib.mq5 @@ -2083,6 +2083,7 @@ class XCTwoBarZone : public XCZone * @param forDir: ENUM_X_DIRECTION member, Specified Action Direction ... * @param breakerBar: XOHCL instance Reference ... * @param breakerDir: ENUM_X_DIRECTION member ... + * @param ignoreActivation: ignore Zone Activation and Used Start ... * @param forPeriod: ENUM_TIMEFRAMES member, Specified Rejection Period ... * * @return ( bool ) @@ -2091,6 +2092,7 @@ class XCTwoBarZone : public XCZone ENUM_X_DIRECTION forDir, XOHCL &breakerBar, ENUM_X_DIRECTION &breakerDir, + bool ignoreActivation = false, ENUM_TIMEFRAMES forPeriod = NULL // ) { @@ -2117,22 +2119,60 @@ class XCTwoBarZone : public XCZone } // - XOHCL activatedBar; - ENUM_X_DIRECTION activatedDir; - bool isActivated = IsActivated( - forDir, - activatedBar, - activatedDir, - forPeriod // - ); - result = isActivated; + bool isBullish = IsBullish(forDir); + bool isBearish = IsBearish(forDir); + int activatedIndex = -1; + + // + if (!ignoreActivation) + { + // + XOHCL activatedBar; + ENUM_X_DIRECTION activatedDir; + bool isActivated = IsActivated( + forDir, + activatedBar, + activatedDir, + forPeriod // + ); + result = isActivated; + if (!result) + { + return result; + } + + // + activatedIndex = activatedBar.Index(); + } + else + { + // + XOHCL startedBar; + ENUM_X_DIRECTION startedDir; + bool isStarted = IsActivated( + forDir, + startedBar, + startedDir, + forPeriod // + ); + result = isStarted; + if (!result) + { + return result; + } + + // + activatedIndex = startedBar.Index(); + } + + // + result = IsValidIndex(activatedIndex); if (!result) { return result; } // - int activatedIndex = activatedBar.Index(); activatedIndex--; // @@ -2164,16 +2204,30 @@ class XCTwoBarZone : public XCZone // bool isBreakedFromUpper = // - (iPBar.high <= Upper() && - iBar.low > Upper()) + isBullish && + // + ( + // + iBar.low > Upper() || + (iBar.low <= Upper() && + iBar.high > Upper()) + // + ) // ; // bool isBreakedFromLower = // - (iPBar.low >= Lower() && - iBar.low < Lower()) + isBearish && + // + ( + // + iBar.low < Lower() || + (iBar.high >= Lower() && + iBar.low < Lower()) + // + ) // ; diff --git a/X121SMCEA/Classes/x-121.smc.market.cycle.helper.class.mq5 b/X121SMCEA/Classes/x-121.smc.market.cycle.helper.class.mq5 index 6afc6b93..9bd7e6c9 100644 --- a/X121SMCEA/Classes/x-121.smc.market.cycle.helper.class.mq5 +++ b/X121SMCEA/Classes/x-121.smc.market.cycle.helper.class.mq5 @@ -142,6 +142,10 @@ class XC121SMCCycleHelper : public XCBase return result; } + // + mSymbol = symbol; + mPeriod = period; + // // X121 ... mX121Helper = new XCX121Helper(); @@ -199,14 +203,7 @@ class XC121SMCCycleHelper : public XCBase */ string GetSymbol() { - // - string result = NULL; - - // - result = mX121Helper.GetSymbol(); - - // - return result; + return mSymbol; } /** @@ -216,14 +213,7 @@ class XC121SMCCycleHelper : public XCBase */ ENUM_TIMEFRAMES GetPeriod() { - // - ENUM_TIMEFRAMES result = NULL; - - // - result = mX121Helper.GetPeriod(); - - // - return result; + return mPeriod; } /** @@ -433,8 +423,8 @@ class XC121SMCCycleHelper : public XCBase mPOIDetector.GetState(conditions.state); // - conditions.symbol = conditions.x121Conditions.symbol; - conditions.period = conditions.x121Conditions.period; + conditions.symbol = GetSymbol(); + conditions.period = GetPeriod(); conditions.time = TimeCurrent(); // @@ -465,6 +455,8 @@ class XC121SMCCycleHelper : public XCBase private: // // Props ... + string mSymbol; + ENUM_TIMEFRAMES mPeriod; // // Actions ... diff --git a/X121SMCEA/Experts/x-121.smc.expert.class.mq5 b/X121SMCEA/Experts/x-121.smc.expert.class.mq5 index e809df11..fa94300e 100644 --- a/X121SMCEA/Experts/x-121.smc.expert.class.mq5 +++ b/X121SMCEA/Experts/x-121.smc.expert.class.mq5 @@ -22,6 +22,8 @@ // // Imports ... #include "../../Classes/x-saherelm.x-expert.class.mq5" +#include "../../Helpers/x-saherelm.x121.xatr.helper.mq5" +#include "../../Helpers/x-saherelm.x121.xcc.helper.mq5" #include "../Classes/x-121.smc.x-tradehandler.class.mq5" #include "../Libraries/x-121.smc.lib.mq5" #include "../Strategy/x-121.smc.strategy.class.mq5" @@ -38,6 +40,8 @@ class XC121SMCExpert : public XCBaseExpert // public: // + XCX121XCCHelper *xccHelper; + XCX121XCTHelper *xctHelper; // // Signal Event Listener ... @@ -1157,20 +1161,19 @@ class XC121SMCExpert : public XCBaseExpert bool InitEA() override { // - bool result = false; + bool result = true; // // Initialize Indicator Helpers ... // - // Bar Timer ... - XCTInputs ctInputs; - ctInputs.Default(); // Default Configurations ... - mCTHelper = new XCXCTHelper(); - result = mCTHelper.Init( - GetSymbol(), - GetPeriod(), - ctInputs // + X121XCCInputs xccInputs; + xccInputs.Default(); + xccHelper = new XCX121XCCHelper(); + result = xccHelper.Init( + _Symbol, + _Period, + xccInputs // ); if (!result) { @@ -1178,14 +1181,13 @@ class XC121SMCExpert : public XCBaseExpert } // - // Bar Styles ... - XCCInputs ccInputs; - ccInputs.Default(); // Default Configurations ... - mCCHelper = new XCXCCHelper(); - result = mCCHelper.Init( - GetSymbol(), - GetPeriod(), - ccInputs // + X121XCTInputs xctInputs; + xctInputs.Default(); + xctHelper = new XCX121XCTHelper(); + result = xctHelper.Init( + _Symbol, + _Period, + xctInputs // ); if (!result) { @@ -1334,13 +1336,13 @@ class XC121SMCExpert : public XCBaseExpert void DestroyEA() override { // - ZeroMemory(mCTHelper); - ZeroMemory(mCCHelper); + ZeroMemory(xccHelper); + ZeroMemory(xctHelper); ZeroMemory(mTradeHandler); // - delete mCTHelper; - delete mCCHelper; + delet xccHelper; + delet xctHelper; delete mTradeHandler; // diff --git a/X121SMCEA/Libraries/x-121.smc.guard.lib.mq5 b/X121SMCEA/Libraries/x-121.smc.guard.lib.mq5 index 48ee81b7..c1f0e469 100644 --- a/X121SMCEA/Libraries/x-121.smc.guard.lib.mq5 +++ b/X121SMCEA/Libraries/x-121.smc.guard.lib.mq5 @@ -33,7 +33,7 @@ bool DetectX121SMCGuards( // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, - XC121SMCCycleHelper *verificationCycleHelper, + // XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper, // @@ -273,20 +273,20 @@ bool DetectX121SMCGuards( // // Verification ... - ENUM_XPOI_EVENTS verificationPoiEvents[]; - ENUM_X_CYCLE_EVENTS verificationCycleEvents[]; - X121SMCCycleConditions verificationConditions; - result = verificationCycleHelper.GetConditions( - verificationCycleEvents, - verificationPoiEvents, - verificationConditions, - zIndex, - loopback // - ); - if (!result) - { - return result; - } + // ENUM_XPOI_EVENTS verificationPoiEvents[]; + // ENUM_X_CYCLE_EVENTS verificationCycleEvents[]; + // X121SMCCycleConditions verificationConditions; + // result = verificationCycleHelper.GetConditions( + // verificationCycleEvents, + // verificationPoiEvents, + // verificationConditions, + // zIndex, + // loopback // + // ); + // if (!result) + // { + // return result; + // } // // Consolidation ... @@ -327,18 +327,18 @@ bool DetectX121SMCGuards( // XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; - XPOIState verificationState = verificationConditions.state; + // XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Cycle X121Conditions ... // X121Conditions triggerXConditions = triggerConditions.x121Conditions; - X121Conditions decisionXConditions = decisionConditions.x121Conditions; - X121Conditions analyseXConditions = analyseConditions.x121Conditions; - X121Conditions verificationXConditions = verificationConditions.x121Conditions; - X121Conditions consolidationXConditions = consolidationConditions.x121Conditions; - X121Conditions visionXConditions = visionConditions.x121Conditions; + // X121Conditions decisionXConditions = decisionConditions.x121Conditions; + // X121Conditions analyseXConditions = analyseConditions.x121Conditions; + // X121Conditions verificationXConditions = verificationConditions.x121Conditions; + // X121Conditions consolidationXConditions = consolidationConditions.x121Conditions; + // X121Conditions visionXConditions = visionConditions.x121Conditions; // // @@ -861,7 +861,7 @@ bool DetectX121SMCGuards( // if (hasTrendGuard) { - guardStop = decisionXConditions.strBuffer[1] - decisionXConditions.atrBuffer[1]; + // guardStop = decisionXConditions.strBuffer[1] - decisionXConditions.atrBuffer[1]; } // @@ -986,7 +986,7 @@ bool DetectX121SMCGuards( // if (hasTrendGuard) { - guardStop = decisionXConditions.strBuffer[1] + decisionXConditions.atrBuffer[1]; + // guardStop = decisionXConditions.strBuffer[1] + decisionXConditions.atrBuffer[1]; } // @@ -1228,8 +1228,8 @@ bool DetectX121SMCGuards( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); diff --git a/X121SMCEA/Libraries/x-121.smc.lib.mq5 b/X121SMCEA/Libraries/x-121.smc.lib.mq5 index a3fb0014..08456978 100644 --- a/X121SMCEA/Libraries/x-121.smc.lib.mq5 +++ b/X121SMCEA/Libraries/x-121.smc.lib.mq5 @@ -98,7 +98,7 @@ struct X121SMCCycleConditions // state.Clean(); - x121Conditions.Clean(); + // x121Conditions.Clean(); // ZeroMemory(this); @@ -273,7 +273,7 @@ struct X121SMCStrategyConditions ENUM_X_DIRECTION signalDir; // - X121Conditions conditions; + // X121Conditions conditions; // XPriceZones priceZones; // XPriceZones decisionZones; // XMarketStructure marketStructure; @@ -304,7 +304,7 @@ struct X121SMCStrategyConditions signalDir = X_DIRECTION_NONE; // - conditions.Clean(); + // conditions.Clean(); // priceZones.Clean(); // decisionZones.Clean(); // marketStructure.Clean(); diff --git a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 index de30edb8..a8f522dd 100644 --- a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 +++ b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 @@ -195,6 +195,10 @@ struct XOBFVG isBullish ? isAbove : isBelow; + if (!result) + { + return result; + } // // Check FVG Must Be Started ... @@ -1678,10 +1682,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // X121SMCStrategyXSupDemOBSSignalConditions &conditions, // - // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, - XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper // @@ -1690,6 +1692,21 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // bool result = false; + // + // Validate Cycle Helpers ... + result = + // + visionCycleHelper != NULL && + analyseCycleHelper != NULL && + decisionCycleHelper != NULL && + consolidationCycleHelper != NULL + // + ; + if (!result) + { + return result; + } + // bool isBullish = false; bool isBearish = false; @@ -1720,23 +1737,6 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Cycles Conditions ... - // - // Trigger ... - // ENUM_XPOI_EVENTS triggerPoiEvents[]; - // ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; - // X121SMCCycleConditions triggerConditions; - // result = triggerCycleHelper.GetConditions( - // triggerCycleEvents, - // triggerPoiEvents, - // triggerConditions, - // zIndex, - // loopback // - // ); - // if (!result) - // { - // return result; - // } - // // Decision ... ENUM_XPOI_EVENTS decisionPoiEvents[]; @@ -1771,23 +1771,6 @@ bool DetectX121SMCXSupDemOBSSignalSetup( return result; } - // - // Verification ... - ENUM_XPOI_EVENTS verificationPoiEvents[]; - ENUM_X_CYCLE_EVENTS verificationCycleEvents[]; - X121SMCCycleConditions verificationConditions; - result = verificationCycleHelper.GetConditions( - verificationCycleEvents, - verificationPoiEvents, - verificationConditions, - zIndex, - loopback // - ); - if (!result) - { - return result; - } - // // Consolidation ... ENUM_XPOI_EVENTS consolidationPoiEvents[]; @@ -1824,21 +1807,17 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Cycles POI States ... - // XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; - XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Cycle X121Conditions ... - // X121Conditions triggerXConditions = triggerConditions.x121Conditions; - X121Conditions decisionXConditions = decisionConditions.x121Conditions; - X121Conditions analyseXConditions = analyseConditions.x121Conditions; - X121Conditions verificationXConditions = verificationConditions.x121Conditions; - X121Conditions consolidationXConditions = consolidationConditions.x121Conditions; - X121Conditions visionXConditions = visionConditions.x121Conditions; + // X121Conditions decisionXConditions = decisionConditions.x121Conditions; + // X121Conditions analyseXConditions = analyseConditions.x121Conditions; + // X121Conditions consolidationXConditions = consolidationConditions.x121Conditions; + // X121Conditions visionXConditions = visionConditions.x121Conditions; // // Setup Conditions ... @@ -1865,8 +1844,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -1881,19 +1860,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // return result; @@ -1911,8 +1890,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -1927,19 +1906,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // return result; @@ -1957,8 +1936,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -1973,19 +1952,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // return result; @@ -2202,8 +2181,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2218,19 +2197,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // result = false; @@ -2260,8 +2239,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2276,19 +2255,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // RemoveX121SMCXSupDemOBSDraws(); @@ -2446,8 +2425,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2462,19 +2441,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // RemoveX121SMCXSupDemOBSDraws(); @@ -2518,6 +2497,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // bool hasOBFVGs = conditions.HasOBFVGs(); int obFVGsCount = conditions.CountOBFVGs(); + + // if (hasOBs && hasFVGs && !hasOBFVGs) @@ -2531,8 +2512,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Check Ob Index inside OB FVGS ... bool isOBFVGExists = false; - bool hasOBFVGs = conditions.HasOBFVGs(); - int obFVGsCount = conditions.CountOBFVGs(); + hasOBFVGs = conditions.HasOBFVGs(); + obFVGsCount = conditions.CountOBFVGs(); if (hasOBFVGs) { // @@ -2564,6 +2545,13 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // XCFVG *jFVG = fvgs[j]; + // + ENUM_TIMEFRAMES jPeriod = jFVG.GetPeriod(); + if (jPeriod != PERIOD_M15) + { + Print(ToString(jPeriod)); + } + // XOBFVG iOBFVG; @@ -2575,7 +2563,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // iOBFVG.ob = iOB; iOBFVG.fvg = jFVG; - + // bool isValidOBFVG = iOBFVG.IsValid(); if (isValidOBFVG) @@ -2619,8 +2607,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2635,19 +2623,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // RemoveX121SMCXSupDemOBSDraws(); @@ -2734,8 +2722,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2750,19 +2738,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // RemoveX121SMCXSupDemOBSDraws(); @@ -2782,8 +2770,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -2795,19 +2783,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( analyseState.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // // Now We Have to Wait for Price Inside Box ... @@ -3019,8 +3007,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(decisionCycleEvents); Clean(analysePoiEvents); Clean(analyseCycleEvents); - Clean(verificationPoiEvents); - Clean(verificationCycleEvents); + // Clean(verificationPoiEvents); + // Clean(verificationCycleEvents); Clean(consolidationPoiEvents); Clean(consolidationCycleEvents); Clean(visionPoiEvents); @@ -3035,19 +3023,19 @@ bool DetectX121SMCXSupDemOBSSignalSetup( decisionPBar.Clean(); decisionState.Clean(); visionConditions.Clean(); - visionXConditions.Clean(); - verificationState.Clean(); + // visionXConditions.Clean(); + // verificationState.Clean(); // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); // triggerXConditions.Clean(); - analyseXConditions.Clean(); + // analyseXConditions.Clean(); decisionConditions.Clean(); - decisionXConditions.Clean(); - verificationConditions.Clean(); - verificationXConditions.Clean(); + // decisionXConditions.Clean(); + // verificationConditions.Clean(); + // verificationXConditions.Clean(); consolidationConditions.Clean(); - consolidationXConditions.Clean(); + // consolidationXConditions.Clean(); // // Summarize Conditions ... @@ -3164,7 +3152,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger( // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, - XC121SMCCycleHelper *verificationCycleHelper, + // XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper, // @@ -3462,7 +3450,7 @@ bool DetectX121SMCXSupDemOBSGuards( // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, - XC121SMCCycleHelper *verificationCycleHelper, + // XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper // ) diff --git a/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 b/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 index b190800a..1d4d1fe9 100644 --- a/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 +++ b/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 @@ -108,7 +108,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // ZeroMemory(mTriggerCycleHelper); ZeroMemory(mDecisionCycleHelper); ZeroMemory(mAnalyseCycleHelper); - ZeroMemory(mVerificationCycleHelper); + // ZeroMemory(mVerificationCycleHelper); ZeroMemory(mConsolidationCycleHelper); ZeroMemory(mVisionCycleHelper); @@ -116,7 +116,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // delete mTriggerCycleHelper; delete mDecisionCycleHelper; delete mAnalyseCycleHelper; - delete mVerificationCycleHelper; + // delete mVerificationCycleHelper; delete mConsolidationCycleHelper; delete mVisionCycleHelper; @@ -357,7 +357,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy signal.partialCloseOnTPLevel = 0; signal.partialCloseMultiplier = 0; signal.trailSLStartOnReachTPLevel = 3; - } } @@ -403,7 +402,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, - mVerificationCycleHelper, + // mVerificationCycleHelper, mConsolidationCycleHelper, mVisionCycleHelper // ); @@ -447,7 +446,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // // Signalling Functions ... - // // XSupDemOBS Signal ... bool DetectXSupDemOBSSignal( @@ -457,6 +455,21 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // bool result = false; + // + // Validate Cycle Helpers ... + result = + // + mVisionCycleHelper != NULL && + mAnalyseCycleHelper != NULL && + mDecisionCycleHelper != NULL && + mConsolidationCycleHelper != NULL + // + ; + if (!result) + { + return result; + } + // bool isBullish = false; bool isBearish = false; @@ -531,10 +544,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy symbol, period, mX121SMCXSupDemOBSConditions, - // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, - mVerificationCycleHelper, mConsolidationCycleHelper, mVisionCycleHelper // ); @@ -591,7 +602,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, - mVerificationCycleHelper, + // mVerificationCycleHelper, mConsolidationCycleHelper, mVisionCycleHelper // ); @@ -726,9 +737,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // x121Inputs.showRSI = false; - // - bool isInited = false; - // // XPV ... @@ -749,6 +757,15 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy x121Inputs.xatrInputs.atrMultiplier = 1.5; x121Inputs.xatrInputs.atrSmoothingMode = X_MA_MODE_EMA; + // + // XCC ... + x121Inputs.xccInputs.showCandles = false; // false; + + // + // XCT ... + x121Inputs.xctInputs.clr = clrBlueViolet; + x121Inputs.xctInputs.showCandleTime = false; // false; + // // XPV ... x121Inputs.xpvInputs.showSar = showAll || false; @@ -796,6 +813,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // // Initialize Cycle Helpers ... + // + bool isInited = false; + // int requiredPOIS = MaxAllowedRequiredPOIs(); @@ -970,62 +990,62 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy mAnalyseCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); } - // - // Verification Cycle ... - mVerificationCycleHelper = new XC121SMCCycleHelper(); - isInited = mVerificationCycleHelper.Init( - symbol, - PERIOD_M30, - x121Inputs, - requiredPOIS // - ); - if (isInited) - { - // - // Configure POI Drawer ... - color bullishColor = clrOliveDrab; - color bearishColor = clrSteelBlue; + // // + // // Verification Cycle ... + // mVerificationCycleHelper = new XC121SMCCycleHelper(); + // isInited = mVerificationCycleHelper.Init( + // symbol, + // PERIOD_M30, + // // x121Inputs, + // requiredPOIS // + // ); + // if (isInited) + // { + // // + // // Configure POI Drawer ... + // color bullishColor = clrOliveDrab; + // color bearishColor = clrSteelBlue; - // - // Bars ... - mVerificationCycleHelper.mPOIDrawer.BarBullishColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.BarBearishColor(bearishColor); + // // + // // Bars ... + // mVerificationCycleHelper.mPOIDrawer.BarBullishColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.BarBearishColor(bearishColor); - // - // Swings ... - mVerificationCycleHelper.mPOIDrawer.SwingLowColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.SwingHighColor(bearishColor); + // // + // // Swings ... + // mVerificationCycleHelper.mPOIDrawer.SwingLowColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.SwingHighColor(bearishColor); - // - // Momentum ... - mVerificationCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor); + // // + // // Momentum ... + // mVerificationCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor); - // - // Rejection ... - mVerificationCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor); + // // + // // Rejection ... + // mVerificationCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor); - // - // Support and Resistance ... - mVerificationCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor); + // // + // // Support and Resistance ... + // mVerificationCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor); - // - // Demand and Supply ... - mVerificationCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor); + // // + // // Demand and Supply ... + // mVerificationCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor); - // - // Order Blocks ... - mVerificationCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor); + // // + // // Order Blocks ... + // mVerificationCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor); - // - // Fair Value Gaps ... - mVerificationCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); - mVerificationCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); - } + // // + // // Fair Value Gaps ... + // mVerificationCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); + // mVerificationCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); + // } // // Consolidation Cycle ...