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_SWING_HIGH_LINE = 23,
X121_XCA_TKI_LINE = 24, X121_XCA_TKI_LINE = 24,
X121_XCA_VIDYA_LINE = 26, X121_XCA_VIDYA_LINE = 26,
X121_XCA_TREND_STATE_LINE = 28, X121_XCA_MAH_LINE = 28,
X121_XCA_KI_STATE_LINE = 29, X121_XCA_MAL_LINE = 29,
X121_XCA_TKI_STATE_LINE = 30, X121_XCA_MAC_LINE = 30,
X121_XCA_VIDYA_STATE_LINE = 31, 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 int vidyaEMALength; // EMA Length
ENUM_APPLIED_PRICE vidyaAppliedTo; // Applied To ENUM_APPLIED_PRICE vidyaAppliedTo; // Applied To
//
// MANALYSER ...
int manalyserLength; // Length
ENUM_MA_METHOD manalyserMethod; // Method
// //
// Swing Detection ... // Swing Detection ...
int swingLength; // Length int swingLength; // Length
@@ -138,6 +146,9 @@ struct X121XCAInputs
bool showSar; // Show Sar bool showSar; // Show Sar
bool showKI; // Show KI bool showKI; // Show KI
bool showTKI; // Show TKI bool showTKI; // Show TKI
bool showMAH; // Show MAH
bool showMAL; // Show MAL
bool showMAC; // Show MAC
bool showVidya; // Show Vidya bool showVidya; // Show Vidya
bool showTrend; // Show Trend bool showTrend; // Show Trend
bool showSwings; // Show Swings bool showSwings; // Show Swings
@@ -223,6 +234,11 @@ struct X121XCAInputs
vidyaEMALength = 0; vidyaEMALength = 0;
vidyaAppliedTo = PRICE_CLOSE; vidyaAppliedTo = PRICE_CLOSE;
//
// MANALYSER ...
manalyserLength = 0; // Length
manalyserMethod = MODE_SMA; // Method
// //
// Swing Detection ... // Swing Detection ...
swingLength = 0; // Length swingLength = 0; // Length
@@ -239,22 +255,25 @@ struct X121XCAInputs
startCalculationForLastBars = 0; // Calculate Last n Bars startCalculationForLastBars = 0; // Calculate Last n Bars
// //
showSar = true; // Show Sar showSar = false; // Show Sar
showKI = true; // Show KI showKI = false; // Show KI
showTKI = true; // Show TKI showTKI = false; // Show TKI
showVidya = true; // Show Vidya showMAH = false; // Show MAH
showTrend = true; // Show Trend showMAL = false; // Show MAL
showSwings = true; // Show Swings showMAC = false; // Show MAC
showFiboLevel1 = true; // Show Fibo Level 1 showVidya = false; // Show Vidya
showFiboLevel2 = true; // Show Fibo Level 2 showTrend = false; // Show Trend
showFiboLevel3 = true; // Show Fibo Level 3 showSwings = false; // Show Swings
showPeaksAndVales = true; // Show Peaks And Vales showFiboLevel1 = false; // Show Fibo Level 1
showPeakAndValeGolden = true; // Show Peak and Vale Golden showFiboLevel2 = false; // Show Fibo Level 2
showSupportAndResistance = true; // Show Support and Resistance showFiboLevel3 = false; // Show Fibo Level 3
showShortCycle = true; // Show Short Cycle showPeaksAndVales = false; // Show Peaks And Vales
showMediumCycle = true; // Show Medium Cycle showPeakAndValeGolden = false; // Show Peak and Vale Golden
showLongCycle = true; // Show Long Cycle showSupportAndResistance = false; // Show Support and Resistance
showHindCycle = true; // Show Hind Cycle 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 sarArrowCode = 0; // Parabolic Sar Arrow Code
@@ -320,6 +339,11 @@ struct X121XCAInputs
vidyaEMALength = 14; vidyaEMALength = 14;
vidyaAppliedTo = PRICE_CLOSE; vidyaAppliedTo = PRICE_CLOSE;
//
// MANALYSER ...
manalyserLength = 14; // Length
manalyserMethod = MODE_SMA; // Method
// //
// Swing Detection ... // Swing Detection ...
swingLength = 5; // Length swingLength = 5; // Length
@@ -334,6 +358,9 @@ struct X121XCAInputs
showSar = true; // Show Sar showSar = true; // Show Sar
showKI = true; // Show KI showKI = true; // Show KI
showTKI = true; // Show TKI showTKI = true; // Show TKI
showMAH = true; // Show MAH
showMAL = true; // Show MAL
showMAC = true; // Show MAC
showVidya = true; // Show Vidya showVidya = true; // Show Vidya
showTrend = true; // Show Trend showTrend = true; // Show Trend
showSwings = true; // Show Swings showSwings = true; // Show Swings
@@ -374,6 +401,7 @@ struct X121XCAInputs
sarMax > sarStep && sarMax > sarStep &&
vidyaCMOLength > 0 && vidyaCMOLength > 0 &&
vidyaEMALength > 0 && vidyaEMALength > 0 &&
manalyserLength > 0 &&
// //
// XCA ... // XCA ...
(IsValid(scMethod, scPeriod) && (IsValid(scMethod, scPeriod) &&
@@ -398,6 +426,7 @@ struct X121XCAInputs
result = MathMax(kiLength, swingLength); result = MathMax(kiLength, swingLength);
result = MathMax(result, vidyaCMOLength); result = MathMax(result, vidyaCMOLength);
result = MathMax(result, vidyaEMALength); result = MathMax(result, vidyaEMALength);
result = MathMax(result, manalyserLength);
// //
return result; return result;
@@ -427,6 +456,9 @@ struct X121XCAConditions
double hHHBuffer[]; double hHHBuffer[];
double hLLBuffer[]; double hLLBuffer[];
double sarBuffer[]; double sarBuffer[];
double mahBuffer[];
double malBuffer[];
double macBuffer[];
double peakBuffer[]; double peakBuffer[];
double valeBuffer[]; double valeBuffer[];
double vidyaBuffer[]; double vidyaBuffer[];
@@ -520,6 +552,66 @@ struct X121XCAConditions
bool isSarFinishedFromBullish; bool isSarFinishedFromBullish;
bool isSarFinishedFromBearish; 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 ... // PEAK ...
@@ -666,6 +758,9 @@ struct X121XCAConditions
Clean(hHHBuffer); Clean(hHHBuffer);
Clean(hLLBuffer); Clean(hLLBuffer);
Clean(sarBuffer); Clean(sarBuffer);
Clean(mahBuffer);
Clean(malBuffer);
Clean(macBuffer);
Clean(peakBuffer); Clean(peakBuffer);
Clean(valeBuffer); Clean(valeBuffer);
Clean(vidyaBuffer); Clean(vidyaBuffer);
@@ -696,6 +791,9 @@ struct X121XCAConditions
ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hHHBuffer, true);
ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(hLLBuffer, true);
ArraySetAsSeries(sarBuffer, true); ArraySetAsSeries(sarBuffer, true);
ArraySetAsSeries(mahBuffer, true);
ArraySetAsSeries(malBuffer, true);
ArraySetAsSeries(macBuffer, true);
ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(peakBuffer, true);
ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(valeBuffer, true);
ArraySetAsSeries(vidyaBuffer, true); ArraySetAsSeries(vidyaBuffer, true);
@@ -789,6 +887,66 @@ struct X121XCAConditions
isSarFinishedFromBullish = false; isSarFinishedFromBullish = false;
isSarFinishedFromBearish = 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 ... // PEAK ...
@@ -1039,6 +1197,152 @@ struct X121XCAConditions
bearishScore += minScore; 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 ... // TREND ...
@@ -1304,6 +1608,36 @@ struct X121XCAConditions
ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) + ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) +
ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isSarFinishedFromBearish", isSarFinishedFromBearish, 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("isPeakSameLast", isPeakSameLast, ignoreFalseConditions, separator) +
ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) + ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) +
ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) + ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) +
@@ -1426,6 +1760,9 @@ class XCX121XCAHelper : public XCBaseHelper
Clean(hHHBuffer); Clean(hHHBuffer);
Clean(hLLBuffer); Clean(hLLBuffer);
Clean(sarBuffer); Clean(sarBuffer);
Clean(mahBuffer);
Clean(malBuffer);
Clean(macBuffer);
Clean(peakBuffer); Clean(peakBuffer);
Clean(valeBuffer); Clean(valeBuffer);
Clean(vidyaBuffer); Clean(vidyaBuffer);
@@ -1479,6 +1816,9 @@ class XCX121XCAHelper : public XCBaseHelper
ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hHHBuffer, true);
ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(hLLBuffer, true);
ArraySetAsSeries(sarBuffer, true); ArraySetAsSeries(sarBuffer, true);
ArraySetAsSeries(mahBuffer, true);
ArraySetAsSeries(malBuffer, true);
ArraySetAsSeries(macBuffer, true);
ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(peakBuffer, true);
ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(valeBuffer, true);
ArraySetAsSeries(vidyaBuffer, true); ArraySetAsSeries(vidyaBuffer, true);
@@ -1534,6 +1874,9 @@ class XCX121XCAHelper : public XCBaseHelper
mInputs.vidyaCMOLength, mInputs.vidyaCMOLength,
mInputs.vidyaEMALength, mInputs.vidyaEMALength,
mInputs.vidyaAppliedTo, mInputs.vidyaAppliedTo,
"", // MANALYSER ...
mInputs.manalyserLength,
mInputs.manalyserMethod,
"", // Swing Detection ... "", // Swing Detection ...
mInputs.swingLength, mInputs.swingLength,
"", // Support and Resistance ... "", // Support and Resistance ...
@@ -1544,6 +1887,9 @@ class XCX121XCAHelper : public XCBaseHelper
mInputs.showSar, mInputs.showSar,
mInputs.showKI, mInputs.showKI,
mInputs.showTKI, mInputs.showTKI,
mInputs.showMAH,
mInputs.showMAL,
mInputs.showMAC,
mInputs.showVidya, mInputs.showVidya,
mInputs.showTrend, mInputs.showTrend,
mInputs.showSwings, 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 ... // PEAK ...
@@ -3249,6 +3754,27 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.sarBuffer // conditions.sarBuffer //
); );
//
CopyMah(
zIndex,
loopback,
conditions.mahBuffer //
);
//
CopyMal(
zIndex,
loopback,
conditions.malBuffer //
);
//
CopyMac(
zIndex,
loopback,
conditions.macBuffer //
);
// //
CopyPeak( CopyPeak(
zIndex, zIndex,
@@ -3522,6 +4048,141 @@ class XCX121XCAHelper : public XCBaseHelper
bool isSarFinishedFromBearish = !isSarBearish && bool isSarFinishedFromBearish = !isSarBearish &&
isSarBearishPrev; 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 ... // PEAK ...
@@ -3747,6 +4408,12 @@ class XCX121XCAHelper : public XCBaseHelper
// Attached ... // Attached ...
// //
conditions.isOverMah = isOverMah;
conditions.isOverMal = isOverMal;
conditions.isOverMac = isOverMac;
conditions.isUnderMah = isUnderMah;
conditions.isUnderMal = isUnderMal;
conditions.isUnderMac = isUnderMac;
conditions.isKIBullish = isKIBullish; conditions.isKIBullish = isKIBullish;
conditions.isKIBearish = isKIBearish; conditions.isKIBearish = isKIBearish;
conditions.isKIRejectUp = isKIRejectUp; conditions.isKIRejectUp = isKIRejectUp;
@@ -3757,6 +4424,9 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isTKIRejectUp = isTKIRejectUp; conditions.isTKIRejectUp = isTKIRejectUp;
conditions.isPeakIsPivot = isPeakIsPivot; conditions.isPeakIsPivot = isPeakIsPivot;
conditions.isValeIsPivot = isValeIsPivot; conditions.isValeIsPivot = isValeIsPivot;
conditions.isCloseOverMah = isCloseOverMah;
conditions.isCloseOverMal = isCloseOverMal;
conditions.isCloseOverMac = isCloseOverMac;
conditions.isVidyaBullish = isVidyaBullish; conditions.isVidyaBullish = isVidyaBullish;
conditions.isVidyaBearish = isVidyaBearish; conditions.isVidyaBearish = isVidyaBearish;
conditions.isKIRejectDown = isKIRejectDown; conditions.isKIRejectDown = isKIRejectDown;
@@ -3766,10 +4436,19 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isValeOverLast = isValeOverLast; conditions.isValeOverLast = isValeOverLast;
conditions.isTrendBullish = isTrendBullish; conditions.isTrendBullish = isTrendBullish;
conditions.isTrendBearish = isTrendBearish; conditions.isTrendBearish = isTrendBearish;
conditions.isCloseUnderMah = isCloseUnderMah;
conditions.isCloseUnderMal = isCloseUnderMal;
conditions.isCloseUnderMac = isCloseUnderMac;
conditions.isTKIRejectDown = isTKIRejectDown; conditions.isTKIRejectDown = isTKIRejectDown;
conditions.isPeakUnderLast = isPeakUnderLast; conditions.isPeakUnderLast = isPeakUnderLast;
conditions.isValeUnderLast = isValeUnderLast; conditions.isValeUnderLast = isValeUnderLast;
conditions.isTrendRejectUp = isTrendRejectUp; 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.isTrendRejectDown = isTrendRejectDown;
conditions.isSupportSameLast = isSupportSameLast; conditions.isSupportSameLast = isSupportSameLast;
conditions.isSupportOverLast = isSupportOverLast; conditions.isSupportOverLast = isSupportOverLast;
@@ -3780,11 +4459,20 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isSwingHighSameLast = isSwingHighSameLast; conditions.isSwingHighSameLast = isSwingHighSameLast;
conditions.isSwingHighOverLast = isSwingHighOverLast; conditions.isSwingHighOverLast = isSwingHighOverLast;
conditions.isSupportSameAsVale = isSupportSameAsVale; 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.isLastSupportBreaked = isLastSupportBreaked;
conditions.isResistanceSameLast = isResistanceSameLast; conditions.isResistanceSameLast = isResistanceSameLast;
conditions.isResistanceOverLast = isResistanceOverLast; conditions.isResistanceOverLast = isResistanceOverLast;
conditions.isSwingHighUnderLast = isSwingHighUnderLast; conditions.isSwingHighUnderLast = isSwingHighUnderLast;
conditions.isSwingLowSameAsVale = isSwingLowSameAsVale; conditions.isSwingLowSameAsVale = isSwingLowSameAsVale;
conditions.isCloseCrossedOverMah = isCloseCrossedOverMah;
conditions.isCloseCrossedOverMal = isCloseCrossedOverMal;
conditions.isCloseCrossedOverMac = isCloseCrossedOverMac;
conditions.isLastSupportRejected = isLastSupportRejected; conditions.isLastSupportRejected = isLastSupportRejected;
conditions.isResistanceUnderLast = isResistanceUnderLast; conditions.isResistanceUnderLast = isResistanceUnderLast;
conditions.isKISwitchedToBullish = isKISwitchedToBullish; conditions.isKISwitchedToBullish = isKISwitchedToBullish;
@@ -3793,6 +4481,9 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak; conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak;
conditions.isPeakSwitchedToPivot = isPeakSwitchedToPivot; conditions.isPeakSwitchedToPivot = isPeakSwitchedToPivot;
conditions.isValeSwitchedToPivot = isValeSwitchedToPivot; conditions.isValeSwitchedToPivot = isValeSwitchedToPivot;
conditions.isCloseCrossedUnderMah = isCloseCrossedUnderMah;
conditions.isCloseCrossedUnderMal = isCloseCrossedUnderMal;
conditions.isCloseCrossedUnderMac = isCloseCrossedUnderMac;
conditions.isTKISwitchedToBullish = isTKISwitchedToBullish; conditions.isTKISwitchedToBullish = isTKISwitchedToBullish;
conditions.isTKISwitchedToBearish = isTKISwitchedToBearish; conditions.isTKISwitchedToBearish = isTKISwitchedToBearish;
conditions.isLastSwingLowRejected = isLastSwingLowRejected; conditions.isLastSwingLowRejected = isLastSwingLowRejected;
@@ -3857,6 +4548,9 @@ class XCX121XCAHelper : public XCBaseHelper
double hHHBuffer[]; double hHHBuffer[];
double hLLBuffer[]; double hLLBuffer[];
double sarBuffer[]; double sarBuffer[];
double mahBuffer[];
double malBuffer[];
double macBuffer[];
double peakBuffer[]; double peakBuffer[];
double valeBuffer[]; double valeBuffer[];
double vidyaBuffer[]; double vidyaBuffer[];
@@ -3996,6 +4690,33 @@ class XCX121XCAHelper : public XCBaseHelper
sarBuffer // 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( CopyBuffer(
mHandler, mHandler,
@@ -4218,6 +4939,24 @@ class XCX121XCAHelper : public XCBaseHelper
maxAllowed // maxAllowed //
); );
//
CleanupArray(
mahBuffer,
maxAllowed //
);
//
CleanupArray(
malBuffer,
maxAllowed //
);
//
CleanupArray(
macBuffer,
maxAllowed //
);
// //
CleanupArray( CleanupArray(
peakBuffer, peakBuffer,
+3 -3
View File
@@ -36,21 +36,21 @@
// Fast ... // Fast ...
input group "Fast"; input group "Fast";
input int fastLength = 6; // Length 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 input ENUM_APPLIED_PRICE fastAppliedTo = PRICE_CLOSE; // Applied To
// //
// Medium ... // Medium ...
input group "Medium"; input group "Medium";
input int mediumLength = 21; // Length 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 input ENUM_APPLIED_PRICE mediumAppliedTo = PRICE_CLOSE; // Applied To
// //
// Slow ... // Slow ...
input group "Slow"; input group "Slow";
input int slowLength = 34; // Length 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 input ENUM_APPLIED_PRICE slowAppliedTo = PRICE_CLOSE; // Applied To
// //
+218 -5
View File
@@ -84,6 +84,12 @@ input int vidyaCMOLength = 20; // CMO (Candle Momentum)
input int vidyaEMALength = 14; // EMA Length input int vidyaEMALength = 14; // EMA Length
input ENUM_APPLIED_PRICE vidyaAppliedTo = PRICE_CLOSE; // Applied To 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 group "Swing Detection";
input int swingLength = 5; // Length 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 showSar = true; // Show Sar
input bool showKI = true; // Show KI input bool showKI = true; // Show KI
input bool showTKI = true; // Show KI Trend 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 showVidya = true; // Show Vidya
input bool showTrend = true; // Show Trend input bool showTrend = true; // Show Trend
input bool showSwings = true; // Show Swings input bool showSwings = true; // Show Swings
@@ -146,8 +155,8 @@ input int swingHighArrowCode = 226; // Swing High Arrow Code
#property indicator_chart_window #property indicator_chart_window
// //
#property indicator_buffers 34 #property indicator_buffers 37
#property indicator_plots 24 #property indicator_plots 27
// //
// Plot Buffers ... // Plot Buffers ...
@@ -493,10 +502,55 @@ double vidyaColorBuffer[];
#property indicator_style24 STYLE_SOLID #property indicator_style24 STYLE_SOLID
#property indicator_width24 1 #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 ... // Data Buffers ...
#define mLastBufferIndex 27 #define mLastBufferIndex 30
// //
#define trendStateBufferIndex mLastBufferIndex + 1 #define trendStateBufferIndex mLastBufferIndex + 1
@@ -545,6 +599,12 @@ int tkiHandler = INVALID_HANDLE;
int vidyaHandler = INVALID_HANDLE; int vidyaHandler = INVALID_HANDLE;
int trendHandler = INVALID_HANDLE; int trendHandler = INVALID_HANDLE;
//
// Manalyser Handlers ...
int mahHandler = INVALID_HANDLE;
int malHandler = INVALID_HANDLE;
int macHandler = INVALID_HANDLE;
// //
// XMarketCycle sc; // XMarketCycle sc;
int mSCLength = 0; int mSCLength = 0;
@@ -653,6 +713,57 @@ int OnInit()
return INIT_FAILED; 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 // because in some cases we may have more than one input for
// calculation and we must prevent any calculation // calculation and we must prevent any calculation
@@ -758,6 +869,21 @@ int OnCalculate(
// TREND ... // TREND ...
int trendCalculatedBars = BarsCalculated(trendHandler); int trendCalculatedBars = BarsCalculated(trendHandler);
//
// MANALYSER ...
//
// MAH ...
int mahCalculatedBars = BarsCalculated(mahHandler);
//
// MAL ...
int malCalculatedBars = BarsCalculated(malHandler);
//
// MAC ...
int macCalculatedBars = BarsCalculated(macHandler);
// //
bool isPassedRequiredCalculatedBars = bool isPassedRequiredCalculatedBars =
// //
@@ -771,7 +897,15 @@ int OnCalculate(
vidyaCalculatedBars >= maxLength && vidyaCalculatedBars >= maxLength &&
// //
// TREND ... // TREND ...
trendCalculatedBars >= maxLength trendCalculatedBars >= maxLength &&
//
// MANALYSER ...
// MAH ...
mahCalculatedBars >= maxLength &&
// MAL ...
malCalculatedBars >= maxLength &&
// MAC ...
macCalculatedBars >= maxLength
// //
; ;
if (!isPassedRequiredCalculatedBars) if (!isPassedRequiredCalculatedBars)
@@ -803,6 +937,21 @@ int OnCalculate(
// TREND ... // TREND ...
int copiedTrends = CopyBuffer(trendHandler, MAIN_LINE, 0, limit + 1, trendBuffer); 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 ... // Validate Copied Items ...
bool isPassedRequiredCopiedItems = bool isPassedRequiredCopiedItems =
@@ -817,7 +966,15 @@ int OnCalculate(
copiedVidyas >= limit && copiedVidyas >= limit &&
// //
// TREND ... // TREND ...
copiedTrends >= limit copiedTrends >= limit &&
//
// MANALYSER ...
// MAH ...
copiedMahs >= limit &&
// MAL ...
copiedMals >= limit &&
// MAC ...
copiedMacs >= limit
// //
; ;
if (!isPassedRequiredCopiedItems) if (!isPassedRequiredCopiedItems)
@@ -871,6 +1028,7 @@ bool ValidateInputs()
sarMax > sarStep && sarMax > sarStep &&
vidyaEMALength > 0 && vidyaEMALength > 0 &&
vidyaCMOLength > 0 && vidyaCMOLength > 0 &&
manalyserLength > 0 &&
// //
// XCA ... // XCA ...
(IsValid(scMethod, scPeriod) && (IsValid(scMethod, scPeriod) &&
@@ -898,6 +1056,7 @@ int ExtractMaxLengthOfInputs()
result = MathMax(kiLength, swingLength); result = MathMax(kiLength, swingLength);
result = MathMax(result, vidyaCMOLength); result = MathMax(result, vidyaCMOLength);
result = MathMax(result, vidyaEMALength); result = MathMax(result, vidyaEMALength);
result = MathMax(result, manalyserLength);
// //
return result; return result;
@@ -1340,6 +1499,60 @@ void DefineBuffers()
PlotIndexSetDouble(swingHighBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue); PlotIndexSetDouble(swingHighBufferPlotIndex, PLOT_EMPTY_VALUE, emptyValue);
PlotIndexSetInteger(swingHighBufferPlotIndex, PLOT_ARROW, swingHighArrowCode); 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 ... // Data Buffers ...
+428 -77
View File
@@ -261,6 +261,9 @@ struct XCAEAConditions
double hHHBuffer[]; double hHHBuffer[];
double hLLBuffer[]; double hLLBuffer[];
double sarBuffer[]; double sarBuffer[];
double mahBuffer[];
double malBuffer[];
double macBuffer[];
double peakBuffer[]; double peakBuffer[];
double valeBuffer[]; double valeBuffer[];
double vidyaBuffer[]; double vidyaBuffer[];
@@ -270,13 +273,13 @@ struct XCAEAConditions
double tkiStateBuffer[]; double tkiStateBuffer[];
double swingLowBuffer[]; double swingLowBuffer[];
double swingHighBuffer[]; double swingHighBuffer[];
double vidyaStateBuffer[];
double resistanceBuffer[]; double resistanceBuffer[];
double peakGoldenBuffer[]; double peakGoldenBuffer[];
double valeGoldenBuffer[]; double valeGoldenBuffer[];
double fiboLevel1Buffer[]; double fiboLevel1Buffer[];
double fiboLevel2Buffer[]; double fiboLevel2Buffer[];
double fiboLevel3Buffer[]; double fiboLevel3Buffer[];
double vidyaStateBuffer[];
double trendStateBuffer[]; double trendStateBuffer[];
// //
@@ -354,6 +357,66 @@ struct XCAEAConditions
bool isSarFinishedFromBullish; bool isSarFinishedFromBullish;
bool isSarFinishedFromBearish; 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 ... // PEAK ...
@@ -722,8 +785,6 @@ struct XCAEAConditions
// //
// Specified Conditions ... // Specified Conditions ...
//
// //
// Constructor ... // Constructor ...
XCAEAConditions() XCAEAConditions()
@@ -844,6 +905,9 @@ struct XCAEAConditions
Clean(hHHBuffer); Clean(hHHBuffer);
Clean(hLLBuffer); Clean(hLLBuffer);
Clean(sarBuffer); Clean(sarBuffer);
Clean(mahBuffer);
Clean(malBuffer);
Clean(macBuffer);
Clean(peakBuffer); Clean(peakBuffer);
Clean(valeBuffer); Clean(valeBuffer);
Clean(vidyaBuffer); Clean(vidyaBuffer);
@@ -874,6 +938,9 @@ struct XCAEAConditions
ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hHHBuffer, true);
ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(hLLBuffer, true);
ArraySetAsSeries(sarBuffer, true); ArraySetAsSeries(sarBuffer, true);
ArraySetAsSeries(mahBuffer, true);
ArraySetAsSeries(malBuffer, true);
ArraySetAsSeries(macBuffer, true);
ArraySetAsSeries(peakBuffer, true); ArraySetAsSeries(peakBuffer, true);
ArraySetAsSeries(valeBuffer, true); ArraySetAsSeries(valeBuffer, true);
ArraySetAsSeries(vidyaBuffer, true); ArraySetAsSeries(vidyaBuffer, true);
@@ -967,6 +1034,66 @@ struct XCAEAConditions
isSarFinishedFromBullish = false; isSarFinishedFromBullish = false;
isSarFinishedFromBearish = 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 ... // PEAK ...
@@ -1544,6 +1671,152 @@ struct XCAEAConditions
bearishScore += minScore; 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 ... // TREND ...
@@ -2261,6 +2534,36 @@ struct XCAEAConditions
ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) + ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) +
ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isSarFinishedFromBearish", isSarFinishedFromBearish, 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("isPeakSameLast", isPeakSameLast, ignoreFalseConditions, separator) +
ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) + ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) +
ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) + ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) +
@@ -3250,6 +3553,24 @@ class XCXCAEAHelper : XCBase
conditions.sarBuffer // conditions.sarBuffer //
); );
//
Copy(
xcaConditions.mahBuffer,
conditions.mahBuffer //
);
//
Copy(
xcaConditions.malBuffer,
conditions.malBuffer //
);
//
Copy(
xcaConditions.macBuffer,
conditions.macBuffer //
);
// //
Copy( Copy(
xcaConditions.peakBuffer, xcaConditions.peakBuffer,
@@ -3350,80 +3671,110 @@ class XCXCAEAHelper : XCBase
// Conditions ... // Conditions ...
// //
conditions.isKIBullish = xcaConditions.isKIBullish; conditions.isOverMah = isOverMah;
conditions.isKIBearish = xcaConditions.isKIBearish; conditions.isOverMal = isOverMal;
conditions.isKIRejectUp = xcaConditions.isKIRejectUp; conditions.isOverMac = isOverMac;
conditions.isTKIBullish = xcaConditions.isTKIBullish; conditions.isUnderMah = isUnderMah;
conditions.isTKIBearish = xcaConditions.isTKIBearish; conditions.isUnderMal = isUnderMal;
conditions.isSarBullish = xcaConditions.isSarBullish; conditions.isUnderMac = isUnderMac;
conditions.isSarBearish = xcaConditions.isSarBearish; conditions.isKIBullish = isKIBullish;
conditions.isTKIRejectUp = xcaConditions.isTKIRejectUp; conditions.isKIBearish = isKIBearish;
conditions.isPeakIsPivot = xcaConditions.isPeakIsPivot; conditions.isKIRejectUp = isKIRejectUp;
conditions.isValeIsPivot = xcaConditions.isValeIsPivot; conditions.isTKIBullish = isTKIBullish;
conditions.isVidyaBullish = xcaConditions.isVidyaBullish; conditions.isTKIBearish = isTKIBearish;
conditions.isVidyaBearish = xcaConditions.isVidyaBearish; conditions.isSarBullish = isSarBullish;
conditions.isKIRejectDown = xcaConditions.isKIRejectDown; conditions.isSarBearish = isSarBearish;
conditions.isPeakSameLast = xcaConditions.isPeakSameLast; conditions.isTKIRejectUp = isTKIRejectUp;
conditions.isPeakOverLast = xcaConditions.isPeakOverLast; conditions.isPeakIsPivot = isPeakIsPivot;
conditions.isValeSameLast = xcaConditions.isValeSameLast; conditions.isValeIsPivot = isValeIsPivot;
conditions.isValeOverLast = xcaConditions.isValeOverLast; conditions.isCloseOverMah = isCloseOverMah;
conditions.isTrendBullish = xcaConditions.isTrendBullish; conditions.isCloseOverMal = isCloseOverMal;
conditions.isTrendBearish = xcaConditions.isTrendBearish; conditions.isCloseOverMac = isCloseOverMac;
conditions.isTKIRejectDown = xcaConditions.isTKIRejectDown; conditions.isVidyaBullish = isVidyaBullish;
conditions.isPeakUnderLast = xcaConditions.isPeakUnderLast; conditions.isVidyaBearish = isVidyaBearish;
conditions.isValeUnderLast = xcaConditions.isValeUnderLast; conditions.isKIRejectDown = isKIRejectDown;
conditions.isTrendRejectUp = xcaConditions.isTrendRejectUp; conditions.isPeakSameLast = isPeakSameLast;
conditions.isTrendRejectDown = xcaConditions.isTrendRejectDown; conditions.isPeakOverLast = isPeakOverLast;
conditions.isSupportSameLast = xcaConditions.isSupportSameLast; conditions.isValeSameLast = isValeSameLast;
conditions.isSupportOverLast = xcaConditions.isSupportOverLast; conditions.isValeOverLast = isValeOverLast;
conditions.isSupportUnderLast = xcaConditions.isSupportUnderLast; conditions.isTrendBullish = isTrendBullish;
conditions.isSwingLowSameLast = xcaConditions.isSwingLowSameLast; conditions.isTrendBearish = isTrendBearish;
conditions.isSwingLowOverLast = xcaConditions.isSwingLowOverLast; conditions.isCloseUnderMah = isCloseUnderMah;
conditions.isSwingLowUnderLast = xcaConditions.isSwingLowUnderLast; conditions.isCloseUnderMal = isCloseUnderMal;
conditions.isSwingHighSameLast = xcaConditions.isSwingHighSameLast; conditions.isCloseUnderMac = isCloseUnderMac;
conditions.isSwingHighOverLast = xcaConditions.isSwingHighOverLast; conditions.isTKIRejectDown = isTKIRejectDown;
conditions.isSupportSameAsVale = xcaConditions.isSupportSameAsVale; conditions.isPeakUnderLast = isPeakUnderLast;
conditions.isLastSupportBreaked = xcaConditions.isLastSupportBreaked; conditions.isValeUnderLast = isValeUnderLast;
conditions.isResistanceSameLast = xcaConditions.isResistanceSameLast; conditions.isTrendRejectUp = isTrendRejectUp;
conditions.isResistanceOverLast = xcaConditions.isResistanceOverLast; conditions.isCrossedOverMah = isCrossedOverMah;
conditions.isSwingHighUnderLast = xcaConditions.isSwingHighUnderLast; conditions.isCrossedOverMal = isCrossedOverMal;
conditions.isSwingLowSameAsVale = xcaConditions.isSwingLowSameAsVale; conditions.isCrossedOverMac = isCrossedOverMac;
conditions.isLastSupportRejected = xcaConditions.isLastSupportRejected; conditions.isCrossedUnderMah = isCrossedUnderMah;
conditions.isResistanceUnderLast = xcaConditions.isResistanceUnderLast; conditions.isCrossedUnderMal = isCrossedUnderMal;
conditions.isKISwitchedToBullish = xcaConditions.isKISwitchedToBullish; conditions.isCrossedUnderMac = isCrossedUnderMac;
conditions.isKISwitchedToBearish = xcaConditions.isKISwitchedToBearish; conditions.isTrendRejectDown = isTrendRejectDown;
conditions.isLastSwingLowBreaked = xcaConditions.isLastSwingLowBreaked; conditions.isSupportSameLast = isSupportSameLast;
conditions.isSwingHighSameAsPeak = xcaConditions.isSwingHighSameAsPeak; conditions.isSupportOverLast = isSupportOverLast;
conditions.isPeakSwitchedToPivot = xcaConditions.isPeakSwitchedToPivot; conditions.isSupportUnderLast = isSupportUnderLast;
conditions.isValeSwitchedToPivot = xcaConditions.isValeSwitchedToPivot; conditions.isSwingLowSameLast = isSwingLowSameLast;
conditions.isTKISwitchedToBullish = xcaConditions.isTKISwitchedToBullish; conditions.isSwingLowOverLast = isSwingLowOverLast;
conditions.isTKISwitchedToBearish = xcaConditions.isTKISwitchedToBearish; conditions.isSwingLowUnderLast = isSwingLowUnderLast;
conditions.isLastSwingLowRejected = xcaConditions.isLastSwingLowRejected; conditions.isSwingHighSameLast = isSwingHighSameLast;
conditions.isSarSwitchedToBullish = xcaConditions.isSarSwitchedToBullish; conditions.isSwingHighOverLast = isSwingHighOverLast;
conditions.isSarSwitchedToBearish = xcaConditions.isSarSwitchedToBearish; conditions.isSupportSameAsVale = isSupportSameAsVale;
conditions.isLastSwingHighBreaked = xcaConditions.isLastSwingHighBreaked; conditions.isMahBullishRejected = isMahBullishRejected;
conditions.isResistanceSameAsPeak = xcaConditions.isResistanceSameAsPeak; conditions.isMahBearishRejected = isMahBearishRejected;
conditions.isPeakFinishedFromPivot = xcaConditions.isPeakFinishedFromPivot; conditions.isMalBullishRejected = isMalBullishRejected;
conditions.isValeFinishedFromPivot = xcaConditions.isValeFinishedFromPivot; conditions.isMalBearishRejected = isMalBearishRejected;
conditions.isLastSwingHighRejected = xcaConditions.isLastSwingHighRejected; conditions.isMacBullishRejected = isMacBullishRejected;
conditions.isLastResistanceBreaked = xcaConditions.isLastResistanceBreaked; conditions.isMacBearishRejected = isMacBearishRejected;
conditions.isSupportSameAsSwingLow = xcaConditions.isSupportSameAsSwingLow; conditions.isLastSupportBreaked = isLastSupportBreaked;
conditions.isKIFinishedFromBullish = xcaConditions.isKIFinishedFromBullish; conditions.isResistanceSameLast = isResistanceSameLast;
conditions.isKIFinishedFromBearish = xcaConditions.isKIFinishedFromBearish; conditions.isResistanceOverLast = isResistanceOverLast;
conditions.isTKIFinishedFromBullish = xcaConditions.isTKIFinishedFromBullish; conditions.isSwingHighUnderLast = isSwingHighUnderLast;
conditions.isTKIFinishedFromBearish = xcaConditions.isTKIFinishedFromBearish; conditions.isSwingLowSameAsVale = isSwingLowSameAsVale;
conditions.isSarFinishedFromBullish = xcaConditions.isSarFinishedFromBullish; conditions.isCloseCrossedOverMah = isCloseCrossedOverMah;
conditions.isSarFinishedFromBearish = xcaConditions.isSarFinishedFromBearish; conditions.isCloseCrossedOverMal = isCloseCrossedOverMal;
conditions.isVidyaSwitchedToBullish = xcaConditions.isVidyaSwitchedToBullish; conditions.isCloseCrossedOverMac = isCloseCrossedOverMac;
conditions.isVidyaSwitchedToBearish = xcaConditions.isVidyaSwitchedToBearish; conditions.isLastSupportRejected = isLastSupportRejected;
conditions.isLastResistanceRejected = xcaConditions.isLastResistanceRejected; conditions.isResistanceUnderLast = isResistanceUnderLast;
conditions.isTrendSwitchedToBullish = xcaConditions.isTrendSwitchedToBullish; conditions.isKISwitchedToBullish = isKISwitchedToBullish;
conditions.isTrendSwitchedToBearish = xcaConditions.isTrendSwitchedToBearish; conditions.isKISwitchedToBearish = isKISwitchedToBearish;
conditions.isVidyaFinishedFromBullish = xcaConditions.isVidyaFinishedFromBullish; conditions.isLastSwingLowBreaked = isLastSwingLowBreaked;
conditions.isVidyaFinishedFromBearish = xcaConditions.isVidyaFinishedFromBearish; conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak;
conditions.isTrendFinishedFromBullish = xcaConditions.isTrendFinishedFromBullish; conditions.isPeakSwitchedToPivot = isPeakSwitchedToPivot;
conditions.isTrendFinishedFromBearish = xcaConditions.isTrendFinishedFromBearish; conditions.isValeSwitchedToPivot = isValeSwitchedToPivot;
conditions.isResistanceSameAsSwingHigh = xcaConditions.isResistanceSameAsSwingHigh; 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 ... // XOSCS ...