This commit is contained in:
2025-04-17 01:46:46 +03:30
parent d912210e68
commit c6e3c78e06
9 changed files with 3038 additions and 37 deletions
+280
View File
@@ -56,6 +56,8 @@ enum ENUM_X121_XCA_BUFFERS
X121_XCA_KI_STATE_LINE = 25,
X121_XCA_SWING_LOW_LINE = 22,
X121_XCA_SWING_HIGH_LINE = 23,
X121_XCA_TKI_LINE = 24,
X121_XCA_TKI_STATE_LINE = 30,
};
//
@@ -127,6 +129,7 @@ struct X121XCAInputs
//
bool showSar; // Show Sar
bool showKI; // Show KI
bool showTKI; // Show TKI
bool showTrend; // Show Trend
bool showSwings; // Show Swings
bool showFiboLevel1; // Show Fibo Level 1
@@ -223,6 +226,7 @@ struct X121XCAInputs
//
showSar = true; // Show Sar
showKI = true; // Show KI
showTKI = true; // Show TKI
showTrend = true; // Show Trend
showSwings = true; // Show Swings
showFiboLevel1 = true; // Show Fibo Level 1
@@ -307,6 +311,7 @@ struct X121XCAInputs
//
showSar = true; // Show Sar
showKI = true; // Show KI
showTKI = true; // Show TKI
showTrend = true; // Show Trend
showSwings = true; // Show Swings
showFiboLevel1 = true; // Show Fibo Level 1
@@ -385,6 +390,7 @@ struct X121XCAConditions
//
// Buffers ...
double kiBuffer[];
double tkiBuffer[];
double sHHBuffer[];
double sLLBuffer[];
double mHHBuffer[];
@@ -399,6 +405,7 @@ struct X121XCAConditions
double trendBuffer[];
double kiStateBuffer[];
double supportBuffer[];
double tkiStateBuffer[];
double swingLowBuffer[];
double swingHighBuffer[];
double resistanceBuffer[];
@@ -427,6 +434,21 @@ struct X121XCAConditions
bool isKISwitchedToBullish;
bool isKISwitchedToBearish;
//
// TKI ...
//
bool isTKIRejectUp;
bool isTKIRejectDown;
//
bool isTKIBullish;
bool isTKIBearish;
//
bool isTKISwitchedToBullish;
bool isTKISwitchedToBearish;
//
// SAR ...
@@ -562,6 +584,7 @@ struct X121XCAConditions
//
Clean(kiBuffer);
Clean(tkiBuffer);
Clean(sHHBuffer);
Clean(sLLBuffer);
Clean(mHHBuffer);
@@ -576,6 +599,7 @@ struct X121XCAConditions
Clean(trendBuffer);
Clean(kiStateBuffer);
Clean(supportBuffer);
Clean(tkiStateBuffer);
Clean(swingLowBuffer);
Clean(swingHighBuffer);
Clean(resistanceBuffer);
@@ -588,6 +612,7 @@ struct X121XCAConditions
//
ArraySetAsSeries(kiBuffer, true);
ArraySetAsSeries(tkiBuffer, true);
ArraySetAsSeries(sHHBuffer, true);
ArraySetAsSeries(sLLBuffer, true);
ArraySetAsSeries(mHHBuffer, true);
@@ -602,6 +627,7 @@ struct X121XCAConditions
ArraySetAsSeries(trendBuffer, true);
ArraySetAsSeries(kiStateBuffer, true);
ArraySetAsSeries(supportBuffer, true);
ArraySetAsSeries(tkiStateBuffer, true);
ArraySetAsSeries(swingLowBuffer, true);
ArraySetAsSeries(swingHighBuffer, true);
ArraySetAsSeries(resistanceBuffer, true);
@@ -630,6 +656,21 @@ struct X121XCAConditions
isKISwitchedToBullish = false;
isKISwitchedToBearish = false;
//
// TKI ...
//
isTKIRejectUp = false;
isTKIRejectDown = false;
//
isTKIBullish = false;
isTKIBearish = false;
//
isTKISwitchedToBullish = false;
isTKISwitchedToBearish = false;
//
// SAR ...
@@ -794,6 +835,37 @@ struct X121XCAConditions
bearishScore += minScore;
}
//
// TKI ...
//
if (isTKIBullish)
{
bullishScore += minScore;
}
if (isTKIRejectUp)
{
bullishScore += minScore;
}
if (isTKISwitchedToBullish)
{
bullishScore += minScore;
}
//
if (isTKIBearish)
{
bearishScore += minScore;
}
if (isTKIRejectDown)
{
bearishScore += minScore;
}
if (isTKISwitchedToBearish)
{
bearishScore += minScore;
}
//
// SAR ...
@@ -1058,6 +1130,12 @@ struct X121XCAConditions
ToString("isKIBearish", isKIBearish, ignoreFalseConditions, separator) +
ToString("isKISwitchedToBullish", isKISwitchedToBullish, ignoreFalseConditions, separator) +
ToString("isKISwitchedToBearish", isKISwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isTKIRejectUp", isTKIRejectUp, ignoreFalseConditions, separator) +
ToString("isTKIRejectDown", isTKIRejectDown, ignoreFalseConditions, separator) +
ToString("isTKIBullish", isTKIBullish, ignoreFalseConditions, separator) +
ToString("isTKIBearish", isTKIBearish, ignoreFalseConditions, separator) +
ToString("isTKISwitchedToBullish", isTKISwitchedToBullish, ignoreFalseConditions, separator) +
ToString("isTKISwitchedToBearish", isTKISwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) +
ToString("isSarBearish", isSarBearish, ignoreFalseConditions, separator) +
ToString("isSarSwitchedToBullish", isSarSwitchedToBullish, ignoreFalseConditions, separator) +
@@ -1168,6 +1246,7 @@ class XCX121XCAHelper : public XCBaseHelper
//
Clean(kiBuffer);
Clean(tkiBuffer);
Clean(sHHBuffer);
Clean(sLLBuffer);
Clean(mHHBuffer);
@@ -1182,6 +1261,7 @@ class XCX121XCAHelper : public XCBaseHelper
Clean(trendBuffer);
Clean(kiStateBuffer);
Clean(supportBuffer);
Clean(tkiStateBuffer);
Clean(swingLowBuffer);
Clean(swingHighBuffer);
Clean(resistanceBuffer);
@@ -1217,6 +1297,7 @@ class XCX121XCAHelper : public XCBaseHelper
//
ArraySetAsSeries(kiBuffer, true);
ArraySetAsSeries(tkiBuffer, true);
ArraySetAsSeries(sHHBuffer, true);
ArraySetAsSeries(sLLBuffer, true);
ArraySetAsSeries(mHHBuffer, true);
@@ -1231,6 +1312,7 @@ class XCX121XCAHelper : public XCBaseHelper
ArraySetAsSeries(trendBuffer, true);
ArraySetAsSeries(kiStateBuffer, true);
ArraySetAsSeries(supportBuffer, true);
ArraySetAsSeries(tkiStateBuffer, true);
ArraySetAsSeries(swingLowBuffer, true);
ArraySetAsSeries(swingHighBuffer, true);
ArraySetAsSeries(resistanceBuffer, true);
@@ -1283,6 +1365,7 @@ class XCX121XCAHelper : public XCBaseHelper
mInputs.startCalculationForLastBars,
mInputs.showSar,
mInputs.showKI,
mInputs.showTKI,
mInputs.showTrend,
mInputs.showSwings,
mInputs.showFiboLevel1,
@@ -1443,6 +1526,110 @@ class XCX121XCAHelper : public XCBaseHelper
);
}
//
// TKI ...
//
double GetTKI(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(tkiBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return tkiBuffer[barIndex];
}
//
int CopyTKI(
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,
tkiBuffer,
buffer,
forceClean
//
);
}
//
// TKI STATE ...
//
double GetTKIState(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(tkiStateBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return tkiStateBuffer[barIndex];
}
//
int CopyTKIState(
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,
tkiStateBuffer,
buffer,
forceClean
//
);
}
//
// SHORT ...
@@ -2688,6 +2875,20 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.kiStateBuffer //
);
//
CopyTKI(
zIndex,
loopback,
conditions.tkiBuffer //
);
//
CopyTKIState(
zIndex,
loopback,
conditions.tkiStateBuffer //
);
//
CopySHH(
zIndex,
@@ -2897,6 +3098,47 @@ class XCX121XCAHelper : public XCBaseHelper
bool isKISwitchedToBearish = isKIBearish &&
!isKIBearishPrev;
//
// TKI ...
//
double cTKI = conditions.tkiBuffer[cIDX];
double pTKI = conditions.tkiBuffer[pIDX];
double p2TKI = conditions.tkiBuffer[p2IDX];
//
double cTKIState = conditions.tkiStateBuffer[cIDX];
double pTKIState = conditions.tkiStateBuffer[pIDX];
double p2TKIState = conditions.tkiStateBuffer[p2IDX];
//
bool isTKIRejectUp = cBar.IsRejected(
cTKI,
X_DIRECTION_BULLISH,
false,
false //
);
bool isTKIRejectDown = cBar.IsRejected(
cTKI,
X_DIRECTION_BEARISH,
false,
false //
);
//
bool isTKIBullish = cTKIState > 0;
bool isTKIBullishPrev = pTKIState > 0;
//
bool isTKIBearish = cTKIState < 0;
bool isTKIBearishPrev = pTKIState < 0;
//
bool isTKISwitchedToBullish = isTKIBullish &&
!isTKIBullishPrev;
bool isTKISwitchedToBearish = isTKIBearish &&
!isTKIBearishPrev;
//
// SAR ...
@@ -3107,8 +3349,11 @@ class XCX121XCAHelper : public XCBaseHelper
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.isKIRejectDown = isKIRejectDown;
@@ -3118,6 +3363,7 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isValeOverLast = isValeOverLast;
conditions.isTrendBullish = isTrendBullish;
conditions.isTrendBearish = isTrendBearish;
conditions.isTKIRejectDown = isTKIRejectDown;
conditions.isPeakUnderLast = isPeakUnderLast;
conditions.isValeUnderLast = isValeUnderLast;
conditions.isTrendRejectUp = isTrendRejectUp;
@@ -3142,6 +3388,8 @@ class XCX121XCAHelper : public XCBaseHelper
conditions.isKISwitchedToBearish = isKISwitchedToBearish;
conditions.isLastSwingLowBreaked = isLastSwingLowBreaked;
conditions.isSwingHighSameAsPeak = isSwingHighSameAsPeak;
conditions.isTKISwitchedToBullish = isTKISwitchedToBullish;
conditions.isTKISwitchedToBearish = isTKISwitchedToBearish;
conditions.isLastSwingLowRejected = isLastSwingLowRejected;
conditions.isSarSwitchedToBullish = isSarSwitchedToBullish;
conditions.isSarSwitchedToBearish = isSarSwitchedToBearish;
@@ -3180,6 +3428,7 @@ class XCX121XCAHelper : public XCBaseHelper
//
// Buffers ...
double kiBuffer[];
double tkiBuffer[];
double sHHBuffer[];
double sLLBuffer[];
double mHHBuffer[];
@@ -3194,6 +3443,7 @@ class XCX121XCAHelper : public XCBaseHelper
double trendBuffer[];
double kiStateBuffer[];
double supportBuffer[];
double tkiStateBuffer[];
double swingLowBuffer[];
double swingHighBuffer[];
double resistanceBuffer[];
@@ -3226,6 +3476,15 @@ class XCX121XCAHelper : public XCBaseHelper
kiBuffer //
);
//
CopyBuffer(
mHandler,
X121_XCA_TKI_LINE,
barIndex,
maxRequiredBars,
tkiBuffer //
);
//
CopyBuffer(
mHandler,
@@ -3343,6 +3602,15 @@ class XCX121XCAHelper : public XCBaseHelper
kiStateBuffer //
);
//
CopyBuffer(
mHandler,
X121_XCA_TKI_STATE_LINE,
barIndex,
maxRequiredBars,
tkiStateBuffer //
);
//
CopyBuffer(
mHandler,
@@ -3445,6 +3713,12 @@ class XCX121XCAHelper : public XCBaseHelper
maxAllowed //
);
//
CleanupArray(
tkiBuffer,
maxAllowed //
);
//
CleanupArray(
sHHBuffer,
@@ -3523,6 +3797,12 @@ class XCX121XCAHelper : public XCBaseHelper
maxAllowed //
);
//
CleanupArray(
tkiStateBuffer,
maxAllowed //
);
//
CleanupArray(
supportBuffer,