diff --git a/Helpers/x-saherelm.x121.xca.helper.mq5 b/Helpers/x-saherelm.x121.xca.helper.mq5 index eb796b78..8c7a3603 100644 --- a/Helpers/x-saherelm.x121.xca.helper.mq5 +++ b/Helpers/x-saherelm.x121.xca.helper.mq5 @@ -56,10 +56,13 @@ enum ENUM_X121_XCA_BUFFERS X121_XCA_SWING_HIGH_LINE = 23, X121_XCA_TKI_LINE = 24, X121_XCA_VIDYA_LINE = 26, - X121_XCA_TREND_STATE_LINE = 28, - X121_XCA_KI_STATE_LINE = 29, - X121_XCA_TKI_STATE_LINE = 30, - X121_XCA_VIDYA_STATE_LINE = 31, + X121_XCA_MAH_LINE = 28, + X121_XCA_MAL_LINE = 29, + X121_XCA_MAC_LINE = 30, + X121_XCA_TREND_STATE_LINE = 31, + X121_XCA_KI_STATE_LINE = 32, + X121_XCA_TKI_STATE_LINE = 33, + X121_XCA_VIDYA_STATE_LINE = 34, }; // @@ -119,6 +122,11 @@ struct X121XCAInputs int vidyaEMALength; // EMA Length ENUM_APPLIED_PRICE vidyaAppliedTo; // Applied To + // + // MANALYSER ... + int manalyserLength; // Length + ENUM_MA_METHOD manalyserMethod; // Method + // // Swing Detection ... int swingLength; // Length @@ -138,6 +146,9 @@ struct X121XCAInputs bool showSar; // Show Sar bool showKI; // Show KI bool showTKI; // Show TKI + bool showMAH; // Show MAH + bool showMAL; // Show MAL + bool showMAC; // Show MAC bool showVidya; // Show Vidya bool showTrend; // Show Trend bool showSwings; // Show Swings @@ -223,6 +234,11 @@ struct X121XCAInputs vidyaEMALength = 0; vidyaAppliedTo = PRICE_CLOSE; + // + // MANALYSER ... + manalyserLength = 0; // Length + manalyserMethod = MODE_SMA; // Method + // // Swing Detection ... swingLength = 0; // Length @@ -239,22 +255,25 @@ struct X121XCAInputs startCalculationForLastBars = 0; // Calculate Last n Bars // - showSar = true; // Show Sar - showKI = true; // Show KI - showTKI = true; // Show TKI - showVidya = true; // Show Vidya - showTrend = true; // Show Trend - showSwings = true; // Show Swings - showFiboLevel1 = true; // Show Fibo Level 1 - showFiboLevel2 = true; // Show Fibo Level 2 - showFiboLevel3 = true; // Show Fibo Level 3 - showPeaksAndVales = true; // Show Peaks And Vales - showPeakAndValeGolden = true; // Show Peak and Vale Golden - showSupportAndResistance = true; // Show Support and Resistance - showShortCycle = true; // Show Short Cycle - showMediumCycle = true; // Show Medium Cycle - showLongCycle = true; // Show Long Cycle - showHindCycle = true; // Show Hind Cycle + showSar = false; // Show Sar + showKI = false; // Show KI + showTKI = false; // Show TKI + showMAH = false; // Show MAH + showMAL = false; // Show MAL + showMAC = false; // Show MAC + showVidya = false; // Show Vidya + showTrend = false; // Show Trend + showSwings = false; // Show Swings + showFiboLevel1 = false; // Show Fibo Level 1 + showFiboLevel2 = false; // Show Fibo Level 2 + showFiboLevel3 = false; // Show Fibo Level 3 + showPeaksAndVales = false; // Show Peaks And Vales + showPeakAndValeGolden = false; // Show Peak and Vale Golden + showSupportAndResistance = false; // Show Support and Resistance + showShortCycle = false; // Show Short Cycle + showMediumCycle = false; // Show Medium Cycle + showLongCycle = false; // Show Long Cycle + showHindCycle = false; // Show Hind Cycle // sarArrowCode = 0; // Parabolic Sar Arrow Code @@ -320,6 +339,11 @@ struct X121XCAInputs vidyaEMALength = 14; vidyaAppliedTo = PRICE_CLOSE; + // + // MANALYSER ... + manalyserLength = 14; // Length + manalyserMethod = MODE_SMA; // Method + // // Swing Detection ... swingLength = 5; // Length @@ -334,6 +358,9 @@ struct X121XCAInputs showSar = true; // Show Sar showKI = true; // Show KI showTKI = true; // Show TKI + showMAH = true; // Show MAH + showMAL = true; // Show MAL + showMAC = true; // Show MAC showVidya = true; // Show Vidya showTrend = true; // Show Trend showSwings = true; // Show Swings @@ -374,6 +401,7 @@ struct X121XCAInputs sarMax > sarStep && vidyaCMOLength > 0 && vidyaEMALength > 0 && + manalyserLength > 0 && // // XCA ... (IsValid(scMethod, scPeriod) && @@ -398,6 +426,7 @@ struct X121XCAInputs result = MathMax(kiLength, swingLength); result = MathMax(result, vidyaCMOLength); result = MathMax(result, vidyaEMALength); + result = MathMax(result, manalyserLength); // return result; @@ -427,6 +456,9 @@ struct X121XCAConditions double hHHBuffer[]; double hLLBuffer[]; double sarBuffer[]; + double mahBuffer[]; + double malBuffer[]; + double macBuffer[]; double peakBuffer[]; double valeBuffer[]; double vidyaBuffer[]; @@ -520,6 +552,66 @@ struct X121XCAConditions bool isSarFinishedFromBullish; bool isSarFinishedFromBearish; + // + // MANALYSER ... + + // + // MAH ... + + // + bool isOverMah; + bool isUnderMah; + bool isCrossedOverMah; + bool isCrossedUnderMah; + + // + bool isCloseOverMah; + bool isCloseUnderMah; + bool isCloseCrossedOverMah; + bool isCloseCrossedUnderMah; + + // + bool isMahBullishRejected; + bool isMahBearishRejected; + + // + // MAL ... + + // + bool isOverMal; + bool isUnderMal; + bool isCrossedOverMal; + bool isCrossedUnderMal; + + // + bool isCloseOverMal; + bool isCloseUnderMal; + bool isCloseCrossedOverMal; + bool isCloseCrossedUnderMal; + + // + bool isMalBullishRejected; + bool isMalBearishRejected; + + // + // MAC ... + + // + bool isOverMac; + bool isUnderMac; + bool isCrossedOverMac; + bool isCrossedUnderMac; + + // + bool isCloseOverMac; + bool isCloseUnderMac; + bool isCloseCrossedOverMac; + bool isCloseCrossedUnderMac; + + // + bool isMacBullishRejected; + bool isMacBearishRejected; + // // PEAK ... @@ -666,6 +758,9 @@ struct X121XCAConditions Clean(hHHBuffer); Clean(hLLBuffer); Clean(sarBuffer); + Clean(mahBuffer); + Clean(malBuffer); + Clean(macBuffer); Clean(peakBuffer); Clean(valeBuffer); Clean(vidyaBuffer); @@ -696,6 +791,9 @@ struct X121XCAConditions ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(sarBuffer, true); + ArraySetAsSeries(mahBuffer, true); + ArraySetAsSeries(malBuffer, true); + ArraySetAsSeries(macBuffer, true); ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(vidyaBuffer, true); @@ -788,6 +886,66 @@ struct X121XCAConditions // isSarFinishedFromBullish = false; isSarFinishedFromBearish = false; + + // + // MANALYSER ... + + // + // MAH ... + + // + isOverMah = false; + isUnderMah = false; + isCrossedOverMah = false; + isCrossedUnderMah = false; + + // + isCloseOverMah = false; + isCloseUnderMah = false; + isCloseCrossedOverMah = false; + isCloseCrossedUnderMah = false; + + // + isMahBullishRejected = false; + isMahBearishRejected = false; + + // + // MAL ... + + // + isOverMal = false; + isUnderMal = false; + isCrossedOverMal = false; + isCrossedUnderMal = false; + + // + isCloseOverMal = false; + isCloseUnderMal = false; + isCloseCrossedOverMal = false; + isCloseCrossedUnderMal = false; + + // + isMalBullishRejected = false; + isMalBearishRejected = false; + + // + // MAC ... + + // + isOverMac = false; + isUnderMac = false; + isCrossedOverMac = false; + isCrossedUnderMac = false; + + // + isCloseOverMac = false; + isCloseUnderMac = false; + isCloseCrossedOverMac = false; + isCloseCrossedUnderMac = false; + + // + isMacBullishRejected = false; + isMacBearishRejected = false; // // PEAK ... @@ -1039,6 +1197,152 @@ struct X121XCAConditions bearishScore += minScore; } + // + // MANALYSER ... + + // + // MAH ... + + // + if (isUnderMah) + { + bullishScore += minScore; + } + if (isCloseUnderMah) + { + bullishScore += minScore; + } + if (isCrossedUnderMah) + { + bullishScore += minScore; + } + if (isMahBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedUnderMah) + { + bullishScore += minScore; + } + + // + if (isOverMah) + { + bearishScore += minScore; + } + if (isCloseOverMah) + { + bearishScore += minScore; + } + if (isCrossedOverMah) + { + bearishScore += minScore; + } + if (isMahBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedOverMah) + { + bearishScore += minScore; + } + + // + + // + // MAL ... + + // + if (isOverMal) + { + bullishScore += minScore; + } + if (isCloseOverMal) + { + bullishScore += minScore; + } + if (isCrossedOverMal) + { + bullishScore += minScore; + } + if (isMalBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedOverMal) + { + bullishScore += minScore; + } + + // + if (isUnderMal) + { + bearishScore += minScore; + } + if (isCloseUnderMal) + { + bearishScore += minScore; + } + if (isCrossedUnderMal) + { + bearishScore += minScore; + } + if (isMalBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedUnderMal) + { + bearishScore += minScore; + } + + // + // MAC ... + + // + if (isOverMac) + { + bullishScore += minScore; + } + if (isCloseOverMac) + { + bullishScore += minScore; + } + if (isCrossedOverMac) + { + bullishScore += minScore; + } + if (isMacBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedOverMac) + { + bullishScore += minScore; + } + + // + if (isUnderMac) + { + bearishScore += minScore; + } + if (isCloseUnderMac) + { + bearishScore += minScore; + } + if (isCrossedUnderMac) + { + bearishScore += minScore; + } + if (isMacBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedUnderMac) + { + bearishScore += minScore; + } + // // TREND ... @@ -1304,6 +1608,36 @@ struct X121XCAConditions ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isSarFinishedFromBearish", isSarFinishedFromBearish, ignoreFalseConditions, separator) + + ToString("isOverMah", isOverMah, ignoreFalseConditions, separator) + + ToString("isUnderMah", isUnderMah, ignoreFalseConditions, separator) + + ToString("isCrossedOverMah", isCrossedOverMah, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMah", isCrossedUnderMah, ignoreFalseConditions, separator) + + ToString("isCloseOverMah", isCloseOverMah, ignoreFalseConditions, separator) + + ToString("isCloseUnderMah", isCloseUnderMah, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMah", isCloseCrossedOverMah, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMah", isCloseCrossedUnderMah, ignoreFalseConditions, separator) + + ToString("isMahBullishRejected", isMahBullishRejected, ignoreFalseConditions, separator) + + ToString("isMahBearishRejected", isMahBearishRejected, ignoreFalseConditions, separator) + + ToString("isOverMal", isOverMal, ignoreFalseConditions, separator) + + ToString("isUnderMal", isUnderMal, ignoreFalseConditions, separator) + + ToString("isCrossedOverMal", isCrossedOverMal, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMal", isCrossedUnderMal, ignoreFalseConditions, separator) + + ToString("isCloseOverMal", isCloseOverMal, ignoreFalseConditions, separator) + + ToString("isCloseUnderMal", isCloseUnderMal, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMal", isCloseCrossedOverMal, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMal", isCloseCrossedUnderMal, ignoreFalseConditions, separator) + + ToString("isMalBullishRejected", isMalBullishRejected, ignoreFalseConditions, separator) + + ToString("isMalBearishRejected", isMalBearishRejected, ignoreFalseConditions, separator) + + ToString("isOverMac", isOverMac, ignoreFalseConditions, separator) + + ToString("isUnderMac", isUnderMac, ignoreFalseConditions, separator) + + ToString("isCrossedOverMac", isCrossedOverMac, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMac", isCrossedUnderMac, ignoreFalseConditions, separator) + + ToString("isCloseOverMac", isCloseOverMac, ignoreFalseConditions, separator) + + ToString("isCloseUnderMac", isCloseUnderMac, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMac", isCloseCrossedOverMac, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMac", isCloseCrossedUnderMac, ignoreFalseConditions, separator) + + ToString("isMacBullishRejected", isMacBullishRejected, ignoreFalseConditions, separator) + + ToString("isMacBearishRejected", isMacBearishRejected, ignoreFalseConditions, separator) + ToString("isPeakSameLast", isPeakSameLast, ignoreFalseConditions, separator) + ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) + ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) + @@ -1426,6 +1760,9 @@ class XCX121XCAHelper : public XCBaseHelper Clean(hHHBuffer); Clean(hLLBuffer); Clean(sarBuffer); + Clean(mahBuffer); + Clean(malBuffer); + Clean(macBuffer); Clean(peakBuffer); Clean(valeBuffer); Clean(vidyaBuffer); @@ -1479,6 +1816,9 @@ class XCX121XCAHelper : public XCBaseHelper ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(sarBuffer, true); + ArraySetAsSeries(mahBuffer, true); + ArraySetAsSeries(malBuffer, true); + ArraySetAsSeries(macBuffer, true); ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(vidyaBuffer, true); @@ -1534,6 +1874,9 @@ class XCX121XCAHelper : public XCBaseHelper mInputs.vidyaCMOLength, mInputs.vidyaEMALength, mInputs.vidyaAppliedTo, + "", // MANALYSER ... + mInputs.manalyserLength, + mInputs.manalyserMethod, "", // Swing Detection ... mInputs.swingLength, "", // Support and Resistance ... @@ -1544,6 +1887,9 @@ class XCX121XCAHelper : public XCBaseHelper mInputs.showSar, mInputs.showKI, mInputs.showTKI, + mInputs.showMAH, + mInputs.showMAL, + mInputs.showMAC, mInputs.showVidya, mInputs.showTrend, mInputs.showSwings, @@ -2393,6 +2739,165 @@ class XCX121XCAHelper : public XCBaseHelper ); } + // + // MANALYSER ... + + // + // MAH ... + + // + double GetMah( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(barIndex); + + // + int count = ArraySize(mahBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return mahBuffer[barIndex]; + } + + // + int CopyMah( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(start); + + // + // Copy Items ... + return Copy( + 0, + count, + mahBuffer, + buffer, + forceClean + // + ); + } + + // + // MAL ,,, + + // + double GetMal( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(barIndex); + + // + int count = ArraySize(malBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return malBuffer[barIndex]; + } + + // + int CopyMlh( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(start); + + // + // Copy Items ... + return Copy( + 0, + count, + malBuffer, + buffer, + forceClean + // + ); + } + + // + // MAC ... + + // + double GetMac( + int barIndex // Bar Index + ) + { + // + if (barIndex < 0) + { + barIndex = 0; + } + + // + Calculate(barIndex); + + // + int count = ArraySize(macBuffer); + if (barIndex >= count) + { + barIndex = count - 1; + } + + // + return macBuffer[barIndex]; + } + + // + int CopyMac( + int start, // Start + int count, // Number of Items for read + double &buffer[], // Dest Buffer + bool forceClean = true // Force To Clean buffer + ) + { + // + // Update Calculations ... + Calculate(start); + + // + // Copy Items ... + return Copy( + 0, + count, + macBuffer, + buffer, + forceClean + // + ); + } + // // PEAK ... @@ -3249,6 +3754,27 @@ class XCX121XCAHelper : public XCBaseHelper conditions.sarBuffer // ); + // + CopyMah( + zIndex, + loopback, + conditions.mahBuffer // + ); + + // + CopyMal( + zIndex, + loopback, + conditions.malBuffer // + ); + + // + CopyMac( + zIndex, + loopback, + conditions.macBuffer // + ); + // CopyPeak( zIndex, @@ -3522,6 +4048,141 @@ class XCX121XCAHelper : public XCBaseHelper bool isSarFinishedFromBearish = !isSarBearish && isSarBearishPrev; + // + // MANALYSER ... + + // + // MAH ... + + // + bool isOverMah = cBar.low > conditions.mahBuffer[cIDX]; + bool isOverMahPrev = pBar.low > conditions.mahBuffer[pIDX]; + + // + bool isUnderMah = cBar.high < conditions.mahBuffer[cIDX]; + bool isUnderMahPrev = pBar.high < conditions.mahBuffer[pIDX]; + + // + bool isCrossedOverMah = isOverMah && + !isOverMahPrev; + bool isCrossedUnderMah = isUnderMah && + !isUnderMahPrev; + + // + bool isCloseOverMah = cBar.close > conditions.mahBuffer[cIDX]; + bool isCloseOverMahPrev = pBar.close > conditions.mahBuffer[pIDX]; + + bool isCloseUnderMah = cBar.close < conditions.mahBuffer[cIDX]; + bool isCloseUnderMahPrev = pBar.close < conditions.mahBuffer[pIDX]; + + // + bool isCloseCrossedOverMah = isCloseOverMah && + !isCloseOverMahPrev; + bool isCloseCrossedUnderMah = isCloseUnderMah && + !isCloseUnderMahPrev; + + // + bool isMahBullishRejected = cBar.IsRejected( + conditions.mahBuffer[cIDX], + X_DIRECTION_BULLISH, + false, + false // + ); + bool isMahBearishRejected = cBar.IsRejected( + conditions.mahBuffer[cIDX], + X_DIRECTION_BEARISH, + false, + false // + ); + + // + // MAL ... + + // + bool isOverMal = cBar.low > conditions.malBuffer[cIDX]; + bool isOverMalPrev = pBar.low > conditions.malBuffer[pIDX]; + + // + bool isUnderMal = cBar.high < conditions.malBuffer[cIDX]; + bool isUnderMalPrev = pBar.high < conditions.malBuffer[pIDX]; + + // + bool isCrossedOverMal = isOverMal && + !isOverMalPrev; + bool isCrossedUnderMal = isUnderMal && + !isUnderMalPrev; + + // + bool isCloseOverMal = cBar.close > conditions.malBuffer[cIDX]; + bool isCloseOverMalPrev = pBar.close > conditions.malBuffer[pIDX]; + + bool isCloseUnderMal = cBar.close < conditions.malBuffer[cIDX]; + bool isCloseUnderMalPrev = pBar.close < conditions.malBuffer[pIDX]; + + // + bool isCloseCrossedOverMal = isCloseOverMal && + !isCloseOverMalPrev; + bool isCloseCrossedUnderMal = isCloseUnderMal && + !isCloseUnderMalPrev; + + // + bool isMalBullishRejected = cBar.IsRejected( + conditions.malBuffer[cIDX], + X_DIRECTION_BULLISH, + false, + false // + ); + bool isMalBearishRejected = cBar.IsRejected( + conditions.malBuffer[cIDX], + X_DIRECTION_BEARISH, + false, + false // + ); + + // + // MAC ... + + // + bool isOverMac = cBar.low > conditions.macBuffer[cIDX]; + bool isOverMacPrev = pBar.low > conditions.macBuffer[pIDX]; + + // + bool isUnderMac = cBar.high < conditions.macBuffer[cIDX]; + bool isUnderMacPrev = pBar.high < conditions.macBuffer[pIDX]; + + // + bool isCrossedOverMac = isOverMac && + !isOverMacPrev; + bool isCrossedUnderMac = isUnderMac && + !isUnderMacPrev; + + // + bool isCloseOverMac = cBar.close > conditions.macBuffer[cIDX]; + bool isCloseOverMacPrev = pBar.close > conditions.macBuffer[pIDX]; + + bool isCloseUnderMac = cBar.close < conditions.macBuffer[cIDX]; + bool isCloseUnderMacPrev = pBar.close < conditions.macBuffer[pIDX]; + + // + bool isCloseCrossedOverMac = isCloseOverMac && + !isCloseOverMacPrev; + bool isCloseCrossedUnderMac = isCloseUnderMac && + !isCloseUnderMacPrev; + + // + bool isMacBullishRejected = cBar.IsRejected( + conditions.macBuffer[cIDX], + X_DIRECTION_BULLISH, + false, + false // + ); + bool isMacBearishRejected = cBar.IsRejected( + conditions.macBuffer[cIDX], + X_DIRECTION_BEARISH, + false, + false // + ); + // // PEAK ... @@ -3747,6 +4408,12 @@ class XCX121XCAHelper : public XCBaseHelper // Attached ... // + conditions.isOverMah = isOverMah; + conditions.isOverMal = isOverMal; + conditions.isOverMac = isOverMac; + conditions.isUnderMah = isUnderMah; + conditions.isUnderMal = isUnderMal; + conditions.isUnderMac = isUnderMac; conditions.isKIBullish = isKIBullish; conditions.isKIBearish = isKIBearish; conditions.isKIRejectUp = isKIRejectUp; @@ -3757,6 +4424,9 @@ class XCX121XCAHelper : public XCBaseHelper conditions.isTKIRejectUp = isTKIRejectUp; conditions.isPeakIsPivot = isPeakIsPivot; conditions.isValeIsPivot = isValeIsPivot; + conditions.isCloseOverMah = isCloseOverMah; + conditions.isCloseOverMal = isCloseOverMal; + conditions.isCloseOverMac = isCloseOverMac; conditions.isVidyaBullish = isVidyaBullish; conditions.isVidyaBearish = isVidyaBearish; conditions.isKIRejectDown = isKIRejectDown; @@ -3766,10 +4436,19 @@ class XCX121XCAHelper : public XCBaseHelper conditions.isValeOverLast = isValeOverLast; conditions.isTrendBullish = isTrendBullish; conditions.isTrendBearish = isTrendBearish; + conditions.isCloseUnderMah = isCloseUnderMah; + conditions.isCloseUnderMal = isCloseUnderMal; + conditions.isCloseUnderMac = isCloseUnderMac; conditions.isTKIRejectDown = isTKIRejectDown; conditions.isPeakUnderLast = isPeakUnderLast; conditions.isValeUnderLast = isValeUnderLast; conditions.isTrendRejectUp = isTrendRejectUp; + conditions.isCrossedOverMah = isCrossedOverMah; + conditions.isCrossedOverMal = isCrossedOverMal; + conditions.isCrossedOverMac = isCrossedOverMac; + conditions.isCrossedUnderMah = isCrossedUnderMah; + conditions.isCrossedUnderMal = isCrossedUnderMal; + conditions.isCrossedUnderMac = isCrossedUnderMac; conditions.isTrendRejectDown = isTrendRejectDown; conditions.isSupportSameLast = isSupportSameLast; conditions.isSupportOverLast = isSupportOverLast; @@ -3780,11 +4459,20 @@ class XCX121XCAHelper : public XCBaseHelper conditions.isSwingHighSameLast = isSwingHighSameLast; conditions.isSwingHighOverLast = isSwingHighOverLast; conditions.isSupportSameAsVale = isSupportSameAsVale; + conditions.isMahBullishRejected = isMahBullishRejected; + conditions.isMahBearishRejected = isMahBearishRejected; + conditions.isMalBullishRejected = isMalBullishRejected; + conditions.isMalBearishRejected = isMalBearishRejected; + conditions.isMacBullishRejected = isMacBullishRejected; + conditions.isMacBearishRejected = isMacBearishRejected; conditions.isLastSupportBreaked = isLastSupportBreaked; conditions.isResistanceSameLast = isResistanceSameLast; conditions.isResistanceOverLast = isResistanceOverLast; conditions.isSwingHighUnderLast = isSwingHighUnderLast; conditions.isSwingLowSameAsVale = isSwingLowSameAsVale; + conditions.isCloseCrossedOverMah = isCloseCrossedOverMah; + conditions.isCloseCrossedOverMal = isCloseCrossedOverMal; + conditions.isCloseCrossedOverMac = isCloseCrossedOverMac; conditions.isLastSupportRejected = isLastSupportRejected; conditions.isResistanceUnderLast = isResistanceUnderLast; conditions.isKISwitchedToBullish = isKISwitchedToBullish; @@ -3793,6 +4481,9 @@ class XCX121XCAHelper : public XCBaseHelper conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak; conditions.isPeakSwitchedToPivot = isPeakSwitchedToPivot; conditions.isValeSwitchedToPivot = isValeSwitchedToPivot; + conditions.isCloseCrossedUnderMah = isCloseCrossedUnderMah; + conditions.isCloseCrossedUnderMal = isCloseCrossedUnderMal; + conditions.isCloseCrossedUnderMac = isCloseCrossedUnderMac; conditions.isTKISwitchedToBullish = isTKISwitchedToBullish; conditions.isTKISwitchedToBearish = isTKISwitchedToBearish; conditions.isLastSwingLowRejected = isLastSwingLowRejected; @@ -3857,6 +4548,9 @@ class XCX121XCAHelper : public XCBaseHelper double hHHBuffer[]; double hLLBuffer[]; double sarBuffer[]; + double mahBuffer[]; + double malBuffer[]; + double macBuffer[]; double peakBuffer[]; double valeBuffer[]; double vidyaBuffer[]; @@ -3996,6 +4690,33 @@ class XCX121XCAHelper : public XCBaseHelper sarBuffer // ); + // + CopyBuffer( + mHandler, + X121_XCA_MAH_LINE, + barIndex, + maxRequiredBars, + mahBuffer // + ); + + // + CopyBuffer( + mHandler, + X121_XCA_MAL_LINE, + barIndex, + maxRequiredBars, + malBuffer // + ); + + // + CopyBuffer( + mHandler, + X121_XCA_MAC_LINE, + barIndex, + maxRequiredBars, + macBuffer // + ); + // CopyBuffer( mHandler, @@ -4218,6 +4939,24 @@ class XCX121XCAHelper : public XCBaseHelper maxAllowed // ); + // + CleanupArray( + mahBuffer, + maxAllowed // + ); + + // + CleanupArray( + malBuffer, + maxAllowed // + ); + + // + CleanupArray( + macBuffer, + maxAllowed // + ); + // CleanupArray( peakBuffer, diff --git a/Indicators/x-saherelm.x121.x3ma.mq5 b/Indicators/x-saherelm.x121.x3ma.mq5 index 92966d55..e5355715 100644 --- a/Indicators/x-saherelm.x121.x3ma.mq5 +++ b/Indicators/x-saherelm.x121.x3ma.mq5 @@ -36,21 +36,21 @@ // Fast ... input group "Fast"; input int fastLength = 6; // Length -input ENUM_MA_METHOD fastMethod = MODE_SMA; // Mwethod +input ENUM_MA_METHOD fastMethod = MODE_SMA; // Method input ENUM_APPLIED_PRICE fastAppliedTo = PRICE_CLOSE; // Applied To // // Medium ... input group "Medium"; input int mediumLength = 21; // Length -input ENUM_MA_METHOD mediumMethod = MODE_SMA; // Mwethod +input ENUM_MA_METHOD mediumMethod = MODE_SMA; // Method input ENUM_APPLIED_PRICE mediumAppliedTo = PRICE_CLOSE; // Applied To // // Slow ... input group "Slow"; input int slowLength = 34; // Length -input ENUM_MA_METHOD slowMethod = MODE_SMA; // Mwethod +input ENUM_MA_METHOD slowMethod = MODE_SMA; // Method input ENUM_APPLIED_PRICE slowAppliedTo = PRICE_CLOSE; // Applied To // diff --git a/Indicators/x-saherelm.x121.xca.mq5 b/Indicators/x-saherelm.x121.xca.mq5 index 3bafb894..edac4e86 100644 --- a/Indicators/x-saherelm.x121.xca.mq5 +++ b/Indicators/x-saherelm.x121.xca.mq5 @@ -84,6 +84,12 @@ input int vidyaCMOLength = 20; // CMO (Candle Momentum) input int vidyaEMALength = 14; // EMA Length input ENUM_APPLIED_PRICE vidyaAppliedTo = PRICE_CLOSE; // Applied To +// +// Manalyser ... +input group "Manalyser"; +input int manalyserLength = 14; // Length +input ENUM_MA_METHOD manalyserMethod = MODE_SMA; // Method + // input group "Swing Detection"; input int swingLength = 5; // Length @@ -104,6 +110,9 @@ input int startCalculationForLastBars = 1000; // Calculate Last n Bars input bool showSar = true; // Show Sar input bool showKI = true; // Show KI input bool showTKI = true; // Show KI Trend +input bool showMAH = true; // Show MAH +input bool showMAL = true; // Show MAL +input bool showMAC = true; // Show MAC input bool showVidya = true; // Show Vidya input bool showTrend = true; // Show Trend input bool showSwings = true; // Show Swings @@ -146,8 +155,8 @@ input int swingHighArrowCode = 226; // Swing High Arrow Code #property indicator_chart_window // -#property indicator_buffers 34 -#property indicator_plots 24 +#property indicator_buffers 37 +#property indicator_plots 27 // // Plot Buffers ... @@ -493,10 +502,55 @@ double vidyaColorBuffer[]; #property indicator_style24 STYLE_SOLID #property indicator_width24 1 +// +// MAH ... + +// +#define mahBufferIndex 28 +#define mahBufferPlotIndex 24 +double mahBuffer[]; + +// +#property indicator_label25 "MAH" +#property indicator_type25 DRAW_LINE +#property indicator_color25 clrMagenta +#property indicator_style25 STYLE_SOLID +#property indicator_width25 1 + +// +// MAL ... + +// +#define malBufferIndex 29 +#define malBufferPlotIndex 25 +double malBuffer[]; + +// +#property indicator_label26 "MAL" +#property indicator_type26 DRAW_LINE +#property indicator_color26 clrAqua +#property indicator_style26 STYLE_SOLID +#property indicator_width26 1 + +// +// MAC ... + +// +#define macBufferIndex 30 +#define macBufferPlotIndex 26 +double macBuffer[]; + +// +#property indicator_label27 "MAC" +#property indicator_type27 DRAW_LINE +#property indicator_color27 clrYellow +#property indicator_style27 STYLE_SOLID +#property indicator_width27 1 + // // Data Buffers ... -#define mLastBufferIndex 27 +#define mLastBufferIndex 30 // #define trendStateBufferIndex mLastBufferIndex + 1 @@ -545,6 +599,12 @@ int tkiHandler = INVALID_HANDLE; int vidyaHandler = INVALID_HANDLE; int trendHandler = INVALID_HANDLE; +// +// Manalyser Handlers ... +int mahHandler = INVALID_HANDLE; +int malHandler = INVALID_HANDLE; +int macHandler = INVALID_HANDLE; + // // XMarketCycle sc; int mSCLength = 0; @@ -653,6 +713,57 @@ int OnInit() return INIT_FAILED; } + // + // MANALYSE ... + + // + // MAH ... + mahHandler = iMA( + _Symbol, + _Period, + manalyserLength, + 0, + manalyserMethod, + PRICE_HIGH // + ); + isInited = mahHandler != INVALID_HANDLE; + if (!isInited) + { + return INIT_FAILED; + } + + // + // MAL ... + malHandler = iMA( + _Symbol, + _Period, + manalyserLength, + 0, + manalyserMethod, + PRICE_LOW // + ); + isInited = malHandler != INVALID_HANDLE; + if (!isInited) + { + return INIT_FAILED; + } + + // + // MAC ... + macHandler = iMA( + _Symbol, + _Period, + manalyserLength, + 0, + manalyserMethod, + PRICE_CLOSE // + ); + isInited = macHandler != INVALID_HANDLE; + if (!isInited) + { + return INIT_FAILED; + } + // // because in some cases we may have more than one input for // calculation and we must prevent any calculation @@ -758,6 +869,21 @@ int OnCalculate( // TREND ... int trendCalculatedBars = BarsCalculated(trendHandler); + // + // MANALYSER ... + + // + // MAH ... + int mahCalculatedBars = BarsCalculated(mahHandler); + + // + // MAL ... + int malCalculatedBars = BarsCalculated(malHandler); + + // + // MAC ... + int macCalculatedBars = BarsCalculated(macHandler); + // bool isPassedRequiredCalculatedBars = // @@ -771,7 +897,15 @@ int OnCalculate( vidyaCalculatedBars >= maxLength && // // TREND ... - trendCalculatedBars >= maxLength + trendCalculatedBars >= maxLength && + // + // MANALYSER ... + // MAH ... + mahCalculatedBars >= maxLength && + // MAL ... + malCalculatedBars >= maxLength && + // MAC ... + macCalculatedBars >= maxLength // ; if (!isPassedRequiredCalculatedBars) @@ -803,6 +937,21 @@ int OnCalculate( // TREND ... int copiedTrends = CopyBuffer(trendHandler, MAIN_LINE, 0, limit + 1, trendBuffer); + // + // MANALYSER ... + + // + // MAH ... + int copiedMahs = CopyBuffer(mahHandler, 0, 0, limit, mahBuffer); + + // + // MAL ... + int copiedMals = CopyBuffer(malHandler, 0, 0, limit, malBuffer); + + // + // MAC ... + int copiedMacs = CopyBuffer(macHandler, 0, 0, limit, macBuffer); + // // Validate Copied Items ... bool isPassedRequiredCopiedItems = @@ -817,7 +966,15 @@ int OnCalculate( copiedVidyas >= limit && // // TREND ... - copiedTrends >= limit + copiedTrends >= limit && + // + // MANALYSER ... + // MAH ... + copiedMahs >= limit && + // MAL ... + copiedMals >= limit && + // MAC ... + copiedMacs >= limit // ; if (!isPassedRequiredCopiedItems) @@ -871,6 +1028,7 @@ bool ValidateInputs() sarMax > sarStep && vidyaEMALength > 0 && vidyaCMOLength > 0 && + manalyserLength > 0 && // // XCA ... (IsValid(scMethod, scPeriod) && @@ -898,6 +1056,7 @@ int ExtractMaxLengthOfInputs() result = MathMax(kiLength, swingLength); result = MathMax(result, vidyaCMOLength); result = MathMax(result, vidyaEMALength); + result = MathMax(result, manalyserLength); // return result; @@ -1340,6 +1499,60 @@ void DefineBuffers() PlotIndexSetDouble(swingHighBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); PlotIndexSetInteger(swingHighBufferPlotIndex, PLOT_ARROW, swingHighArrowCode); + // + // MANALYSER ... + + // + // MAH ... + + // + ENUM_DRAW_TYPE mahDrawType = showMAH ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(mahBuffer, true); + SetIndexBuffer(mahBufferIndex, mahBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(mahBufferPlotIndex, PLOT_SHOW_DATA, showMAH); + PlotIndexSetInteger(mahBufferPlotIndex, PLOT_DRAW_TYPE, mahDrawType); + + // + PlotIndexSetDouble(mahBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + + // + // MAL ... + + // + ENUM_DRAW_TYPE malDrawType = showMAL ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(malBuffer, true); + SetIndexBuffer(malBufferIndex, malBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(malBufferPlotIndex, PLOT_SHOW_DATA, showMAL); + PlotIndexSetInteger(malBufferPlotIndex, PLOT_DRAW_TYPE, malDrawType); + + // + PlotIndexSetDouble(malBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + + // + // MAC ... + + // + ENUM_DRAW_TYPE macDrawType = showMAC ? DRAW_LINE : DRAW_NONE; + + // + ArraySetAsSeries(macBuffer, true); + SetIndexBuffer(macBufferIndex, macBuffer, INDICATOR_DATA); + + // + PlotIndexSetInteger(macBufferPlotIndex, PLOT_SHOW_DATA, showMAC); + PlotIndexSetInteger(macBufferPlotIndex, PLOT_DRAW_TYPE, mahDrawType); + + // + PlotIndexSetDouble(macBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); + // // Data Buffers ... diff --git a/XCAEA/Helpers/xcaea.helper.mq5 b/XCAEA/Helpers/xcaea.helper.mq5 index 496fa5b2..2d106b0b 100644 --- a/XCAEA/Helpers/xcaea.helper.mq5 +++ b/XCAEA/Helpers/xcaea.helper.mq5 @@ -261,6 +261,9 @@ struct XCAEAConditions double hHHBuffer[]; double hLLBuffer[]; double sarBuffer[]; + double mahBuffer[]; + double malBuffer[]; + double macBuffer[]; double peakBuffer[]; double valeBuffer[]; double vidyaBuffer[]; @@ -270,13 +273,13 @@ struct XCAEAConditions double tkiStateBuffer[]; double swingLowBuffer[]; double swingHighBuffer[]; + double vidyaStateBuffer[]; double resistanceBuffer[]; double peakGoldenBuffer[]; double valeGoldenBuffer[]; double fiboLevel1Buffer[]; double fiboLevel2Buffer[]; double fiboLevel3Buffer[]; - double vidyaStateBuffer[]; double trendStateBuffer[]; // @@ -354,6 +357,66 @@ struct XCAEAConditions bool isSarFinishedFromBullish; bool isSarFinishedFromBearish; + // + // MANALYSER ... + + // + // MAH ... + + // + bool isOverMah; + bool isUnderMah; + bool isCrossedOverMah; + bool isCrossedUnderMah; + + // + bool isCloseOverMah; + bool isCloseUnderMah; + bool isCloseCrossedOverMah; + bool isCloseCrossedUnderMah; + + // + bool isMahBullishRejected; + bool isMahBearishRejected; + + // + // MAL ... + + // + bool isOverMal; + bool isUnderMal; + bool isCrossedOverMal; + bool isCrossedUnderMal; + + // + bool isCloseOverMal; + bool isCloseUnderMal; + bool isCloseCrossedOverMal; + bool isCloseCrossedUnderMal; + + // + bool isMalBullishRejected; + bool isMalBearishRejected; + + // + // MAC ... + + // + bool isOverMac; + bool isUnderMac; + bool isCrossedOverMac; + bool isCrossedUnderMac; + + // + bool isCloseOverMac; + bool isCloseUnderMac; + bool isCloseCrossedOverMac; + bool isCloseCrossedUnderMac; + + // + bool isMacBullishRejected; + bool isMacBearishRejected; + // // PEAK ... @@ -722,8 +785,6 @@ struct XCAEAConditions // // Specified Conditions ... - // - // // Constructor ... XCAEAConditions() @@ -844,6 +905,9 @@ struct XCAEAConditions Clean(hHHBuffer); Clean(hLLBuffer); Clean(sarBuffer); + Clean(mahBuffer); + Clean(malBuffer); + Clean(macBuffer); Clean(peakBuffer); Clean(valeBuffer); Clean(vidyaBuffer); @@ -874,6 +938,9 @@ struct XCAEAConditions ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(sarBuffer, true); + ArraySetAsSeries(mahBuffer, true); + ArraySetAsSeries(malBuffer, true); + ArraySetAsSeries(macBuffer, true); ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(vidyaBuffer, true); @@ -967,6 +1034,66 @@ struct XCAEAConditions isSarFinishedFromBullish = false; isSarFinishedFromBearish = false; + // + // MANALYSER ... + + // + // MAH ... + + // + isOverMah = false; + isUnderMah = false; + isCrossedOverMah = false; + isCrossedUnderMah = false; + + // + isCloseOverMah = false; + isCloseUnderMah = false; + isCloseCrossedOverMah = false; + isCloseCrossedUnderMah = false; + + // + isMahBullishRejected = false; + isMahBearishRejected = false; + + // + // MAL ... + + // + isOverMal = false; + isUnderMal = false; + isCrossedOverMal = false; + isCrossedUnderMal = false; + + // + isCloseOverMal = false; + isCloseUnderMal = false; + isCloseCrossedOverMal = false; + isCloseCrossedUnderMal = false; + + // + isMalBullishRejected = false; + isMalBearishRejected = false; + + // + // MAC ... + + // + isOverMac = false; + isUnderMac = false; + isCrossedOverMac = false; + isCrossedUnderMac = false; + + // + isCloseOverMac = false; + isCloseUnderMac = false; + isCloseCrossedOverMac = false; + isCloseCrossedUnderMac = false; + + // + isMacBullishRejected = false; + isMacBearishRejected = false; + // // PEAK ... @@ -1544,6 +1671,152 @@ struct XCAEAConditions bearishScore += minScore; } + // + // MANALYSER ... + + // + // MAH ... + + // + if (isUnderMah) + { + bullishScore += minScore; + } + if (isCloseUnderMah) + { + bullishScore += minScore; + } + if (isCrossedUnderMah) + { + bullishScore += minScore; + } + if (isMahBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedUnderMah) + { + bullishScore += minScore; + } + + // + if (isOverMah) + { + bearishScore += minScore; + } + if (isCloseOverMah) + { + bearishScore += minScore; + } + if (isCrossedOverMah) + { + bearishScore += minScore; + } + if (isMahBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedOverMah) + { + bearishScore += minScore; + } + + // + + // + // MAL ... + + // + if (isOverMal) + { + bullishScore += minScore; + } + if (isCloseOverMal) + { + bullishScore += minScore; + } + if (isCrossedOverMal) + { + bullishScore += minScore; + } + if (isMalBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedOverMal) + { + bullishScore += minScore; + } + + // + if (isUnderMal) + { + bearishScore += minScore; + } + if (isCloseUnderMal) + { + bearishScore += minScore; + } + if (isCrossedUnderMal) + { + bearishScore += minScore; + } + if (isMalBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedUnderMal) + { + bearishScore += minScore; + } + + // + // MAC ... + + // + if (isOverMac) + { + bullishScore += minScore; + } + if (isCloseOverMac) + { + bullishScore += minScore; + } + if (isCrossedOverMac) + { + bullishScore += minScore; + } + if (isMacBullishRejected) + { + bullishScore += minScore; + } + if (isCloseCrossedOverMac) + { + bullishScore += minScore; + } + + // + if (isUnderMac) + { + bearishScore += minScore; + } + if (isCloseUnderMac) + { + bearishScore += minScore; + } + if (isCrossedUnderMac) + { + bearishScore += minScore; + } + if (isMacBearishRejected) + { + bearishScore += minScore; + } + if (isCloseCrossedUnderMac) + { + bearishScore += minScore; + } + // // TREND ... @@ -2261,6 +2534,36 @@ struct XCAEAConditions ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isSarFinishedFromBearish", isSarFinishedFromBearish, ignoreFalseConditions, separator) + + ToString("isOverMah", isOverMah, ignoreFalseConditions, separator) + + ToString("isUnderMah", isUnderMah, ignoreFalseConditions, separator) + + ToString("isCrossedOverMah", isCrossedOverMah, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMah", isCrossedUnderMah, ignoreFalseConditions, separator) + + ToString("isCloseOverMah", isCloseOverMah, ignoreFalseConditions, separator) + + ToString("isCloseUnderMah", isCloseUnderMah, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMah", isCloseCrossedOverMah, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMah", isCloseCrossedUnderMah, ignoreFalseConditions, separator) + + ToString("isMahBullishRejected", isMahBullishRejected, ignoreFalseConditions, separator) + + ToString("isMahBearishRejected", isMahBearishRejected, ignoreFalseConditions, separator) + + ToString("isOverMal", isOverMal, ignoreFalseConditions, separator) + + ToString("isUnderMal", isUnderMal, ignoreFalseConditions, separator) + + ToString("isCrossedOverMal", isCrossedOverMal, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMal", isCrossedUnderMal, ignoreFalseConditions, separator) + + ToString("isCloseOverMal", isCloseOverMal, ignoreFalseConditions, separator) + + ToString("isCloseUnderMal", isCloseUnderMal, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMal", isCloseCrossedOverMal, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMal", isCloseCrossedUnderMal, ignoreFalseConditions, separator) + + ToString("isMalBullishRejected", isMalBullishRejected, ignoreFalseConditions, separator) + + ToString("isMalBearishRejected", isMalBearishRejected, ignoreFalseConditions, separator) + + ToString("isOverMac", isOverMac, ignoreFalseConditions, separator) + + ToString("isUnderMac", isUnderMac, ignoreFalseConditions, separator) + + ToString("isCrossedOverMac", isCrossedOverMac, ignoreFalseConditions, separator) + + ToString("isCrossedUnderMac", isCrossedUnderMac, ignoreFalseConditions, separator) + + ToString("isCloseOverMac", isCloseOverMac, ignoreFalseConditions, separator) + + ToString("isCloseUnderMac", isCloseUnderMac, ignoreFalseConditions, separator) + + ToString("isCloseCrossedOverMac", isCloseCrossedOverMac, ignoreFalseConditions, separator) + + ToString("isCloseCrossedUnderMac", isCloseCrossedUnderMac, ignoreFalseConditions, separator) + + ToString("isMacBullishRejected", isMacBullishRejected, ignoreFalseConditions, separator) + + ToString("isMacBearishRejected", isMacBearishRejected, ignoreFalseConditions, separator) + ToString("isPeakSameLast", isPeakSameLast, ignoreFalseConditions, separator) + ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) + ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) + @@ -3250,6 +3553,24 @@ class XCXCAEAHelper : XCBase conditions.sarBuffer // ); + // + Copy( + xcaConditions.mahBuffer, + conditions.mahBuffer // + ); + + // + Copy( + xcaConditions.malBuffer, + conditions.malBuffer // + ); + + // + Copy( + xcaConditions.macBuffer, + conditions.macBuffer // + ); + // Copy( xcaConditions.peakBuffer, @@ -3350,80 +3671,110 @@ class XCXCAEAHelper : XCBase // Conditions ... // - conditions.isKIBullish = xcaConditions.isKIBullish; - conditions.isKIBearish = xcaConditions.isKIBearish; - conditions.isKIRejectUp = xcaConditions.isKIRejectUp; - conditions.isTKIBullish = xcaConditions.isTKIBullish; - conditions.isTKIBearish = xcaConditions.isTKIBearish; - conditions.isSarBullish = xcaConditions.isSarBullish; - conditions.isSarBearish = xcaConditions.isSarBearish; - conditions.isTKIRejectUp = xcaConditions.isTKIRejectUp; - conditions.isPeakIsPivot = xcaConditions.isPeakIsPivot; - conditions.isValeIsPivot = xcaConditions.isValeIsPivot; - conditions.isVidyaBullish = xcaConditions.isVidyaBullish; - conditions.isVidyaBearish = xcaConditions.isVidyaBearish; - conditions.isKIRejectDown = xcaConditions.isKIRejectDown; - conditions.isPeakSameLast = xcaConditions.isPeakSameLast; - conditions.isPeakOverLast = xcaConditions.isPeakOverLast; - conditions.isValeSameLast = xcaConditions.isValeSameLast; - conditions.isValeOverLast = xcaConditions.isValeOverLast; - conditions.isTrendBullish = xcaConditions.isTrendBullish; - conditions.isTrendBearish = xcaConditions.isTrendBearish; - conditions.isTKIRejectDown = xcaConditions.isTKIRejectDown; - conditions.isPeakUnderLast = xcaConditions.isPeakUnderLast; - conditions.isValeUnderLast = xcaConditions.isValeUnderLast; - conditions.isTrendRejectUp = xcaConditions.isTrendRejectUp; - conditions.isTrendRejectDown = xcaConditions.isTrendRejectDown; - conditions.isSupportSameLast = xcaConditions.isSupportSameLast; - conditions.isSupportOverLast = xcaConditions.isSupportOverLast; - conditions.isSupportUnderLast = xcaConditions.isSupportUnderLast; - conditions.isSwingLowSameLast = xcaConditions.isSwingLowSameLast; - conditions.isSwingLowOverLast = xcaConditions.isSwingLowOverLast; - conditions.isSwingLowUnderLast = xcaConditions.isSwingLowUnderLast; - conditions.isSwingHighSameLast = xcaConditions.isSwingHighSameLast; - conditions.isSwingHighOverLast = xcaConditions.isSwingHighOverLast; - conditions.isSupportSameAsVale = xcaConditions.isSupportSameAsVale; - conditions.isLastSupportBreaked = xcaConditions.isLastSupportBreaked; - conditions.isResistanceSameLast = xcaConditions.isResistanceSameLast; - conditions.isResistanceOverLast = xcaConditions.isResistanceOverLast; - conditions.isSwingHighUnderLast = xcaConditions.isSwingHighUnderLast; - conditions.isSwingLowSameAsVale = xcaConditions.isSwingLowSameAsVale; - conditions.isLastSupportRejected = xcaConditions.isLastSupportRejected; - conditions.isResistanceUnderLast = xcaConditions.isResistanceUnderLast; - conditions.isKISwitchedToBullish = xcaConditions.isKISwitchedToBullish; - conditions.isKISwitchedToBearish = xcaConditions.isKISwitchedToBearish; - conditions.isLastSwingLowBreaked = xcaConditions.isLastSwingLowBreaked; - conditions.isSwingHighSameAsPeak = xcaConditions.isSwingHighSameAsPeak; - conditions.isPeakSwitchedToPivot = xcaConditions.isPeakSwitchedToPivot; - conditions.isValeSwitchedToPivot = xcaConditions.isValeSwitchedToPivot; - conditions.isTKISwitchedToBullish = xcaConditions.isTKISwitchedToBullish; - conditions.isTKISwitchedToBearish = xcaConditions.isTKISwitchedToBearish; - conditions.isLastSwingLowRejected = xcaConditions.isLastSwingLowRejected; - conditions.isSarSwitchedToBullish = xcaConditions.isSarSwitchedToBullish; - conditions.isSarSwitchedToBearish = xcaConditions.isSarSwitchedToBearish; - conditions.isLastSwingHighBreaked = xcaConditions.isLastSwingHighBreaked; - conditions.isResistanceSameAsPeak = xcaConditions.isResistanceSameAsPeak; - conditions.isPeakFinishedFromPivot = xcaConditions.isPeakFinishedFromPivot; - conditions.isValeFinishedFromPivot = xcaConditions.isValeFinishedFromPivot; - conditions.isLastSwingHighRejected = xcaConditions.isLastSwingHighRejected; - conditions.isLastResistanceBreaked = xcaConditions.isLastResistanceBreaked; - conditions.isSupportSameAsSwingLow = xcaConditions.isSupportSameAsSwingLow; - conditions.isKIFinishedFromBullish = xcaConditions.isKIFinishedFromBullish; - conditions.isKIFinishedFromBearish = xcaConditions.isKIFinishedFromBearish; - conditions.isTKIFinishedFromBullish = xcaConditions.isTKIFinishedFromBullish; - conditions.isTKIFinishedFromBearish = xcaConditions.isTKIFinishedFromBearish; - conditions.isSarFinishedFromBullish = xcaConditions.isSarFinishedFromBullish; - conditions.isSarFinishedFromBearish = xcaConditions.isSarFinishedFromBearish; - conditions.isVidyaSwitchedToBullish = xcaConditions.isVidyaSwitchedToBullish; - conditions.isVidyaSwitchedToBearish = xcaConditions.isVidyaSwitchedToBearish; - conditions.isLastResistanceRejected = xcaConditions.isLastResistanceRejected; - conditions.isTrendSwitchedToBullish = xcaConditions.isTrendSwitchedToBullish; - conditions.isTrendSwitchedToBearish = xcaConditions.isTrendSwitchedToBearish; - conditions.isVidyaFinishedFromBullish = xcaConditions.isVidyaFinishedFromBullish; - conditions.isVidyaFinishedFromBearish = xcaConditions.isVidyaFinishedFromBearish; - conditions.isTrendFinishedFromBullish = xcaConditions.isTrendFinishedFromBullish; - conditions.isTrendFinishedFromBearish = xcaConditions.isTrendFinishedFromBearish; - conditions.isResistanceSameAsSwingHigh = xcaConditions.isResistanceSameAsSwingHigh; + conditions.isOverMah = isOverMah; + conditions.isOverMal = isOverMal; + conditions.isOverMac = isOverMac; + conditions.isUnderMah = isUnderMah; + conditions.isUnderMal = isUnderMal; + conditions.isUnderMac = isUnderMac; + conditions.isKIBullish = isKIBullish; + conditions.isKIBearish = isKIBearish; + conditions.isKIRejectUp = isKIRejectUp; + conditions.isTKIBullish = isTKIBullish; + conditions.isTKIBearish = isTKIBearish; + conditions.isSarBullish = isSarBullish; + conditions.isSarBearish = isSarBearish; + conditions.isTKIRejectUp = isTKIRejectUp; + conditions.isPeakIsPivot = isPeakIsPivot; + conditions.isValeIsPivot = isValeIsPivot; + conditions.isCloseOverMah = isCloseOverMah; + conditions.isCloseOverMal = isCloseOverMal; + conditions.isCloseOverMac = isCloseOverMac; + conditions.isVidyaBullish = isVidyaBullish; + conditions.isVidyaBearish = isVidyaBearish; + conditions.isKIRejectDown = isKIRejectDown; + conditions.isPeakSameLast = isPeakSameLast; + conditions.isPeakOverLast = isPeakOverLast; + conditions.isValeSameLast = isValeSameLast; + conditions.isValeOverLast = isValeOverLast; + conditions.isTrendBullish = isTrendBullish; + conditions.isTrendBearish = isTrendBearish; + conditions.isCloseUnderMah = isCloseUnderMah; + conditions.isCloseUnderMal = isCloseUnderMal; + conditions.isCloseUnderMac = isCloseUnderMac; + conditions.isTKIRejectDown = isTKIRejectDown; + conditions.isPeakUnderLast = isPeakUnderLast; + conditions.isValeUnderLast = isValeUnderLast; + conditions.isTrendRejectUp = isTrendRejectUp; + conditions.isCrossedOverMah = isCrossedOverMah; + conditions.isCrossedOverMal = isCrossedOverMal; + conditions.isCrossedOverMac = isCrossedOverMac; + conditions.isCrossedUnderMah = isCrossedUnderMah; + conditions.isCrossedUnderMal = isCrossedUnderMal; + conditions.isCrossedUnderMac = isCrossedUnderMac; + conditions.isTrendRejectDown = isTrendRejectDown; + conditions.isSupportSameLast = isSupportSameLast; + conditions.isSupportOverLast = isSupportOverLast; + conditions.isSupportUnderLast = isSupportUnderLast; + conditions.isSwingLowSameLast = isSwingLowSameLast; + conditions.isSwingLowOverLast = isSwingLowOverLast; + conditions.isSwingLowUnderLast = isSwingLowUnderLast; + conditions.isSwingHighSameLast = isSwingHighSameLast; + conditions.isSwingHighOverLast = isSwingHighOverLast; + conditions.isSupportSameAsVale = isSupportSameAsVale; + conditions.isMahBullishRejected = isMahBullishRejected; + conditions.isMahBearishRejected = isMahBearishRejected; + conditions.isMalBullishRejected = isMalBullishRejected; + conditions.isMalBearishRejected = isMalBearishRejected; + conditions.isMacBullishRejected = isMacBullishRejected; + conditions.isMacBearishRejected = isMacBearishRejected; + conditions.isLastSupportBreaked = isLastSupportBreaked; + conditions.isResistanceSameLast = isResistanceSameLast; + conditions.isResistanceOverLast = isResistanceOverLast; + conditions.isSwingHighUnderLast = isSwingHighUnderLast; + conditions.isSwingLowSameAsVale = isSwingLowSameAsVale; + conditions.isCloseCrossedOverMah = isCloseCrossedOverMah; + conditions.isCloseCrossedOverMal = isCloseCrossedOverMal; + conditions.isCloseCrossedOverMac = isCloseCrossedOverMac; + conditions.isLastSupportRejected = isLastSupportRejected; + conditions.isResistanceUnderLast = isResistanceUnderLast; + conditions.isKISwitchedToBullish = isKISwitchedToBullish; + conditions.isKISwitchedToBearish = isKISwitchedToBearish; + conditions.isLastSwingLowBreaked = isLastSwingLowBreaked; + conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak; + conditions.isPeakSwitchedToPivot = isPeakSwitchedToPivot; + conditions.isValeSwitchedToPivot = isValeSwitchedToPivot; + conditions.isCloseCrossedUnderMah = isCloseCrossedUnderMah; + conditions.isCloseCrossedUnderMal = isCloseCrossedUnderMal; + conditions.isCloseCrossedUnderMac = isCloseCrossedUnderMac; + conditions.isTKISwitchedToBullish = isTKISwitchedToBullish; + conditions.isTKISwitchedToBearish = isTKISwitchedToBearish; + conditions.isLastSwingLowRejected = isLastSwingLowRejected; + conditions.isSarSwitchedToBullish = isSarSwitchedToBullish; + conditions.isSarSwitchedToBearish = isSarSwitchedToBearish; + conditions.isLastSwingHighBreaked = isLastSwingHighBreaked; + conditions.isResistanceSameAsPeak = isResistanceSameAsPeak; + conditions.isPeakFinishedFromPivot = isPeakFinishedFromPivot; + conditions.isValeFinishedFromPivot = isValeFinishedFromPivot; + conditions.isLastSwingHighRejected = isLastSwingHighRejected; + conditions.isLastResistanceBreaked = isLastResistanceBreaked; + conditions.isSupportSameAsSwingLow = isSupportSameAsSwingLow; + conditions.isKIFinishedFromBullish = isKIFinishedFromBullish; + conditions.isKIFinishedFromBearish = isKIFinishedFromBearish; + conditions.isTKIFinishedFromBullish = isTKIFinishedFromBullish; + conditions.isTKIFinishedFromBearish = isTKIFinishedFromBearish; + conditions.isSarFinishedFromBullish = isSarFinishedFromBullish; + conditions.isSarFinishedFromBearish = isSarFinishedFromBearish; + conditions.isVidyaSwitchedToBullish = isVidyaSwitchedToBullish; + conditions.isVidyaSwitchedToBearish = isVidyaSwitchedToBearish; + conditions.isLastResistanceRejected = isLastResistanceRejected; + conditions.isTrendSwitchedToBullish = isTrendSwitchedToBullish; + conditions.isTrendSwitchedToBearish = isTrendSwitchedToBearish; + conditions.isVidyaFinishedFromBullish = isVidyaFinishedFromBullish; + conditions.isVidyaFinishedFromBearish = isVidyaFinishedFromBearish; + conditions.isTrendFinishedFromBullish = isTrendFinishedFromBullish; + conditions.isTrendFinishedFromBearish = isTrendFinishedFromBearish; + conditions.isResistanceSameAsSwingHigh = isResistanceSameAsSwingHigh; // // XOSCS ...