attach conditions to x121 conditions ...

This commit is contained in:
2024-12-08 11:44:32 +03:30
parent 95c7804be5
commit 7cef619800
9 changed files with 9050 additions and 3666 deletions
+612 -4
View File
@@ -76,6 +76,15 @@ enum ENUM_X121_BUFFERS
X121_VALID_VALES_LINE = 38,
};
//
enum ENUM_XVWAP_STATES
{
//
XVWAP_STATE_BULLISH = 1,
XVWAP_STATE_BEARISH = 2,
XVWAP_STATE_NEUTURAL = 3,
};
//
// Inputs ...
struct X121Inputs
@@ -507,6 +516,114 @@ struct X121Conditions
double validPeaksBuffer[];
double validValesBuffer[];
//
// Conditions ...
//
// XSAR ...
//
bool isSarBullish;
bool isSarBearish;
//
bool isSarSwitchedBullish;
bool isSarSwitchedBearish;
//
// XPV ...
//
bool isNewPeak;
bool isNewPeakOverLast;
bool isNewPeakUnderLast;
//
bool isNewVale;
bool isNewValeOverLast;
bool isNewValeUnderLast;
//
// XVWAP ...
//
bool isVWapFastBullish;
bool isVWapFastBearish;
bool isVWapFastNeutural;
//
bool isVWapMidBullish;
bool isVWapMidBearish;
bool isVWapMidNeutural;
//
bool isVWapSlowBullish;
bool isVWapSlowBearish;
bool isVWapSlowNeutural;
//
bool isVWapFastOverMid;
bool isVWapMidOverSlow;
//
bool isVWapFastUnderMid;
bool isVWapMidUnderSlow;
//
bool isVWapBullishState;
bool isVWapBearishState;
bool isVWapNeuturalState;
//
bool isVWapBullishOrdered;
bool isVWapBearishOrdered;
//
bool isVWapSwitchedToBullishOrdered;
bool isVWapSwitchedToBearishOrdered;
//
bool isVWapSwitchedToBullishState;
bool isVWapSwitchedToBearishState;
bool isVWapSwitchedToNeuturalState;
//
// XDON ...
//
// bool isCloseLower
//
// XFIBONACCI ...
//
bool isOerFib1;
bool isOerFib2;
bool isOerFib3;
bool isOerFib4;
bool isOerFib5;
//
bool isUnderFib1;
bool isUnderFib2;
bool isUnderFib3;
bool isUnderFib4;
bool isUnderFib5;
//
bool isCloseOerFib1;
bool isCloseOerFib2;
bool isCloseOerFib3;
bool isCloseOerFib4;
bool isCloseOerFib5;
//
bool isCloseUnderFib1;
bool isCloseUnderFib2;
bool isCloseUnderFib3;
bool isCloseUnderFib4;
bool isCloseUnderFib5;
//
// Constructor ...
X121Conditions()
@@ -606,6 +723,111 @@ struct X121Conditions
ArraySetAsSeries(vwapSlowStateBuffer, true);
ArraySetAsSeries(validPeaksBuffer, true);
ArraySetAsSeries(validValesBuffer, true);
//
// Conditions ...
//
// XSAR ...
//
isSarBullish = false;
isSarBearish = false;
//
isSarSwitchedBullish = false;
isSarSwitchedBearish = false;
//
// XPV ...
//
isNewPeak = false;
isNewPeakOverLast = false;
isNewPeakUnderLast = false;
//
isNewVale = false;
isNewValeOverLast = false;
isNewValeUnderLast = false;
//
// XVWAP ...
//
isVWapFastBullish = false;
isVWapFastBearish = false;
isVWapFastNeutural = false;
//
isVWapMidBullish = false;
isVWapMidBearish = false;
isVWapMidNeutural = false;
//
isVWapSlowBullish = false;
isVWapSlowBearish = false;
isVWapSlowNeutural = false;
//
isVWapFastOverMid = false;
isVWapMidOverSlow = false;
//
isVWapFastUnderMid = false;
isVWapMidUnderSlow = false;
//
isVWapBullishState = false;
isVWapBearishState = false;
isVWapNeuturalState = false;
//
isVWapBullishOrdered = false;
isVWapBearishOrdered = false;
//
isVWapSwitchedToBullishOrdered = false;
isVWapSwitchedToBearishOrdered = false;
//
isVWapSwitchedToBullishState = false;
isVWapSwitchedToBearishState = false;
isVWapSwitchedToNeuturalState = false;
//
// XDON ...
//
// XFIBONACCI ...
//
isOerFib1 = false;
isOerFib2 = false;
isOerFib3 = false;
isOerFib4 = false;
isOerFib5 = false;
//
isUnderFib1 = false;
isUnderFib2 = false;
isUnderFib3 = false;
isUnderFib4 = false;
isUnderFib5 = false;
//
isCloseOerFib1 = false;
isCloseOerFib2 = false;
isCloseOerFib3 = false;
isCloseOerFib4 = false;
isCloseOerFib5 = false;
//
isCloseUnderFib1 = false;
isCloseUnderFib2 = false;
isCloseUnderFib3 = false;
isCloseUnderFib4 = false;
isCloseUnderFib5 = false;
}
/**
@@ -677,7 +899,72 @@ struct X121Conditions
//
// TODO: Implement this if required ...
string conditionsStr = "";
string conditionsStr =
//
// XSAR ...
ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) +
ToString("isSarBearish", isSarBearish, ignoreFalseConditions, separator) +
ToString("isSarSwitchedBullish", isSarSwitchedBullish, ignoreFalseConditions, separator) +
ToString("isSarSwitchedBearish", isSarSwitchedBearish, ignoreFalseConditions, separator) +
//
// XPV ...
ToString("isNewPeak", isNewPeak, ignoreFalseConditions, separator) +
ToString("isNewPeakOverLast", isNewPeakOverLast, ignoreFalseConditions, separator) +
ToString("isNewPeakUnderLast", isNewPeakUnderLast, ignoreFalseConditions, separator) +
ToString("isNewVale", isNewVale, ignoreFalseConditions, separator) +
ToString("isNewValeOverLast", isNewValeOverLast, ignoreFalseConditions, separator) +
ToString("isNewValeUnderLast", isNewValeUnderLast, ignoreFalseConditions, separator) +
//
// XVWAP ...
ToString("isVWapFastBullish", isVWapFastBullish, ignoreFalseConditions, separator) +
ToString("isVWapFastBearish", isVWapFastBearish, ignoreFalseConditions, separator) +
ToString("isVWapFastNeutural", isVWapFastNeutural, ignoreFalseConditions, separator) +
ToString("isVWapMidBullish", isVWapMidBullish, ignoreFalseConditions, separator) +
ToString("isVWapMidBearish", isVWapMidBearish, ignoreFalseConditions, separator) +
ToString("isVWapMidNeutural", isVWapMidNeutural, ignoreFalseConditions, separator) +
ToString("isVWapSlowBullish", isVWapSlowBullish, ignoreFalseConditions, separator) +
ToString("isVWapSlowBearish", isVWapSlowBearish, ignoreFalseConditions, separator) +
ToString("isVWapSlowNeutural", isVWapSlowNeutural, ignoreFalseConditions, separator) +
ToString("isVWapFastOverMid", isVWapFastOverMid, ignoreFalseConditions, separator) +
ToString("isVWapMidOverSlow", isVWapMidOverSlow, ignoreFalseConditions, separator) +
ToString("isVWapFastUnderMid", isVWapFastUnderMid, ignoreFalseConditions, separator) +
ToString("isVWapMidUnderSlow", isVWapMidUnderSlow, ignoreFalseConditions, separator) +
ToString("isVWapBullishState", isVWapBullishState, ignoreFalseConditions, separator) +
ToString("isVWapBearishState", isVWapBearishState, ignoreFalseConditions, separator) +
ToString("isVWapNeuturalState", isVWapNeuturalState, ignoreFalseConditions, separator) +
ToString("isVWapBullishOrdered", isVWapBullishOrdered, ignoreFalseConditions, separator) +
ToString("isVWapBearishOrdered", isVWapBearishOrdered, ignoreFalseConditions, separator) +
ToString("isVWapSwitchedToBullishOrdered", isVWapSwitchedToBullishOrdered, ignoreFalseConditions, separator) +
ToString("isVWapSwitchedToBearishOrdered", isVWapSwitchedToBearishOrdered, ignoreFalseConditions, separator) +
ToString("isVWapSwitchedToBullishState", isVWapSwitchedToBullishState, ignoreFalseConditions, separator) +
ToString("isVWapSwitchedToBearishState", isVWapSwitchedToBearishState, ignoreFalseConditions, separator) +
ToString("isVWapSwitchedToNeuturalState", isVWapSwitchedToNeuturalState, ignoreFalseConditions, separator) +
//
// XFIBONACCI ...
ToString("isOerFib1", isOerFib1, ignoreFalseConditions, separator) +
ToString("isOerFib2", isOerFib2, ignoreFalseConditions, separator) +
ToString("isOerFib3", isOerFib3, ignoreFalseConditions, separator) +
ToString("isOerFib4", isOerFib4, ignoreFalseConditions, separator) +
ToString("isOerFib5", isOerFib5, ignoreFalseConditions, separator) +
ToString("isUnderFib1", isUnderFib1, ignoreFalseConditions, separator) +
ToString("isUnderFib2", isUnderFib2, ignoreFalseConditions, separator) +
ToString("isUnderFib3", isUnderFib3, ignoreFalseConditions, separator) +
ToString("isUnderFib4", isUnderFib4, ignoreFalseConditions, separator) +
ToString("isUnderFib5", isUnderFib5, ignoreFalseConditions, separator) +
ToString("isCloseOerFib1", isCloseOerFib1, ignoreFalseConditions, separator) +
ToString("isCloseOerFib2", isCloseOerFib2, ignoreFalseConditions, separator) +
ToString("isCloseOerFib3", isCloseOerFib3, ignoreFalseConditions, separator) +
ToString("isCloseOerFib4", isCloseOerFib4, ignoreFalseConditions, separator) +
ToString("isCloseOerFib5", isCloseOerFib5, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib1", isCloseUnderFib1, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib2", isCloseUnderFib2, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib3", isCloseUnderFib3, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib4", isCloseUnderFib4, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib5", isCloseUnderFib5, ignoreFalseConditions, separator) +
//
""
//
;
//
result =
@@ -2169,6 +2456,61 @@ class XCX121Helper : public XCBaseHelper
);
}
//
// Converts to State ...
ENUM_XVWAP_STATES ToVWAPState(double value)
{
//
ENUM_XVWAP_STATES result =
value == 1
? XVWAP_STATE_BULLISH
: value == 2
? XVWAP_STATE_BEARISH
: XVWAP_STATE_NEUTURAL;
//
return result;
}
//
bool IsVWAPBullish(double value)
{
//
bool result = false;
//
result = ToVWAPState(value) == XVWAP_STATE_BULLISH;
//
return result;
}
//
bool IsVWAPBearish(double value)
{
//
bool result = false;
//
result = ToVWAPState(value) == XVWAP_STATE_BEARISH;
//
return result;
}
//
bool IsVWAPNeutural(double value)
{
//
bool result = false;
//
result = ToVWAPState(value) == XVWAP_STATE_NEUTURAL;
//
return result;
}
//
// XDON ...
@@ -2868,8 +3210,8 @@ class XCX121Helper : public XCBaseHelper
bool GetConditions(
X121Conditions &conditions, //
int barIndex = 0, //
int loopback = 5 //
int barIndex = 0, //
int loopback = 5 //
)
{
//
@@ -2895,6 +3237,42 @@ class XCX121Helper : public XCBaseHelper
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
XOHCL zBar;
result = zBar.Init(
mSymbol,
mPeriod,
zIndex //
);
if (!result)
{
return result;
}
//
XOHCL cBar;
result = cBar.Init(
mSymbol,
mPeriod,
cIndex //
);
if (!result)
{
return result;
}
//
XOHCL pBar;
result = pBar.Init(
mSymbol,
mPeriod,
pIndex //
);
if (!result)
{
return result;
}
//
// Buffers ...
@@ -3152,7 +3530,237 @@ class XCX121Helper : public XCBaseHelper
//
// Conditions ...
// TODO: Implement this if Required ...
//
// XSAR ...
//
bool isSarBullish = conditions.sarBuffer[cIndex] < cBar.low;
bool isSarBullishPrev = conditions.sarBuffer[pIndex] < pBar.low;
//
bool isSarBearish = conditions.sarBuffer[cIndex] > cBar.high;
bool isSarBearishPrev = conditions.sarBuffer[pIndex] > pBar.high;
//
bool isSarSwitchedBullish = isSarBullish &&
!isSarBullishPrev;
bool isSarSwitchedBearish = isSarBearish &&
!isSarBearishPrev;
//
// XPV ...
//
bool isNewPeak = conditions.peaksBuffer[cIndex] != conditions.peaksBuffer[pIndex];
bool isNewPeakOverLast = isNewPeak &&
conditions.peaksBuffer[cIndex] > conditions.peaksBuffer[pIndex];
bool isNewPeakUnderLast = isNewPeak &&
conditions.peaksBuffer[cIndex] < conditions.peaksBuffer[pIndex];
//
bool isNewVale = conditions.valesBuffer[cIndex] != conditions.valesBuffer[pIndex];
bool isNewValeOverLast = isNewVale &&
conditions.valesBuffer[cIndex] > conditions.valesBuffer[pIndex];
bool isNewValeUnderLast = isNewVale &&
conditions.valesBuffer[cIndex] < conditions.valesBuffer[pIndex];
//
// XVWAP ...
//
bool isVWapFastBullish = IsVWAPBullish(conditions.vwapFastStateBuffer[cIndex]);
bool isVWapFastBullishPrev = IsVWAPBullish(conditions.vwapFastStateBuffer[pIndex]);
//
bool isVWapFastBearish = IsVWAPBearish(conditions.vwapFastStateBuffer[cIndex]);
bool isVWapFastBearishPrev = IsVWAPBearish(conditions.vwapFastStateBuffer[pIndex]);
//
bool isVWapFastNeutural = IsVWAPNeutural(conditions.vwapFastStateBuffer[cIndex]);
bool isVWapFastNeuturalPrev = IsVWAPNeutural(conditions.vwapFastStateBuffer[pIndex]);
//
bool isVWapMidBullish = IsVWAPBullish(conditions.vwapMidStateBuffer[cIndex]);
bool isVWapMidBullishPrev = IsVWAPBullish(conditions.vwapMidStateBuffer[pIndex]);
//
bool isVWapMidBearish = IsVWAPBearish(conditions.vwapMidStateBuffer[cIndex]);
bool isVWapMidBearishPrev = IsVWAPBearish(conditions.vwapMidStateBuffer[pIndex]);
//
bool isVWapMidNeutural = IsVWAPNeutural(conditions.vwapMidStateBuffer[cIndex]);
bool isVWapMidNeuturalPrev = IsVWAPNeutural(conditions.vwapMidStateBuffer[pIndex]);
//
bool isVWapSlowBullish = IsVWAPBullish(conditions.vwapSlowStateBuffer[cIndex]);
bool isVWapSlowBullishPrev = IsVWAPBullish(conditions.vwapSlowStateBuffer[pIndex]);
//
bool isVWapSlowBearish = IsVWAPBearish(conditions.vwapSlowStateBuffer[cIndex]);
bool isVWapSlowBearishPrev = IsVWAPBearish(conditions.vwapSlowStateBuffer[pIndex]);
//
bool isVWapSlowNeutural = IsVWAPNeutural(conditions.vwapSlowStateBuffer[cIndex]);
bool isVWapSlowNeuturalPrev = IsVWAPNeutural(conditions.vwapSlowStateBuffer[pIndex]);
//
bool isVWapFastOverMid = conditions.vwapFastBuffer[cIndex] > conditions.vwapMidBuffer[cIndex];
bool isVWapFastOverMidPrev = conditions.vwapFastBuffer[pIndex] > conditions.vwapMidBuffer[pIndex];
//
bool isVWapMidOverSlow = conditions.vwapMidBuffer[cIndex] > conditions.vwapSlowBuffer[cIndex];
bool isVWapMidOverSlowPrev = conditions.vwapMidBuffer[pIndex] > conditions.vwapSlowBuffer[pIndex];
//
bool isVWapFastUnderMid = conditions.vwapFastBuffer[cIndex] < conditions.vwapMidBuffer[cIndex];
bool isVWapFastUnderMidPrev = conditions.vwapFastBuffer[pIndex] < conditions.vwapMidBuffer[pIndex];
//
bool isVWapMidUnderSlow = conditions.vwapMidBuffer[cIndex] < conditions.vwapSlowBuffer[cIndex];
bool isVWapMidUnderSlowPrev = conditions.vwapMidBuffer[pIndex] < conditions.vwapSlowBuffer[pIndex];
//
bool isVWapBullishState = isVWapFastBullish &&
isVWapMidBullish &&
isVWapSlowBullish;
bool isVWapBullishStatePrev = isVWapFastBullishPrev &&
isVWapMidBullishPrev &&
isVWapSlowBullishPrev;
//
bool isVWapBearishState = isVWapFastBearish &&
isVWapMidBearish &&
isVWapSlowBearish;
bool isVWapBearishStatePrev = isVWapFastBearishPrev &&
isVWapMidBearishPrev &&
isVWapSlowBearishPrev;
//
bool isVWapNeuturalState = isVWapFastNeutural &&
isVWapMidNeutural &&
isVWapSlowNeutural;
bool isVWapNeuturalStatePrev = isVWapFastNeuturalPrev &&
isVWapMidNeuturalPrev &&
isVWapSlowNeuturalPrev;
//
bool isVWapBullishOrdered = isVWapFastOverMid &&
isVWapMidOverSlow;
bool isVWapBullishOrderedPrev = isVWapFastOverMidPrev &&
isVWapMidOverSlowPrev;
//
bool isVWapBearishOrdered = isVWapFastUnderMid &&
isVWapMidUnderSlow;
bool isVWapBearishOrderedPrev = isVWapFastUnderMidPrev &&
isVWapMidUnderSlowPrev;
//
bool isVWapSwitchedToBullishOrdered = isVWapBullishOrdered &&
!isVWapBullishOrderedPrev;
bool isVWapSwitchedToBearishOrdered = isVWapBearishOrdered &&
!isVWapBearishOrderedPrev;
//
bool isVWapSwitchedToBullishState = isVWapBullishState &&
!isVWapBullishStatePrev;
bool isVWapSwitchedToBearishState = isVWapBearishState &&
!isVWapBearishStatePrev;
bool isVWapSwitchedToNeuturalState = isVWapNeuturalState &&
!isVWapNeuturalStatePrev;
//
// XDON ...
//
// XFIBONACCI ...
//
bool isOerFib1 = cBar.low > conditions.fl1Buffer[cIndex];
bool isOerFib2 = cBar.low > conditions.fl2Buffer[cIndex];
bool isOerFib3 = cBar.low > conditions.fl3Buffer[cIndex];
bool isOerFib4 = cBar.low > conditions.fl4Buffer[cIndex];
bool isOerFib5 = cBar.low > conditions.fl5Buffer[cIndex];
//
bool isUnderFib1 = cBar.high < conditions.fl1Buffer[cIndex];
bool isUnderFib2 = cBar.high < conditions.fl2Buffer[cIndex];
bool isUnderFib3 = cBar.high < conditions.fl3Buffer[cIndex];
bool isUnderFib4 = cBar.high < conditions.fl4Buffer[cIndex];
bool isUnderFib5 = cBar.high < conditions.fl5Buffer[cIndex];
//
bool isCloseOerFib1 = cBar.close > conditions.fl1Buffer[cIndex];
bool isCloseOerFib2 = cBar.close > conditions.fl2Buffer[cIndex];
bool isCloseOerFib3 = cBar.close > conditions.fl3Buffer[cIndex];
bool isCloseOerFib4 = cBar.close > conditions.fl4Buffer[cIndex];
bool isCloseOerFib5 = cBar.close > conditions.fl5Buffer[cIndex];
//
bool isCloseUnderFib1 = cBar.close < conditions.fl1Buffer[cIndex];
bool isCloseUnderFib2 = cBar.close < conditions.fl2Buffer[cIndex];
bool isCloseUnderFib3 = cBar.close < conditions.fl3Buffer[cIndex];
bool isCloseUnderFib4 = cBar.close < conditions.fl4Buffer[cIndex];
bool isCloseUnderFib5 = cBar.close < conditions.fl5Buffer[cIndex];
//
//
// Set ...
conditions.isSarBullish = isSarBullish;
conditions.isSarBearish = isSarBearish;
conditions.isSarSwitchedBullish = isSarSwitchedBullish;
conditions.isSarSwitchedBearish = isSarSwitchedBearish;
conditions.isNewPeak = isNewPeak;
conditions.isNewPeakOverLast = isNewPeakOverLast;
conditions.isNewPeakUnderLast = isNewPeakUnderLast;
conditions.isNewVale = isNewVale;
conditions.isNewValeOverLast = isNewValeOverLast;
conditions.isNewValeUnderLast = isNewValeUnderLast;
conditions.isVWapFastBullish = isVWapFastBullish;
conditions.isVWapFastBearish = isVWapFastBearish;
conditions.isVWapFastNeutural = isVWapFastNeutural;
conditions.isVWapMidBullish = isVWapMidBullish;
conditions.isVWapMidBearish = isVWapMidBearish;
conditions.isVWapMidNeutural = isVWapMidNeutural;
conditions.isVWapSlowBullish = isVWapSlowBullish;
conditions.isVWapSlowBearish = isVWapSlowBearish;
conditions.isVWapSlowNeutural = isVWapSlowNeutural;
conditions.isVWapFastOverMid = isVWapFastOverMid;
conditions.isVWapMidOverSlow = isVWapMidOverSlow;
conditions.isVWapFastUnderMid = isVWapFastUnderMid;
conditions.isVWapMidUnderSlow = isVWapMidUnderSlow;
conditions.isVWapBullishState = isVWapBullishState;
conditions.isVWapBearishState = isVWapBearishState;
conditions.isVWapNeuturalState = isVWapNeuturalState;
conditions.isVWapBullishOrdered = isVWapBullishOrdered;
conditions.isVWapBearishOrdered = isVWapBearishOrdered;
conditions.isVWapSwitchedToBullishOrdered = isVWapSwitchedToBullishOrdered;
conditions.isVWapSwitchedToBearishOrdered = isVWapSwitchedToBearishOrdered;
conditions.isVWapSwitchedToBullishState = isVWapSwitchedToBullishState;
conditions.isVWapSwitchedToBearishState = isVWapSwitchedToBearishState;
conditions.isVWapSwitchedToNeuturalState = isVWapSwitchedToNeuturalState;
conditions.isOerFib1 = isOerFib1;
conditions.isOerFib2 = isOerFib2;
conditions.isOerFib3 = isOerFib3;
conditions.isOerFib4 = isOerFib4;
conditions.isOerFib5 = isOerFib5;
conditions.isUnderFib1 = isUnderFib1;
conditions.isUnderFib2 = isUnderFib2;
conditions.isUnderFib3 = isUnderFib3;
conditions.isUnderFib4 = isUnderFib4;
conditions.isUnderFib5 = isUnderFib5;
conditions.isCloseOerFib1 = isCloseOerFib1;
conditions.isCloseOerFib2 = isCloseOerFib2;
conditions.isCloseOerFib3 = isCloseOerFib3;
conditions.isCloseOerFib4 = isCloseOerFib4;
conditions.isCloseOerFib5 = isCloseOerFib5;
conditions.isCloseUnderFib1 = isCloseUnderFib1;
conditions.isCloseUnderFib2 = isCloseUnderFib2;
conditions.isCloseUnderFib3 = isCloseUnderFib3;
conditions.isCloseUnderFib4 = isCloseUnderFib4;
conditions.isCloseUnderFib5 = isCloseUnderFib5;
//
return result;