add supports for MANALYSER and attached it to XCAEAHelper ...

This commit is contained in:
2025-04-29 11:11:35 +03:30
parent f7e8e1c5bf
commit 4974e10e0c
4 changed files with 1408 additions and 105 deletions
+759 -20
View File
@@ -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,