diff --git a/Helpers/x-saherelm.x121.helper.mq5 b/Helpers/x-saherelm.x121.helper.mq5 index 83029a50..5800ec25 100644 --- a/Helpers/x-saherelm.x121.helper.mq5 +++ b/Helpers/x-saherelm.x121.helper.mq5 @@ -1537,14 +1537,14 @@ class XCX121Helper : public XCBase // // Helpers ... - // XCX121XPVHelper *xpvHelper; - // XCX121XHKHelper *xhkHelper; - // XCX121XATRHelper *xatrHelper; - // XCX121XSTRHelper *xstrHelper; - // XCX121XCHEHelper *xcheHelper; - // XCX121XDONHelper *xdonHelper; - // XCX121XVWAPHelper *xvwapHelper; - // XCX121XTRENDHelper *xtrendHelper; + XCX121XPVHelper *xpvHelper; + XCX121XHKHelper *xhkHelper; + XCX121XATRHelper *xatrHelper; + XCX121XSTRHelper *xstrHelper; + XCX121XCHEHelper *xcheHelper; + XCX121XDONHelper *xdonHelper; + XCX121XVWAPHelper *xvwapHelper; + XCX121XTRENDHelper *xtrendHelper; // // Constructors ... @@ -1556,25 +1556,25 @@ class XCX121Helper : public XCBase // Deconstructor ... ~XCX121Helper() { - // // - // delete xpvHelper; - // delete xhkHelper; - // delete xatrHelper; - // delete xstrHelper; - // delete xcheHelper; - // delete xdonHelper; - // delete xvwapHelper; - // delete xtrendHelper; + // + delete xpvHelper; + delete xhkHelper; + delete xatrHelper; + delete xstrHelper; + delete xcheHelper; + delete xdonHelper; + delete xvwapHelper; + delete xtrendHelper; - // // - // ZeroMemory(xpvHelper); - // ZeroMemory(xhkHelper); - // ZeroMemory(xatrHelper); - // ZeroMemory(xstrHelper); - // ZeroMemory(xcheHelper); - // ZeroMemory(xdonHelper); - // ZeroMemory(xvwapHelper); - // ZeroMemory(xtrendHelper); + // + ZeroMemory(xpvHelper); + ZeroMemory(xhkHelper); + ZeroMemory(xatrHelper); + ZeroMemory(xstrHelper); + ZeroMemory(xcheHelper); + ZeroMemory(xdonHelper); + ZeroMemory(xvwapHelper); + ZeroMemory(xtrendHelper); } // @@ -1627,142 +1627,142 @@ class XCX121Helper : public XCBase // // Setting Inputs ... - // // - // mInputs = inputs; - // xpvInputs = inputs.xpvInputs; - // xhkInputs = inputs.xhkInputs; - // xatrInputs = inputs.xatrInputs; - // xstrInputs = inputs.xstrInputs; - // xcheInputs = inputs.xcheInputs; - // xdonInputs = inputs.xdonInputs; - // xvwapInputs = inputs.xvwapInputs; - // xtrendInputs = inputs.xtrendInputs; + // + mInputs = inputs; + xpvInputs = inputs.xpvInputs; + xhkInputs = inputs.xhkInputs; + xatrInputs = inputs.xatrInputs; + xstrInputs = inputs.xstrInputs; + xcheInputs = inputs.xcheInputs; + xdonInputs = inputs.xdonInputs; + xvwapInputs = inputs.xvwapInputs; + xtrendInputs = inputs.xtrendInputs; - // // - // // Initial Helpers ... + // + // 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; + } - // // - // // XTREND ... - // xtrendHelper = new XCX121XTRENDHelper(); - // result = xtrendHelper.Init( - // symbol, - // period, - // xtrendInputs // - // ); - // if (!result) - // { - // return result; - // } + // + // XTREND ... + xtrendHelper = new XCX121XTRENDHelper(); + result = xtrendHelper.Init( + symbol, + period, + xtrendInputs // + ); + 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; @@ -1771,195 +1771,195 @@ class XCX121Helper : public XCBase // // Conditions Readers ... - // // - // // XPV ... - // bool GetPVConditions( - // X121XPVConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XPV ... + bool GetPVConditions( + X121XPVConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xpvHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xpvHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XHK ... - // bool GetHKConditions( - // X121XHKConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XHK ... + bool GetHKConditions( + X121XHKConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xhkHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xhkHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XATR ... - // bool GetATRConditions( - // X121XATRConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XATR ... + bool GetATRConditions( + X121XATRConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xatrHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xatrHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XSTR ... - // bool GetSTRConditions( - // X121XSTRConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XSTR ... + bool GetSTRConditions( + X121XSTRConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xstrHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xstrHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XCHE ... - // bool GetCHEConditions( - // X121XCHEConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XCHE ... + bool GetCHEConditions( + X121XCHEConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xcheHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xcheHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XDON ... - // bool GetDONConditions( - // X121XDONConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XDON ... + bool GetDONConditions( + X121XDONConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xdonHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xdonHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XVWAP ... - // bool GetVWAPConditions( - // X121XVWAPConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XVWAP ... + bool GetVWAPConditions( + X121XVWAPConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xvwapHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xvwapHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // // XTREND ... - // bool GetTrendConditions( - // X121XTRENDConditions &conditions, // - // int barIndex = 0, // - // int loopback = 5 // - // ) - // { - // // - // bool result = false; + // + // XTREND ... + bool GetTrendConditions( + X121XTRENDConditions &conditions, // + int barIndex = 0, // + int loopback = 5 // + ) + { + // + bool result = false; - // // - // result = xtrendHelper.GetConditions( - // conditions, - // barIndex, - // loopback // - // ); + // + result = xtrendHelper.GetConditions( + conditions, + barIndex, + loopback // + ); - // // - // return result; - // } + // + return result; + } - // // - // void Free() - // { - // // - // xpvHelper.Free(); - // xhkHelper.Free(); - // xatrHelper.Free(); - // xstrHelper.Free(); - // xcheHelper.Free(); - // xdonHelper.Free(); - // xvwapHelper.Free(); - // xtrendHelper.Free(); - // } + // + void Free() + { + // + xpvHelper.Free(); + xhkHelper.Free(); + xatrHelper.Free(); + xstrHelper.Free(); + xcheHelper.Free(); + xdonHelper.Free(); + xvwapHelper.Free(); + xtrendHelper.Free(); + } // bool GetConditions( @@ -1971,1379 +1971,1379 @@ class XCX121Helper : public XCBase // bool result = true; - // // - // if (loopback < 5) - // { - // loopback = 5; - // } - - // // - // conditions.Clean(); - - // // - // conditions.symbol = mSymbol; - // 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; - // } - - // // - // // XTREND ... - // X121XTRENDConditions xtrendConditions; - // result = GetTrendConditions( - // xtrendConditions, - // 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; - - // // - // // XTREND ... - - // // - // // Buffers ... - - // // - // Copy( - // xtrendConditions.upTrendBuffer, - // conditions.upTrendBuffer // - // ); - - // // - // Copy( - // xtrendConditions.downTrendBuffer, - // conditions.downTrendBuffer // - // ); - - // // - // Copy( - // xtrendConditions.maBuffer, - // conditions.maBuffer // - // ); - - // // - // Copy( - // xtrendConditions.adxBuffer, - // conditions.adxBuffer // - // ); - - // // - // Copy( - // xtrendConditions.adxPBuffer, - // conditions.adxPBuffer // - // ); - - // // - // Copy( - // xtrendConditions.adxMBuffer, - // conditions.adxMBuffer // - // ); - - // // - // Copy( - // xtrendConditions.upTBuffer, - // conditions.upTBuffer // - // ); - - // // - // Copy( - // xtrendConditions.downTBuffer, - // conditions.downTBuffer // - // ); - - // // - // conditions.isTrendBullish = xtrendConditions.isTrendBullish; - // conditions.isTrendBearish = xtrendConditions.isTrendBearish; - // conditions.isTrendSwitchedToBullish = xtrendConditions.isTrendSwitchedToBullish; - // conditions.isTrendSwitchedToBearish = xtrendConditions.isTrendSwitchedToBearish; - - // // - // // 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; - - // // - // xpvConditions.Clean(); - // xhkConditions.Clean(); - // xatrConditions.Clean(); - // xstrConditions.Clean(); - // xcheConditions.Clean(); - // xdonConditions.Clean(); - // xvwapConditions.Clean(); - // xtrendConditions.Clean(); - - // // - // Free(); + // + if (loopback < 5) + { + loopback = 5; + } + + // + conditions.Clean(); + + // + conditions.symbol = mSymbol; + 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; + } + + // + // XTREND ... + X121XTRENDConditions xtrendConditions; + result = GetTrendConditions( + xtrendConditions, + 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; + + // + // XTREND ... + + // + // Buffers ... + + // + Copy( + xtrendConditions.upTrendBuffer, + conditions.upTrendBuffer // + ); + + // + Copy( + xtrendConditions.downTrendBuffer, + conditions.downTrendBuffer // + ); + + // + Copy( + xtrendConditions.maBuffer, + conditions.maBuffer // + ); + + // + Copy( + xtrendConditions.adxBuffer, + conditions.adxBuffer // + ); + + // + Copy( + xtrendConditions.adxPBuffer, + conditions.adxPBuffer // + ); + + // + Copy( + xtrendConditions.adxMBuffer, + conditions.adxMBuffer // + ); + + // + Copy( + xtrendConditions.upTBuffer, + conditions.upTBuffer // + ); + + // + Copy( + xtrendConditions.downTBuffer, + conditions.downTBuffer // + ); + + // + conditions.isTrendBullish = xtrendConditions.isTrendBullish; + conditions.isTrendBearish = xtrendConditions.isTrendBearish; + conditions.isTrendSwitchedToBullish = xtrendConditions.isTrendSwitchedToBullish; + conditions.isTrendSwitchedToBearish = xtrendConditions.isTrendSwitchedToBearish; + + // + // 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; + + // + xpvConditions.Clean(); + xhkConditions.Clean(); + xatrConditions.Clean(); + xstrConditions.Clean(); + xcheConditions.Clean(); + xdonConditions.Clean(); + xvwapConditions.Clean(); + xtrendConditions.Clean(); + + // + Free(); // return result; @@ -3363,15 +3363,15 @@ class XCX121Helper : public XCBase // // Inputs ... - // X121Inputs mInputs; - // X121XPVInputs xpvInputs; - // X121XHKInputs xhkInputs; - // X121XATRInputs xatrInputs; - // X121XDONInputs xdonInputs; - // X121XSTRInputs xstrInputs; - // X121XCHEInputs xcheInputs; - // X121XVWAPInputs xvwapInputs; - // X121XTRENDInputs xtrendInputs; + X121Inputs mInputs; + X121XPVInputs xpvInputs; + X121XHKInputs xhkInputs; + X121XATRInputs xatrInputs; + X121XDONInputs xdonInputs; + X121XSTRInputs xstrInputs; + X121XCHEInputs xcheInputs; + X121XVWAPInputs xvwapInputs; + X121XTRENDInputs xtrendInputs; // int mRSIHandler; diff --git a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.class.mq5 b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.class.mq5 index d5bf90e3..51fde779 100644 --- a/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.class.mq5 +++ b/X121SMCEA/Signals/x-121.smc.xsupdemobs.signal.class.mq5 @@ -2001,47 +2001,6 @@ class XCX121SMCXSupDemOBSSignalDetector : public XCBase // // Trigger Conditions ... - // - // Slopes ... - - // - bool isRsiSlopeBullish = decisionXConditions.isRsiSlopeBullish; - bool isStrSlopeBullish = decisionXConditions.isStrSlopeBullish; - bool isAtrUpperSlopeBullish = decisionXConditions.isAtrUpperSlopeBullish; - bool isAtrLowerSlopeBullish = decisionXConditions.isAtrLowerSlopeBullish; - bool isVwapFastSlopeBullish = decisionXConditions.isVwapFastSlopeBullish; - bool isVwapMidSlopeBullish = decisionXConditions.isVwapMidSlopeBullish; - bool isVwapSlowSlopeBullish = decisionXConditions.isVwapSlowSlopeBullish; - - // - bool isRsiSlopeBearish = decisionXConditions.isRsiSlopeBearish; - bool isStrSlopeBearish = decisionXConditions.isStrSlopeBearish; - bool isAtrUpperSlopeBearish = decisionXConditions.isAtrUpperSlopeBearish; - bool isAtrLowerSlopeBearish = decisionXConditions.isAtrLowerSlopeBearish; - bool isVwapFastSlopeBearish = decisionXConditions.isVwapFastSlopeBearish; - bool isVwapMidSlopeBearish = decisionXConditions.isVwapMidSlopeBearish; - bool isVwapSlowSlopeBearish = decisionXConditions.isVwapSlowSlopeBearish; - - // - bool isSlopesBullish = - isRsiSlopeBullish && - isStrSlopeBullish && - isAtrUpperSlopeBullish && - isAtrLowerSlopeBullish && - isVwapFastSlopeBullish && - isVwapMidSlopeBullish && - isVwapSlowSlopeBullish; - - // - bool isSlopesBearish = - isRsiSlopeBearish && - isStrSlopeBearish && - isAtrUpperSlopeBearish && - isAtrLowerSlopeBearish && - isVwapFastSlopeBearish && - isVwapMidSlopeBearish && - isVwapSlowSlopeBearish; - // double point = conditions.point; bool isPointBreaked = IsBarBreak( @@ -2161,9 +2120,8 @@ class XCX121SMCXSupDemOBSSignalDetector : public XCBase } // - double iAtr = 5 * points; - // decisionXConditions.atrBuffer[1]; - // iAtr *= 2; + double iAtr = decisionXConditions.atrBuffer[1]; + iAtr *= 2; // double slsMin = GetMin(sls); @@ -2178,7 +2136,6 @@ class XCX121SMCXSupDemOBSSignalDetector : public XCBase // // Filling Conditions Props ... conditions.sl = sl; - // conditions.target = target; conditions.triggerTime = cTime; conditions.type = isBullish ? X_POSITION_TYPE_LONG