From 42fec0e9068a9d363be78c5122b8ec34d40d5890 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sun, 9 Feb 2025 09:31:34 +0330 Subject: [PATCH] last ... --- Documents/BKP/xobs/tmp.signals.mq5 | 288 ++ .../BKP/xobs}/x-121.smc.x.signal.lib.mq5 | 0 .../BKP/xobs}/x-121.smc.xobs.signal.lib.mq5 | 0 Helpers/x-saherelm.x121.helper.mq5 | 2748 ++++++++--------- Libraries/x-saherelm.common.lib.mq5 | 13 +- Libraries/x-saherelm.x-poi.lib.mq5 | 20 +- X121SMCEA/Libraries/x-121.smc.lib.mq5 | 10 - .../x-121.smc.xsupdemobs.signal.lib.mq5 | 184 +- .../Strategy/x-121.smc.strategy.class.mq5 | 352 +-- 9 files changed, 1830 insertions(+), 1785 deletions(-) create mode 100644 Documents/BKP/xobs/tmp.signals.mq5 rename {X121SMCEA/Signals => Documents/BKP/xobs}/x-121.smc.x.signal.lib.mq5 (100%) rename {X121SMCEA/Signals => Documents/BKP/xobs}/x-121.smc.xobs.signal.lib.mq5 (100%) diff --git a/Documents/BKP/xobs/tmp.signals.mq5 b/Documents/BKP/xobs/tmp.signals.mq5 new file mode 100644 index 00000000..ad45f65f --- /dev/null +++ b/Documents/BKP/xobs/tmp.signals.mq5 @@ -0,0 +1,288 @@ +#include "../Signals/x-121.smc.xobs.signal.lib.mq5" + +bool useXOBSSignal; +useXOBSSignal = false; + +bool hasXOBSSignal = false; + + // + // XOBS Signal ... + if (useXOBSSignal && !hasSignal) + { + // + hasXOBSSignal = DetectXOBSSignal(conditions); + hasSignal = hasXOBSSignal; + } + + Clean(mX121SMCXOBSConditionsCollection); + + // + // XOBS Guard Detection ... + if (useXOBSSignal) + { + // // + // bool hasGuard = DetectX121SMCXOBSGuards( + // guards, + // positions, + // mTriggerCycleHelper, + // mDecisionCycleHelper, + // mAnalyseCycleHelper, + // mVerificationCycleHelper, + // mConsolidationCycleHelper, + // mVisionCycleHelper // + // ); + } + + // + // XOBS Signal ... + bool DetectXOBSSignal( + X121SMCStrategyConditions &conditions // + ) + { + // + bool result = false; + + // + bool isBullish = false; + bool isBearish = false; + + // + int zIndex = 0; + int cIndex = zIndex + 1; + int pIndex = cIndex + 1; + int ppIndex = pIndex + 1; + + // + string symbol = GetSymbol(); + ENUM_TIMEFRAMES period = GetPeriod(); + + // + XOHCL zBar; + result = zBar.Init( + symbol, + period, + zIndex // + ); + if (!result) + { + return result; + } + + // + XOHCL cBar; + result = cBar.Init( + symbol, + period, + cIndex // + ); + if (!result) + { + return result; + } + + // + XOHCL pBar; + result = pBar.Init( + symbol, + period, + pIndex // + ); + if (!result) + { + return result; + } + + // + double cLL = cBar.FindLowest(7, MODE_LOW); + double cHH = cBar.FindHighest(7, MODE_HIGH); + + // + datetime cTime = TimeCurrent(); + + // + ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XOBS; + string providerStr = ToString(provider); + + // + // Detect Setup Conditions ... + datetime setupTime = mX121SMCXOBSConditions.setupTime; + bool isSetuped = mX121SMCXOBSConditions.IsSetuped(); + ENUM_X_DIRECTION setupDir = mX121SMCXOBSConditions.dir; + if (!isSetuped) + { + // + // Detect Signal Setup ... + // isSetuped = DetectX121SMCXOBSSignalSetup( + // symbol, + // period, + // mX121SMCXOBSConditions, + // mTriggerCycleHelper, + // mDecisionCycleHelper, + // mAnalyseCycleHelper, + // mVerificationCycleHelper, + // mConsolidationCycleHelper, + // mVisionCycleHelper // + // ); + + // + setupDir = mX121SMCXOBSConditions.dir; + setupTime = mX121SMCXOBSConditions.setupTime; + + // + if (isSetuped) + { + // + int items = AddX121SMCXOBSConditionsIfNotExists( + mX121SMCXOBSConditions, + mX121SMCXOBSConditionsCollection // + ); + + // + mX121SMCXOBSConditions.Clean(); + } + } + + // + int conditionsCount = ArraySize(mX121SMCXOBSConditionsCollection); + result = IsValidSize(conditionsCount); + if (!result) + { + return result; + } + + // + // Looking For Conditions ... + int selectedIndex = 0; + X121SMCStrategyXOBSSignalConditions mTmpConditions[]; + Copy( + mX121SMCXOBSConditionsCollection, + mTmpConditions // + ); + X121SMCStrategyXOBSSignalConditions mConditions; + for (int i = 0; i < conditionsCount; i++) + { + // + // Check Triggers ... + bool canTrigger = mTmpConditions[i].CanTrigger(); + datetime triggerTime = mTmpConditions[i].triggerTime; + if (!canTrigger) + { + // + // Detect Signal Trigger ... + // canTrigger = DetectX121SMCXOBSSignalTrigger( + // mTmpConditions[i], + // symbol, + // period, + // mTriggerCycleHelper, + // mDecisionCycleHelper, + // mAnalyseCycleHelper, + // mVerificationCycleHelper, + // mConsolidationCycleHelper, + // mVisionCycleHelper // + // ); + + // + result = canTrigger; + if (!result) + { + // + bool isISetuped = mTmpConditions[i].IsSetuped(); + if (!isISetuped) + { + // + ArrayRemove( + mX121SMCXOBSConditionsCollection, + i, + 1 // + ); + } + continue; + } + + // + triggerTime = mTmpConditions[i].triggerTime; + } + + // + if (canTrigger) + { + // + selectedIndex = i; + mConditions = mTmpConditions[i]; + break; + } + } + + // + result = IsValid(mConditions.setupTime) && + HasDirection(mConditions.dir); + if (!result) + { + return result; + } + + // + // Remove Selected Index from Main Collection ... + ArrayRemove( + mX121SMCXOBSConditionsCollection, + selectedIndex, + 1 // + ); + + // + // Check Signal Direction ... + isBullish = IsBullish(mConditions.dir); + isBearish = IsBearish(mConditions.dir); + result = isBullish || + isBearish; + if (!result) + { + return result; + } + + // + // Issues Signal on Conditions ... + conditions.sl = mConditions.sl; + conditions.provider = providerStr; + conditions.signalDir = mConditions.dir; + conditions.target = mConditions.target; + + // + return result; + } + +////////////////////////////////////////////////////////////////////////// +X_121_SMC_PROVIDER_XOBS, + + + // + case X_121_SMC_PROVIDER_XOBS: + result = X121SMCXOBSToken; + break; + + else if (Contains(X121SMCXOBSToken, value)) + { + result = X_121_SMC_PROVIDER_XOBS; + } + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// + diff --git a/X121SMCEA/Signals/x-121.smc.x.signal.lib.mq5 b/Documents/BKP/xobs/x-121.smc.x.signal.lib.mq5 similarity index 100% rename from X121SMCEA/Signals/x-121.smc.x.signal.lib.mq5 rename to Documents/BKP/xobs/x-121.smc.x.signal.lib.mq5 diff --git a/X121SMCEA/Signals/x-121.smc.xobs.signal.lib.mq5 b/Documents/BKP/xobs/x-121.smc.xobs.signal.lib.mq5 similarity index 100% rename from X121SMCEA/Signals/x-121.smc.xobs.signal.lib.mq5 rename to Documents/BKP/xobs/x-121.smc.xobs.signal.lib.mq5 diff --git a/Helpers/x-saherelm.x121.helper.mq5 b/Helpers/x-saherelm.x121.helper.mq5 index 20c42064..d2e44d0e 100644 --- a/Helpers/x-saherelm.x121.helper.mq5 +++ b/Helpers/x-saherelm.x121.helper.mq5 @@ -1589,115 +1589,115 @@ class XCX121Helper : public XCBase // // Initial Helpers ... - // - // XPV ... - xpvHelper = new XCX121XPVHelper(); - result = xpvHelper.Init( - symbol, - period, - xpvInputs // - ); - if (!result) - { - return result; - } + // // + // // XPV ... + // xpvHelper = new XCX121XPVHelper(); + // result = xpvHelper.Init( + // symbol, + // period, + // xpvInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XHK ... - xhkHelper = new XCX121XHKHelper(); - result = xhkHelper.Init( - symbol, - period, - xhkInputs // - ); - if (!result) - { - return result; - } + // // + // // XHK ... + // xhkHelper = new XCX121XHKHelper(); + // result = xhkHelper.Init( + // symbol, + // period, + // xhkInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XATR ... - xatrHelper = new XCX121XATRHelper(); - result = xatrHelper.Init( - symbol, - period, - xatrInputs // - ); - if (!result) - { - return result; - } + // // + // // XATR ... + // xatrHelper = new XCX121XATRHelper(); + // result = xatrHelper.Init( + // symbol, + // period, + // xatrInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XSTR ... - xstrHelper = new XCX121XSTRHelper(); - result = xstrHelper.Init( - symbol, - period, - xstrInputs // - ); - if (!result) - { - return result; - } + // // + // // XSTR ... + // xstrHelper = new XCX121XSTRHelper(); + // result = xstrHelper.Init( + // symbol, + // period, + // xstrInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XCHE ... - xcheHelper = new XCX121XCHEHelper(); - result = xcheHelper.Init( - symbol, - period, - xcheInputs // - ); - if (!result) - { - return result; - } + // // + // // XCHE ... + // xcheHelper = new XCX121XCHEHelper(); + // result = xcheHelper.Init( + // symbol, + // period, + // xcheInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XDON ... - xdonHelper = new XCX121XDONHelper(); - result = xdonHelper.Init( - symbol, - period, - xdonInputs // - ); - if (!result) - { - return result; - } + // // + // // XDON ... + // xdonHelper = new XCX121XDONHelper(); + // result = xdonHelper.Init( + // symbol, + // period, + // xdonInputs // + // ); + // if (!result) + // { + // return result; + // } - // - // XVWAP ... - xvwapHelper = new XCX121XVWAPHelper(); - result = xvwapHelper.Init( - symbol, - period, - xvwapInputs // - ); - 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 // - ); + // // + // if (inputs.showRSI) + // { + // // + // mRSIHandler = iRSI( + // symbol, + // period, + // xatrInputs.rsiLength, + // xatrInputs.rsiAppliedTo // + // ); - // - result = mRSIHandler != INVALID_HANDLE; - if (!result) - { - return result; - } - } + // // + // result = mRSIHandler != INVALID_HANDLE; + // if (!result) + // { + // return result; + // } + // } // return result; @@ -1884,1279 +1884,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; diff --git a/Libraries/x-saherelm.common.lib.mq5 b/Libraries/x-saherelm.common.lib.mq5 index d00e838f..8c26e79f 100644 --- a/Libraries/x-saherelm.common.lib.mq5 +++ b/Libraries/x-saherelm.common.lib.mq5 @@ -384,7 +384,10 @@ struct XTick * * @return ( bool ) */ - bool Init(string _symbol) + bool Init( + string _symbol, + ENUM_TIMEFRAMES _volumePeriod = NULL // + ) { // bool result = false; @@ -401,7 +404,13 @@ struct XTick double _bid = GetBid(_symbol); double _ask = GetAsk(_symbol); double _spread = GetSpread(_symbol); - long _volume = iTickVolume(_symbol, PERIOD_M1, 0); + + // + long _volume = 0; + if (IsValid(_volumePeriod)) + { + _volume = iTickVolume(_symbol, _volumePeriod, 0); + } // result = Init( diff --git a/Libraries/x-saherelm.x-poi.lib.mq5 b/Libraries/x-saherelm.x-poi.lib.mq5 index ade8ac8d..5b75ba3b 100644 --- a/Libraries/x-saherelm.x-poi.lib.mq5 +++ b/Libraries/x-saherelm.x-poi.lib.mq5 @@ -4263,12 +4263,13 @@ class XCTicksZone : public XCTwoBarZone */ bool Init( XOHCL &startBar, - XOHCL &endBar // + XOHCL &endBar, + ENUM_TIMEFRAMES forPeriod = NULL // ) { // bool result = false; - + // result = endBar.IsValid() && startBar.IsValid(); @@ -4277,6 +4278,11 @@ class XCTicksZone : public XCTwoBarZone return result; } + // + if (!IsSpecifiedValid(forPeriod)) { + forPeriod = endBar.period; + } + // // Calculate Start and End Time ... datetime from = startBar.time; @@ -4308,7 +4314,7 @@ class XCTicksZone : public XCTwoBarZone // Ticks Volumes ... int ticksVolumeCount = CopyTickVolume( symbol, - PERIOD_M1, + forPeriod, from, to, mTickVolumes // @@ -4465,12 +4471,12 @@ class XCTicksZone : public XCTwoBarZone datetime to1M = (datetime)((int)endBar.time + PeriodSeconds(period) - 60); int to1MIndex = iBarShift( symbol, - PERIOD_M1, + forPeriod, to1M // ); int from1MIndex = iBarShift( symbol, - PERIOD_M1, + forPeriod, from // ); for (int i = from1MIndex; i > to1MIndex; i--) @@ -4479,7 +4485,7 @@ class XCTicksZone : public XCTwoBarZone XOHCL iBar; bool isInited = iBar.Init( symbol, - PERIOD_M1, + forPeriod, i // ); if (!isInited) @@ -4488,7 +4494,7 @@ class XCTicksZone : public XCTwoBarZone } ulong iVolume = iTickVolume( symbol, - PERIOD_M1, + forPeriod, i // ); diff --git a/X121SMCEA/Libraries/x-121.smc.lib.mq5 b/X121SMCEA/Libraries/x-121.smc.lib.mq5 index a2fd0660..4dd73516 100644 --- a/X121SMCEA/Libraries/x-121.smc.lib.mq5 +++ b/X121SMCEA/Libraries/x-121.smc.lib.mq5 @@ -44,7 +44,6 @@ enum ENUM_X_121_SMC_PROVIDERS { // X_121_SMC_PROVIDER_NONE, - X_121_SMC_PROVIDER_XOBS, X_121_SMC_PROVIDER_XSUPDEMOBS, }; @@ -712,11 +711,6 @@ string ToString(ENUM_X_121_SMC_PROVIDERS value) case X_121_SMC_PROVIDER_XSUPDEMOBS: result = X121SMCXSupDemOBSToken; break; - - // - case X_121_SMC_PROVIDER_XOBS: - result = X121SMCXOBSToken; - break; } // @@ -746,10 +740,6 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value) { result = X_121_SMC_PROVIDER_XSUPDEMOBS; } - else if (Contains(X121SMCXOBSToken, value)) - { - result = X_121_SMC_PROVIDER_XOBS; - } // return result; diff --git a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 index 8fdd4a0f..ab642895 100644 --- a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 +++ b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.lib.mq5 @@ -1678,7 +1678,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // X121SMCStrategyXSupDemOBSSignalConditions &conditions, // - XC121SMCCycleHelper *triggerCycleHelper, + // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *verificationCycleHelper, @@ -1722,20 +1722,20 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Trigger ... - ENUM_XPOI_EVENTS triggerPoiEvents[]; - ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; - X121SMCCycleConditions triggerConditions; - result = triggerCycleHelper.GetConditions( - triggerCycleEvents, - triggerPoiEvents, - triggerConditions, - zIndex, - loopback // - ); - if (!result) - { - return result; - } + // ENUM_XPOI_EVENTS triggerPoiEvents[]; + // ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; + // X121SMCCycleConditions triggerConditions; + // result = triggerCycleHelper.GetConditions( + // triggerCycleEvents, + // triggerPoiEvents, + // triggerConditions, + // zIndex, + // loopback // + // ); + // if (!result) + // { + // return result; + // } // // Decision ... @@ -1824,7 +1824,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Cycles POI States ... - XPOIState triggerState = triggerConditions.state; + // XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; XPOIState verificationState = verificationConditions.state; @@ -1833,7 +1833,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Cycle X121Conditions ... - X121Conditions triggerXConditions = triggerConditions.x121Conditions; + // X121Conditions triggerXConditions = triggerConditions.x121Conditions; X121Conditions decisionXConditions = decisionConditions.x121Conditions; X121Conditions analyseXConditions = analyseConditions.x121Conditions; X121Conditions verificationXConditions = verificationConditions.x121Conditions; @@ -1859,8 +1859,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (!result) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -1874,7 +1874,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -1883,10 +1883,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -1905,8 +1905,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (!result) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -1920,7 +1920,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -1929,10 +1929,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -1951,8 +1951,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (!result) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -1966,7 +1966,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -1975,10 +1975,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2196,8 +2196,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (isDestroyed) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2211,7 +2211,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -2220,10 +2220,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2254,8 +2254,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (!result) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2269,7 +2269,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -2278,10 +2278,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2299,7 +2299,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // // Re Draw Working Zone ... - RemoveX121SMCXSupDemOBSWorkingZoneDraws(); + // RemoveX121SMCXSupDemOBSWorkingZoneDraws(); DrawX121SMCXSupDemOBSWorkingZone( conditions, visionCycleHelper.mPOIDrawer // @@ -2440,8 +2440,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( if (!result) { // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2455,7 +2455,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -2464,10 +2464,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2613,8 +2613,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(fvgs); // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2628,7 +2628,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -2637,10 +2637,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2728,8 +2728,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(fvgs); // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2743,7 +2743,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -2752,10 +2752,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -2776,8 +2776,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( Clean(fvgs); // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -2791,16 +2791,16 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionState.Clean(); visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -3013,8 +3013,8 @@ bool DetectX121SMCXSupDemOBSSignalSetup( ZeroMemory(insideFVG); // - Clean(triggerPoiEvents); - Clean(triggerCycleEvents); + // Clean(triggerPoiEvents); + // Clean(triggerCycleEvents); Clean(decisionPoiEvents); Clean(decisionCycleEvents); Clean(analysePoiEvents); @@ -3028,7 +3028,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup( // visionState.Clean(); - triggerState.Clean(); + // triggerState.Clean(); analyseState.Clean(); decisionZBar.Clean(); decisionCBar.Clean(); @@ -3037,10 +3037,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup( visionConditions.Clean(); visionXConditions.Clean(); verificationState.Clean(); - triggerConditions.Clean(); + // triggerConditions.Clean(); analyseConditions.Clean(); consolidationState.Clean(); - triggerXConditions.Clean(); + // triggerXConditions.Clean(); analyseXConditions.Clean(); decisionConditions.Clean(); decisionXConditions.Clean(); @@ -3161,7 +3161,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger( string _symbol, ENUM_TIMEFRAMES _period, // - XC121SMCCycleHelper *triggerCycleHelper, + // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *verificationCycleHelper, @@ -3459,7 +3459,7 @@ bool DetectX121SMCXSupDemOBSSignalTrigger( bool DetectX121SMCXSupDemOBSGuards( X121SMCGuard &guards[], const XPosition &positions[], - XC121SMCCycleHelper *triggerCycleHelper, + // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *verificationCycleHelper, @@ -3473,28 +3473,28 @@ bool DetectX121SMCXSupDemOBSGuards( // string provider = ToString(X_121_SMC_PROVIDER_XSUPDEMOBS); - // - result = DetectX121SMCGuards( - provider, - guards, - positions, - triggerCycleHelper, - decisionCycleHelper, - analyseCycleHelper, - verificationCycleHelper, - consolidationCycleHelper, - visionCycleHelper, - // - true, // CloseOnTPNear Guard ... - true, // CloseLongsOnBearishTrend Guard ... - true, // CloseShortsOnBullishTrend Guard ... - true, // CloseAllWeekend Guard ... - true, // PartialCloseOnTrendChange Guard ... - true, // TrailStop Guard ... - true, // TrailTarget Guard ... - true // Hedge Guard ... - // - ); + // // + // result = DetectX121SMCGuards( + // provider, + // guards, + // positions, + // // triggerCycleHelper, + // decisionCycleHelper, + // analyseCycleHelper, + // verificationCycleHelper, + // consolidationCycleHelper, + // visionCycleHelper, + // // + // true, // CloseOnTPNear Guard ... + // true, // CloseLongsOnBearishTrend Guard ... + // true, // CloseShortsOnBullishTrend Guard ... + // true, // CloseAllWeekend Guard ... + // true, // PartialCloseOnTrendChange Guard ... + // true, // TrailStop Guard ... + // true, // TrailTarget Guard ... + // true // Hedge Guard ... + // // + // ); // return result; diff --git a/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 b/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 index 625dc371..b190800a 100644 --- a/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 +++ b/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 @@ -27,7 +27,6 @@ #include "../Classes/x-121.smc.market.cycle.helper.class.mq5" // -#include "../Signals/x-121.smc.xobs.signal.lib.mq5" #include "../Signals/x-121.smc.xsupdemobs.signal.lib.mq5" // @@ -42,7 +41,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy public: // // Props ... - bool useXOBSSignal; bool useXSupDemOBSSignal; // @@ -104,11 +102,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy void Destroy() override { // - Clean(mX121SMCXOBSConditionsCollection); Clean(mX121SMCXSupDemOBSConditionsCollection); // - ZeroMemory(mTriggerCycleHelper); + // ZeroMemory(mTriggerCycleHelper); ZeroMemory(mDecisionCycleHelper); ZeroMemory(mAnalyseCycleHelper); ZeroMemory(mVerificationCycleHelper); @@ -116,7 +113,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy ZeroMemory(mVisionCycleHelper); // - delete mTriggerCycleHelper; + // delete mTriggerCycleHelper; delete mDecisionCycleHelper; delete mAnalyseCycleHelper; delete mVerificationCycleHelper; @@ -204,18 +201,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy bool hasSignal = false; // - bool hasXOBSSignal = false; bool hasXSupDemOBSSignal = false; - // - // XOBS Signal ... - if (useXOBSSignal && !hasSignal) - { - // - hasXOBSSignal = DetectXOBSSignal(conditions); - hasSignal = hasXOBSSignal; - } - // // XSupDemOBS Signal ... if (useXSupDemOBSSignal && !hasSignal) @@ -405,23 +392,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy return result; } - // - // XOBS Guard Detection ... - if (useXOBSSignal) - { - // - bool hasGuard = DetectX121SMCXOBSGuards( - guards, - positions, - mTriggerCycleHelper, - mDecisionCycleHelper, - mAnalyseCycleHelper, - mVerificationCycleHelper, - mConsolidationCycleHelper, - mVisionCycleHelper // - ); - } - // // XSupDemOBS Guard Detection ... if (useXSupDemOBSSignal) @@ -430,7 +400,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy bool hasGuard = DetectX121SMCXSupDemOBSGuards( guards, positions, - mTriggerCycleHelper, + // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, mVerificationCycleHelper, @@ -464,7 +434,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // Props ... // - XC121SMCCycleHelper *mTriggerCycleHelper; + // XC121SMCCycleHelper *mTriggerCycleHelper; XC121SMCCycleHelper *mDecisionCycleHelper; XC121SMCCycleHelper *mAnalyseCycleHelper; XC121SMCCycleHelper *mVerificationCycleHelper; @@ -477,223 +447,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // // Signalling Functions ... - // - // XOBS Signal ... - bool DetectXOBSSignal( - X121SMCStrategyConditions &conditions // - ) - { - // - bool result = false; - - // - bool isBullish = false; - bool isBearish = false; - - // - int zIndex = 0; - int cIndex = zIndex + 1; - int pIndex = cIndex + 1; - int ppIndex = pIndex + 1; - - // - string symbol = GetSymbol(); - ENUM_TIMEFRAMES period = GetPeriod(); - - // - XOHCL zBar; - result = zBar.Init( - symbol, - period, - zIndex // - ); - if (!result) - { - return result; - } - - // - XOHCL cBar; - result = cBar.Init( - symbol, - period, - cIndex // - ); - if (!result) - { - return result; - } - - // - XOHCL pBar; - result = pBar.Init( - symbol, - period, - pIndex // - ); - if (!result) - { - return result; - } - - // - double cLL = cBar.FindLowest(7, MODE_LOW); - double cHH = cBar.FindHighest(7, MODE_HIGH); - - // - datetime cTime = TimeCurrent(); - - // - ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XOBS; - string providerStr = ToString(provider); - - // - // Detect Setup Conditions ... - datetime setupTime = mX121SMCXOBSConditions.setupTime; - bool isSetuped = mX121SMCXOBSConditions.IsSetuped(); - ENUM_X_DIRECTION setupDir = mX121SMCXOBSConditions.dir; - if (!isSetuped) - { - // - // Detect Signal Setup ... - isSetuped = DetectX121SMCXOBSSignalSetup( - symbol, - period, - mX121SMCXOBSConditions, - mTriggerCycleHelper, - mDecisionCycleHelper, - mAnalyseCycleHelper, - mVerificationCycleHelper, - mConsolidationCycleHelper, - mVisionCycleHelper // - ); - - // - setupDir = mX121SMCXOBSConditions.dir; - setupTime = mX121SMCXOBSConditions.setupTime; - - // - if (isSetuped) - { - // - int items = AddX121SMCXOBSConditionsIfNotExists( - mX121SMCXOBSConditions, - mX121SMCXOBSConditionsCollection // - ); - - // - mX121SMCXOBSConditions.Clean(); - } - } - - // - int conditionsCount = ArraySize(mX121SMCXOBSConditionsCollection); - result = IsValidSize(conditionsCount); - if (!result) - { - return result; - } - - // - // Looking For Conditions ... - int selectedIndex = 0; - X121SMCStrategyXOBSSignalConditions mTmpConditions[]; - Copy( - mX121SMCXOBSConditionsCollection, - mTmpConditions // - ); - X121SMCStrategyXOBSSignalConditions mConditions; - for (int i = 0; i < conditionsCount; i++) - { - // - // Check Triggers ... - bool canTrigger = mTmpConditions[i].CanTrigger(); - datetime triggerTime = mTmpConditions[i].triggerTime; - if (!canTrigger) - { - // - // Detect Signal Trigger ... - canTrigger = DetectX121SMCXOBSSignalTrigger( - mTmpConditions[i], - symbol, - period, - mTriggerCycleHelper, - mDecisionCycleHelper, - mAnalyseCycleHelper, - mVerificationCycleHelper, - mConsolidationCycleHelper, - mVisionCycleHelper // - ); - - // - result = canTrigger; - if (!result) - { - // - bool isISetuped = mTmpConditions[i].IsSetuped(); - if (!isISetuped) - { - // - ArrayRemove( - mX121SMCXOBSConditionsCollection, - i, - 1 // - ); - } - continue; - } - - // - triggerTime = mTmpConditions[i].triggerTime; - } - - // - if (canTrigger) - { - // - selectedIndex = i; - mConditions = mTmpConditions[i]; - break; - } - } - - // - result = IsValid(mConditions.setupTime) && - HasDirection(mConditions.dir); - if (!result) - { - return result; - } - - // - // Remove Selected Index from Main Collection ... - ArrayRemove( - mX121SMCXOBSConditionsCollection, - selectedIndex, - 1 // - ); - - // - // Check Signal Direction ... - isBullish = IsBullish(mConditions.dir); - isBearish = IsBearish(mConditions.dir); - result = isBullish || - isBearish; - if (!result) - { - return result; - } - - // - // Issues Signal on Conditions ... - conditions.sl = mConditions.sl; - conditions.provider = providerStr; - conditions.signalDir = mConditions.dir; - conditions.target = mConditions.target; - - // - return result; - } // // XSupDemOBS Signal ... @@ -778,7 +531,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy symbol, period, mX121SMCXSupDemOBSConditions, - mTriggerCycleHelper, + // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, mVerificationCycleHelper, @@ -835,7 +588,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy mTmpConditions[i], symbol, period, - mTriggerCycleHelper, + // mTriggerCycleHelper, mDecisionCycleHelper, mAnalyseCycleHelper, mVerificationCycleHelper, @@ -928,7 +681,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy void InitialHelpers() { // - useXOBSSignal = false; useXSupDemOBSSignal = true; // @@ -1049,60 +801,60 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy // // Trigger Cycle ... - mTriggerCycleHelper = new XC121SMCCycleHelper(); - isInited = mTriggerCycleHelper.Init( - symbol, - PERIOD_M1, - x121Inputs, - requiredPOIS // - ); - if (isInited) - { - // - // Configure POI Drawer ... - color bullishColor = clrYellowGreen; - color bearishColor = clrChocolate; + // mTriggerCycleHelper = new XC121SMCCycleHelper(); + // isInited = mTriggerCycleHelper.Init( + // symbol, + // PERIOD_M1, + // x121Inputs, + // requiredPOIS // + // ); + // if (isInited) + // { + // // + // // Configure POI Drawer ... + // color bullishColor = clrYellowGreen; + // color bearishColor = clrChocolate; - // - // Bars ... - mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor); + // // + // // Bars ... + // mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor); - // - // Swings ... - mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor); + // // + // // Swings ... + // mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor); - // - // Momentum ... - mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor); + // // + // // Momentum ... + // mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor); - // - // Rejection ... - mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor); + // // + // // Rejection ... + // mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor); - // - // Support and Resistance ... - mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor); + // // + // // Support and Resistance ... + // mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor); - // - // Demand and Supply ... - mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor); + // // + // // Demand and Supply ... + // mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor); - // - // Order Blocks ... - mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor); + // // + // // Order Blocks ... + // mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor); - // - // Fair Value Gaps ... - mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); - mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); - } + // // + // // Fair Value Gaps ... + // mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); + // mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); + // } // // Decision Cycle ...