last ...
This commit is contained in:
@@ -283,3 +283,37 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Method 1 ...
|
||||||
|
// VWap Switch Start ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool bullishMethod1 =
|
||||||
|
//
|
||||||
|
isSarBullish &&
|
||||||
|
isStrBullish &&
|
||||||
|
isSlopesBullish &&
|
||||||
|
hasBullishTrend &&
|
||||||
|
cBar.IsBullish() &&
|
||||||
|
isAtrBullishSlope &&
|
||||||
|
isPVBullishFormed &&
|
||||||
|
isRsiBullishFormed &&
|
||||||
|
isVWapBullishFormed
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool bearishMethod1 =
|
||||||
|
//
|
||||||
|
isSarBearish &&
|
||||||
|
isStrBearish &&
|
||||||
|
isSlopesBearish &&
|
||||||
|
hasBearishTrend &&
|
||||||
|
cBar.IsBearish() &&
|
||||||
|
isAtrBearishSlope &&
|
||||||
|
isPVBearishFormed &&
|
||||||
|
isRsiBearishFormed &&
|
||||||
|
isVWapBearishFormed
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|||||||
@@ -305,22 +305,22 @@ struct X121Conditions
|
|||||||
bool isStrSwitchedToBearish;
|
bool isStrSwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1Bullish;
|
bool isChe1Bullish;
|
||||||
bool isCHE1Bearish;
|
bool isChe1Bearish;
|
||||||
bool isCHE1SwitchedToBullish;
|
bool isChe1SwitchedToBullish;
|
||||||
bool isCHE1SwitchedToBearish;
|
bool isChe1SwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2Bullish;
|
bool isChe2Bullish;
|
||||||
bool isCHE2Bearish;
|
bool isChe2Bearish;
|
||||||
bool isCHE2SwitchedToBullish;
|
bool isChe2SwitchedToBullish;
|
||||||
bool isCHE2SwitchedToBearish;
|
bool isChe2SwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHEBullish;
|
bool isCheBullish;
|
||||||
bool isCHEBearish;
|
bool isCheBearish;
|
||||||
bool isCHESwitchedToBullish;
|
bool isCheSwitchedToBullish;
|
||||||
bool isCHESwitchedToBearish;
|
bool isCheSwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isVWapMidBullish;
|
bool isVWapMidBullish;
|
||||||
@@ -792,28 +792,28 @@ struct X121Conditions
|
|||||||
// CHE ...
|
// CHE ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE1Bullish = false;
|
isChe1Bullish = false;
|
||||||
isCHE1Bearish = false;
|
isChe1Bearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE1SwitchedToBullish = false;
|
isChe1SwitchedToBullish = false;
|
||||||
isCHE1SwitchedToBearish = false;
|
isChe1SwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE2Bullish = false;
|
isChe2Bullish = false;
|
||||||
isCHE2Bearish = false;
|
isChe2Bearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE2SwitchedToBullish = false;
|
isChe2SwitchedToBullish = false;
|
||||||
isCHE2SwitchedToBearish = false;
|
isChe2SwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHEBullish = false;
|
isCheBullish = false;
|
||||||
isCHEBearish = false;
|
isCheBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHESwitchedToBullish = false;
|
isCheSwitchedToBullish = false;
|
||||||
isCHESwitchedToBearish = false;
|
isCheSwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Complex Conditions ...
|
// Complex Conditions ...
|
||||||
@@ -1118,18 +1118,18 @@ struct X121Conditions
|
|||||||
"-----------------------" + separator +
|
"-----------------------" + separator +
|
||||||
"CHE ..." + separator +
|
"CHE ..." + separator +
|
||||||
"-----------------------" + separator +
|
"-----------------------" + separator +
|
||||||
ToString("isCHE1Bullish", isCHE1Bullish, ignoreFalseConditions, separator) +
|
ToString("isChe1Bullish", isChe1Bullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1Bearish", isCHE1Bearish, ignoreFalseConditions, separator) +
|
ToString("isChe1Bearish", isChe1Bearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1SwitchedToBullish", isCHE1SwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isChe1SwitchedToBullish", isChe1SwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1SwitchedToBearish", isCHE1SwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isChe1SwitchedToBearish", isChe1SwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2Bullish", isCHE2Bullish, ignoreFalseConditions, separator) +
|
ToString("isChe2Bullish", isChe2Bullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2Bearish", isCHE2Bearish, ignoreFalseConditions, separator) +
|
ToString("isChe2Bearish", isChe2Bearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2SwitchedToBullish", isCHE2SwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isChe2SwitchedToBullish", isChe2SwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2SwitchedToBearish", isCHE2SwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isChe2SwitchedToBearish", isChe2SwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHEBullish", isCHEBullish, ignoreFalseConditions, separator) +
|
ToString("isCheBullish", isCheBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHEBearish", isCHEBearish, ignoreFalseConditions, separator) +
|
ToString("isCheBearish", isCheBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHESwitchedToBullish", isCHESwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isCheSwitchedToBullish", isCheSwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHESwitchedToBearish", isCHESwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isCheSwitchedToBearish", isCheSwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
//
|
//
|
||||||
"-----------------------" + separator +
|
"-----------------------" + separator +
|
||||||
"Slopes ..." + separator +
|
"Slopes ..." + separator +
|
||||||
@@ -2010,18 +2010,18 @@ class XCX121Helper : public XCBase
|
|||||||
//
|
//
|
||||||
// Conditions ...
|
// Conditions ...
|
||||||
|
|
||||||
conditions.isCHEBullish = xcheConditions.isCHEBullish;
|
conditions.isCheBullish = xcheConditions.isCheBullish;
|
||||||
conditions.isCHEBearish = xcheConditions.isCHEBearish;
|
conditions.isCheBearish = xcheConditions.isCheBearish;
|
||||||
conditions.isCHE1Bullish = xcheConditions.isCHE1Bullish;
|
conditions.isChe1Bullish = xcheConditions.isChe1Bullish;
|
||||||
conditions.isCHE1Bearish = xcheConditions.isCHE1Bearish;
|
conditions.isChe1Bearish = xcheConditions.isChe1Bearish;
|
||||||
conditions.isCHE2Bullish = xcheConditions.isCHE2Bullish;
|
conditions.isChe2Bullish = xcheConditions.isChe2Bullish;
|
||||||
conditions.isCHE2Bearish = xcheConditions.isCHE2Bearish;
|
conditions.isChe2Bearish = xcheConditions.isChe2Bearish;
|
||||||
conditions.isCHESwitchedToBullish = xcheConditions.isCHESwitchedToBullish;
|
conditions.isCheSwitchedToBullish = xcheConditions.isCheSwitchedToBullish;
|
||||||
conditions.isCHESwitchedToBearish = xcheConditions.isCHESwitchedToBearish;
|
conditions.isCheSwitchedToBearish = xcheConditions.isCheSwitchedToBearish;
|
||||||
conditions.isCHE1SwitchedToBullish = xcheConditions.isCHE1SwitchedToBullish;
|
conditions.isChe1SwitchedToBullish = xcheConditions.isChe1SwitchedToBullish;
|
||||||
conditions.isCHE1SwitchedToBearish = xcheConditions.isCHE1SwitchedToBearish;
|
conditions.isChe1SwitchedToBearish = xcheConditions.isChe1SwitchedToBearish;
|
||||||
conditions.isCHE2SwitchedToBullish = xcheConditions.isCHE2SwitchedToBullish;
|
conditions.isChe2SwitchedToBullish = xcheConditions.isChe2SwitchedToBullish;
|
||||||
conditions.isCHE2SwitchedToBearish = xcheConditions.isCHE2SwitchedToBearish;
|
conditions.isChe2SwitchedToBearish = xcheConditions.isChe2SwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XDON ...
|
// XDON ...
|
||||||
|
|||||||
@@ -176,28 +176,28 @@ struct X121XCHEConditions
|
|||||||
// Conditions ...
|
// Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1Bullish;
|
bool isChe1Bullish;
|
||||||
bool isCHE1Bearish;
|
bool isChe1Bearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1SwitchedToBullish;
|
bool isChe1SwitchedToBullish;
|
||||||
bool isCHE1SwitchedToBearish;
|
bool isChe1SwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2Bullish;
|
bool isChe2Bullish;
|
||||||
bool isCHE2Bearish;
|
bool isChe2Bearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2SwitchedToBullish;
|
bool isChe2SwitchedToBullish;
|
||||||
bool isCHE2SwitchedToBearish;
|
bool isChe2SwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHEBullish;
|
bool isCheBullish;
|
||||||
bool isCHEBearish;
|
bool isCheBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHESwitchedToBullish;
|
bool isCheSwitchedToBullish;
|
||||||
bool isCHESwitchedToBearish;
|
bool isCheSwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
// bool isCloseLower
|
// bool isCloseLower
|
||||||
@@ -250,28 +250,28 @@ struct X121XCHEConditions
|
|||||||
// Conditions ...
|
// Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE1Bullish = false;
|
isChe1Bullish = false;
|
||||||
isCHE1Bearish = false;
|
isChe1Bearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE1SwitchedToBullish = false;
|
isChe1SwitchedToBullish = false;
|
||||||
isCHE1SwitchedToBearish = false;
|
isChe1SwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE2Bullish = false;
|
isChe2Bullish = false;
|
||||||
isCHE2Bearish = false;
|
isChe2Bearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHE2SwitchedToBullish = false;
|
isChe2SwitchedToBullish = false;
|
||||||
isCHE2SwitchedToBearish = false;
|
isChe2SwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHEBullish = false;
|
isCheBullish = false;
|
||||||
isCHEBearish = false;
|
isCheBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCHESwitchedToBullish = false;
|
isCheSwitchedToBullish = false;
|
||||||
isCHESwitchedToBearish = false;
|
isCheSwitchedToBearish = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XDON ...
|
// XDON ...
|
||||||
@@ -347,18 +347,18 @@ struct X121XCHEConditions
|
|||||||
//
|
//
|
||||||
string conditionsStr =
|
string conditionsStr =
|
||||||
//
|
//
|
||||||
ToString("isCHE1Bullish", isCHE1Bullish, ignoreFalseConditions, separator) +
|
ToString("isChe1Bullish", isChe1Bullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1Bearish", isCHE1Bearish, ignoreFalseConditions, separator) +
|
ToString("isChe1Bearish", isChe1Bearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1SwitchedToBullish", isCHE1SwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isChe1SwitchedToBullish", isChe1SwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE1SwitchedToBearish", isCHE1SwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isChe1SwitchedToBearish", isChe1SwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2Bullish", isCHE2Bullish, ignoreFalseConditions, separator) +
|
ToString("isChe2Bullish", isChe2Bullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2Bearish", isCHE2Bearish, ignoreFalseConditions, separator) +
|
ToString("isChe2Bearish", isChe2Bearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2SwitchedToBullish", isCHE2SwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isChe2SwitchedToBullish", isChe2SwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHE2SwitchedToBearish", isCHE2SwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isChe2SwitchedToBearish", isChe2SwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHEBullish", isCHEBullish, ignoreFalseConditions, separator) +
|
ToString("isCheBullish", isCheBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHEBearish", isCHEBearish, ignoreFalseConditions, separator) +
|
ToString("isCheBearish", isCheBearish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHESwitchedToBullish", isCHESwitchedToBullish, ignoreFalseConditions, separator) +
|
ToString("isCheSwitchedToBullish", isCheSwitchedToBullish, ignoreFalseConditions, separator) +
|
||||||
ToString("isCHESwitchedToBearish", isCHESwitchedToBearish, ignoreFalseConditions, separator) +
|
ToString("isCheSwitchedToBearish", isCheSwitchedToBearish, ignoreFalseConditions, separator) +
|
||||||
//
|
//
|
||||||
""
|
""
|
||||||
//
|
//
|
||||||
@@ -1044,72 +1044,72 @@ class XCX121XCHEHelper : public XCBaseHelper
|
|||||||
int pIDX = cIDX + 1;
|
int pIDX = cIDX + 1;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1Bullish = le1Buffer[cIDX] != EMPTY_VALUE &&
|
bool isChe1Bullish = le1Buffer[cIDX] != EMPTY_VALUE &&
|
||||||
se1Buffer[cIDX] == EMPTY_VALUE;
|
se1Buffer[cIDX] == EMPTY_VALUE;
|
||||||
bool isCHE1BullishPrev = le1Buffer[cIDX] != EMPTY_VALUE &&
|
bool isChe1BullishPrev = le1Buffer[cIDX] != EMPTY_VALUE &&
|
||||||
se1Buffer[pIDX] == EMPTY_VALUE;
|
se1Buffer[pIDX] == EMPTY_VALUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1Bearish = se1Buffer[cIDX] != EMPTY_VALUE &&
|
bool isChe1Bearish = se1Buffer[cIDX] != EMPTY_VALUE &&
|
||||||
le1Buffer[cIDX] == EMPTY_VALUE;
|
le1Buffer[cIDX] == EMPTY_VALUE;
|
||||||
bool isCHE1BearishPrev = se1Buffer[pIDX] != EMPTY_VALUE &&
|
bool isChe1BearishPrev = se1Buffer[pIDX] != EMPTY_VALUE &&
|
||||||
le1Buffer[pIDX] == EMPTY_VALUE;
|
le1Buffer[pIDX] == EMPTY_VALUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE1SwitchedToBullish = isCHE1Bullish &&
|
bool isChe1SwitchedToBullish = isChe1Bullish &&
|
||||||
!isCHE1BullishPrev;
|
!isChe1BullishPrev;
|
||||||
bool isCHE1SwitchedToBearish = isCHE1Bearish &&
|
bool isChe1SwitchedToBearish = isChe1Bearish &&
|
||||||
!isCHE1BearishPrev;
|
!isChe1BearishPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2Bullish = le2Buffer[cIDX] != EMPTY_VALUE &&
|
bool isChe2Bullish = le2Buffer[cIDX] != EMPTY_VALUE &&
|
||||||
se2Buffer[cIDX] == EMPTY_VALUE;
|
se2Buffer[cIDX] == EMPTY_VALUE;
|
||||||
bool isCHE2BullishPrev = le2Buffer[pIDX] != EMPTY_VALUE &&
|
bool isChe2BullishPrev = le2Buffer[pIDX] != EMPTY_VALUE &&
|
||||||
se2Buffer[pIDX] == EMPTY_VALUE;
|
se2Buffer[pIDX] == EMPTY_VALUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2Bearish = se2Buffer[cIDX] != EMPTY_VALUE &&
|
bool isChe2Bearish = se2Buffer[cIDX] != EMPTY_VALUE &&
|
||||||
le2Buffer[cIDX] == EMPTY_VALUE;
|
le2Buffer[cIDX] == EMPTY_VALUE;
|
||||||
bool isCHE2BearishPrev = se2Buffer[pIDX] != EMPTY_VALUE &&
|
bool isChe2BearishPrev = se2Buffer[pIDX] != EMPTY_VALUE &&
|
||||||
le2Buffer[pIDX] == EMPTY_VALUE;
|
le2Buffer[pIDX] == EMPTY_VALUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHE2SwitchedToBullish = isCHE2Bullish &&
|
bool isChe2SwitchedToBullish = isChe2Bullish &&
|
||||||
!isCHE2BullishPrev;
|
!isChe2BullishPrev;
|
||||||
bool isCHE2SwitchedToBearish = isCHE2Bearish &&
|
bool isChe2SwitchedToBearish = isChe2Bearish &&
|
||||||
!isCHE2BearishPrev;
|
!isChe2BearishPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHEBullish = isCHE1Bullish &&
|
bool isCheBullish = isChe1Bullish &&
|
||||||
isCHE2Bullish;
|
isChe2Bullish;
|
||||||
bool isCHEBullishPrev = isCHE1BullishPrev &&
|
bool isCheBullishPrev = isChe1BullishPrev &&
|
||||||
isCHE2BullishPrev;
|
isChe2BullishPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHEBearish = isCHE1Bearish &&
|
bool isCheBearish = isChe1Bearish &&
|
||||||
isCHE2Bearish;
|
isChe2Bearish;
|
||||||
bool isCHEBearishPrev = isCHE1BearishPrev &&
|
bool isCheBearishPrev = isChe1BearishPrev &&
|
||||||
isCHE2BearishPrev;
|
isChe2BearishPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCHESwitchedToBullish = isCHEBullish &&
|
bool isCheSwitchedToBullish = isCheBullish &&
|
||||||
!isCHEBullishPrev;
|
!isCheBullishPrev;
|
||||||
bool isCHESwitchedToBearish = isCHEBearish &&
|
bool isCheSwitchedToBearish = isCheBearish &&
|
||||||
!isCHEBearishPrev;
|
!isCheBearishPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
conditions.isCHE1Bullish = isCHE1Bullish;
|
conditions.isChe1Bullish = isChe1Bullish;
|
||||||
conditions.isCHE1Bearish = isCHE1Bearish;
|
conditions.isChe1Bearish = isChe1Bearish;
|
||||||
conditions.isCHE1SwitchedToBullish = isCHE1SwitchedToBullish;
|
conditions.isChe1SwitchedToBullish = isChe1SwitchedToBullish;
|
||||||
conditions.isCHE1SwitchedToBearish = isCHE1SwitchedToBearish;
|
conditions.isChe1SwitchedToBearish = isChe1SwitchedToBearish;
|
||||||
conditions.isCHE2Bullish = isCHE2Bullish;
|
conditions.isChe2Bullish = isChe2Bullish;
|
||||||
conditions.isCHE2Bearish = isCHE2Bearish;
|
conditions.isChe2Bearish = isChe2Bearish;
|
||||||
conditions.isCHE2SwitchedToBullish = isCHE2SwitchedToBullish;
|
conditions.isChe2SwitchedToBullish = isChe2SwitchedToBullish;
|
||||||
conditions.isCHE2SwitchedToBearish = isCHE2SwitchedToBearish;
|
conditions.isChe2SwitchedToBearish = isChe2SwitchedToBearish;
|
||||||
conditions.isCHEBullish = isCHEBullish;
|
conditions.isCheBullish = isCheBullish;
|
||||||
conditions.isCHEBearish = isCHEBearish;
|
conditions.isCheBearish = isCheBearish;
|
||||||
conditions.isCHESwitchedToBullish = isCHESwitchedToBullish;
|
conditions.isCheSwitchedToBullish = isCheSwitchedToBullish;
|
||||||
conditions.isCHESwitchedToBearish = isCHESwitchedToBearish;
|
conditions.isCheSwitchedToBearish = isCheSwitchedToBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -387,27 +387,13 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
XPOIState visionState = visionConditions.state;
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup Conditions ...
|
// Cycle X121Conditions ...
|
||||||
|
X121Conditions triggerXConditions = triggerConditions.x121Conditions;
|
||||||
//
|
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
|
||||||
// Waits for new Peak or Vale ...
|
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
|
||||||
|
X121Conditions verificationXConditions = verificationConditions.x121Conditions;
|
||||||
//
|
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
|
||||||
// Reading Previous Conditions ...
|
X121Conditions visionXConditions = visionConditions.x121Conditions;
|
||||||
ENUM_XPOI_EVENTS consolidationPoiEventsPrev[];
|
|
||||||
ENUM_X_CYCLE_EVENTS consolidationCycleEventsPrev[];
|
|
||||||
X121SMCCycleConditions consolidationConditionsPrev;
|
|
||||||
result = consolidationCycleHelper.GetConditions(
|
|
||||||
consolidationCycleEventsPrev,
|
|
||||||
consolidationPoiEventsPrev,
|
|
||||||
consolidationConditionsPrev,
|
|
||||||
cIndex,
|
|
||||||
loopback //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup Conditions ...
|
// Setup Conditions ...
|
||||||
@@ -430,7 +416,7 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
IsBearish(marketDir);
|
IsBearish(marketDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reading Bar State ...
|
// Detect Bar State ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Engulf ...
|
// Engulf ...
|
||||||
@@ -526,370 +512,11 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Read Slopes ...
|
// Detect Price Zone ...
|
||||||
double rsiSlope = decisionConditions.x121Conditions.rsiSlope;
|
|
||||||
double strSlope = decisionConditions.x121Conditions.strSlope;
|
|
||||||
double atrUpperSlope = decisionConditions.x121Conditions.atrUpperSlope;
|
|
||||||
double atrLowerSlope = decisionConditions.x121Conditions.atrLowerSlope;
|
|
||||||
double vwapFastSlope = decisionConditions.x121Conditions.vwapFastSlope;
|
|
||||||
double vwapMidSlope = decisionConditions.x121Conditions.vwapMidSlope;
|
|
||||||
double vwapSlowSlope = decisionConditions.x121Conditions.vwapSlowSlope;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isRsiSlopeBullish = decisionConditions.x121Conditions.isRsiSlopeBullish;
|
double pzPeak = decisionConditions.x121Conditions.peaksBuffer[1];
|
||||||
bool isStrSlopeBullish = decisionConditions.x121Conditions.isStrSlopeBullish;
|
double pzVale = decisionConditions.x121Conditions.valesBuffer[1];
|
||||||
bool isAtrUpperSlopeBullish = decisionConditions.x121Conditions.isAtrUpperSlopeBullish;
|
|
||||||
bool isAtrLowerSlopeBullish = decisionConditions.x121Conditions.isAtrLowerSlopeBullish;
|
|
||||||
bool isVwapFastSlopeBullish = decisionConditions.x121Conditions.isVwapFastSlopeBullish;
|
|
||||||
bool isVwapMidSlopeBullish = decisionConditions.x121Conditions.isVwapMidSlopeBullish;
|
|
||||||
bool isVwapSlowSlopeBullish = decisionConditions.x121Conditions.isVwapSlowSlopeBullish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isRsiSlopeBearish = decisionConditions.x121Conditions.isRsiSlopeBearish;
|
|
||||||
bool isStrSlopeBearish = decisionConditions.x121Conditions.isStrSlopeBearish;
|
|
||||||
bool isAtrUpperSlopeBearish = decisionConditions.x121Conditions.isAtrUpperSlopeBearish;
|
|
||||||
bool isAtrLowerSlopeBearish = decisionConditions.x121Conditions.isAtrLowerSlopeBearish;
|
|
||||||
bool isVwapFastSlopeBearish = decisionConditions.x121Conditions.isVwapFastSlopeBearish;
|
|
||||||
bool isVwapMidSlopeBearish = decisionConditions.x121Conditions.isVwapMidSlopeBearish;
|
|
||||||
bool isVwapSlowSlopeBearish = decisionConditions.x121Conditions.isVwapSlowSlopeBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSlopesBullish =
|
|
||||||
isRsiSlopeBullish &&
|
|
||||||
isVwapMidSlopeBullish &&
|
|
||||||
isAtrUpperSlopeBullish &&
|
|
||||||
isAtrLowerSlopeBullish &&
|
|
||||||
isVwapFastSlopeBullish &&
|
|
||||||
isVwapSlowSlopeBullish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSlopesBearish =
|
|
||||||
isRsiSlopeBearish &&
|
|
||||||
isVwapMidSlopeBearish &&
|
|
||||||
isAtrUpperSlopeBearish &&
|
|
||||||
isAtrLowerSlopeBearish &&
|
|
||||||
isVwapFastSlopeBearish &&
|
|
||||||
isVwapSlowSlopeBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
// RSI ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double rsiMult1 = 2;
|
|
||||||
double rsiMult2 = 2;
|
|
||||||
|
|
||||||
//
|
|
||||||
double rsi = decisionConditions.x121Conditions.rsiBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isRsiOverSold = decisionConditions.x121Conditions.isRsiOverSold;
|
|
||||||
bool isRsiOverBought = decisionConditions.x121Conditions.isRsiOverBought;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isRsiCrossedOverOverSold = decisionConditions.x121Conditions.isRsiCrossedOverOverSold;
|
|
||||||
bool isRsiCrossedUnderOverBought = decisionConditions.x121Conditions.isRsiCrossedUnderOverBought;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isRsiBullishFormed =
|
|
||||||
//
|
|
||||||
(rsiSlope > rsiMult2)
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
(rsiSlope > rsiMult1 &&
|
|
||||||
isRsiCrossedOverOverSold)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isRsiBearishFormed =
|
|
||||||
//
|
|
||||||
(rsiSlope < (-1 * rsiMult2))
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
(rsiSlope < (-1 * rsiMult1) &&
|
|
||||||
isRsiCrossedUnderOverBought)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SAR ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double sar = decisionConditions.x121Conditions.sarBuffer[1];
|
|
||||||
double sarPrev = decisionConditions.x121Conditions.sarBuffer[2];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarBullish = decisionConditions.x121Conditions.isSarBullish;
|
|
||||||
bool isSarBearish = decisionConditions.x121Conditions.isSarBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarSwitchedToBullish = decisionConditions.x121Conditions.isSarSwitchedToBullish;
|
|
||||||
bool isSarSwitchedToBearish = decisionConditions.x121Conditions.isSarSwitchedToBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isPrevSarBreakedUp = IsBarBreak(
|
|
||||||
sarPrev,
|
|
||||||
X_DIRECTION_BULLISH,
|
|
||||||
cBar //
|
|
||||||
);
|
|
||||||
bool isPrevSarBreakedDown = IsBarBreak(
|
|
||||||
sarPrev,
|
|
||||||
X_DIRECTION_BEARISH,
|
|
||||||
cBar //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// ATR ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double atr = decisionConditions.x121Conditions.atrBuffer[1];
|
|
||||||
double atrUpper = decisionConditions.x121Conditions.atrUpperBuffer[1];
|
|
||||||
double atrLower = decisionConditions.x121Conditions.atrLowerBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isAtrUpperBullishSlope = atrUpperSlope > 0;
|
|
||||||
bool isAtrLowerBullishSlope = atrLowerSlope > 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isAtrUpperBearishSlope = atrUpperSlope < 0;
|
|
||||||
bool isAtrLowerBearishSlope = atrLowerSlope < 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isAtrBullishSlope = isAtrUpperBullishSlope &&
|
|
||||||
isAtrLowerBullishSlope;
|
|
||||||
bool isAtrBearishSlope = isAtrUpperBearishSlope &&
|
|
||||||
isAtrLowerBearishSlope;
|
|
||||||
|
|
||||||
//
|
|
||||||
// STR ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double str = decisionConditions.x121Conditions.strBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isStrBullish = decisionConditions.x121Conditions.isStrBullish;
|
|
||||||
bool isStrBearish = decisionConditions.x121Conditions.isStrBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isStrSwitchedToBullish = decisionConditions.x121Conditions.isStrSwitchedToBullish;
|
|
||||||
bool isStrSwitchedToBearish = decisionConditions.x121Conditions.isStrSwitchedToBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
// PV ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double peak = decisionConditions.x121Conditions.peaksBuffer[1];
|
|
||||||
double vale = decisionConditions.x121Conditions.valesBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isPeakIncreasing = IsIncreasing(decisionConditions.x121Conditions.peaksBuffer);
|
|
||||||
bool isPeakDecreasing = IsDecreasing(decisionConditions.x121Conditions.peaksBuffer);
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isValeIncreasing = IsIncreasing(decisionConditions.x121Conditions.valesBuffer);
|
|
||||||
bool isValeDecreasing = IsDecreasing(decisionConditions.x121Conditions.valesBuffer);
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isPVIncreasing = (isPeakIncreasing &&
|
|
||||||
isValeIncreasing) &&
|
|
||||||
!(isPeakDecreasing &&
|
|
||||||
isValeDecreasing);
|
|
||||||
bool isPVDecreasing = (isPeakDecreasing &&
|
|
||||||
isValeDecreasing) &&
|
|
||||||
!(isPeakIncreasing &&
|
|
||||||
isValeIncreasing);
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isNewPeak = decisionConditions.x121Conditions.isNewPeak;
|
|
||||||
bool isNewPeakOverLast = decisionConditions.x121Conditions.isNewPeakOverLast;
|
|
||||||
bool isNewPeakUnderLast = decisionConditions.x121Conditions.isNewPeakUnderLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isNewVale = decisionConditions.x121Conditions.isNewVale;
|
|
||||||
bool isNewValeOverLast = decisionConditions.x121Conditions.isNewValeOverLast;
|
|
||||||
bool isNewValeUnderLast = decisionConditions.x121Conditions.isNewValeUnderLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isPVBullishFormed =
|
|
||||||
isPVIncreasing ||
|
|
||||||
isNewPeakOverLast ||
|
|
||||||
isNewValeOverLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isPVBearishFormed =
|
|
||||||
isPVDecreasing ||
|
|
||||||
isNewPeakUnderLast ||
|
|
||||||
isNewValeUnderLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
// VWAP ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapFastOverMid = decisionConditions.x121Conditions.isVWapFastOverMid;
|
|
||||||
bool isVWapFastUnderMid = decisionConditions.x121Conditions.isVWapFastUnderMid;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBullishState = decisionConditions.x121Conditions.isVWapBullishState;
|
|
||||||
bool isVWapBearishState = decisionConditions.x121Conditions.isVWapBearishState;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapSwitchedToBullishState = decisionConditions.x121Conditions.isVWapSwitchedToBullishState;
|
|
||||||
bool isVWapSwitchedToBearishState = decisionConditions.x121Conditions.isVWapSwitchedToBearishState;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBullishOrdered = decisionConditions.x121Conditions.isVWapBullishOrdered;
|
|
||||||
bool isVWapBearishOrdered = decisionConditions.x121Conditions.isVWapBearishOrdered;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapSwitchedToBullishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
|
|
||||||
bool isVWapSwitchedToBearishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapMinBreakedUp = decisionConditions.x121Conditions.isVWapMinBreakedUp;
|
|
||||||
bool isVWapMaxBreakedUp = decisionConditions.x121Conditions.isVWapMaxBreakedUp;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapMinBreakedDown = decisionConditions.x121Conditions.isVWapMinBreakedDown;
|
|
||||||
bool isVWapMaxBreakedDown = decisionConditions.x121Conditions.isVWapMaxBreakedDown;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapFastCrossedOverMid = decisionConditions.x121Conditions.isVWapFastCrossedOverMid;
|
|
||||||
bool isVWapFastCrossedUnderMid = decisionConditions.x121Conditions.isVWapFastCrossedUnderMid;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapFastCrossedOverSlow = decisionConditions.x121Conditions.isVWapFastCrossedOverSlow;
|
|
||||||
bool isVWapFastCrossedUnderSlow = decisionConditions.x121Conditions.isVWapFastCrossedUnderSlow;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isClosedOverVWapMin = decisionConditions.x121Conditions.isClosedOverVWapMin;
|
|
||||||
bool isClosedUnderVWapMin = decisionConditions.x121Conditions.isClosedUnderVWapMin;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isClosedOverVWapMax = decisionConditions.x121Conditions.isClosedOverVWapMax;
|
|
||||||
bool isClosedUnderVWapMax = decisionConditions.x121Conditions.isClosedUnderVWapMax;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBullishSlope =
|
|
||||||
vwapFastSlope > 0 &&
|
|
||||||
vwapMidSlope > 0 &&
|
|
||||||
vwapSlowSlope > 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBearishSlope =
|
|
||||||
vwapFastSlope < 0 &&
|
|
||||||
vwapMidSlope < 0 &&
|
|
||||||
vwapSlowSlope < 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBullishFormed =
|
|
||||||
//
|
|
||||||
isVWapBullishSlope
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
(
|
|
||||||
//
|
|
||||||
(isVWapBullishOrdered &&
|
|
||||||
isVWapSwitchedToBullishState)
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
(isVWapBullishState &&
|
|
||||||
isVWapSwitchedToBullishOrdered)
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
((isVWapMaxBreakedUp ||
|
|
||||||
isClosedOverVWapMax) &&
|
|
||||||
(isVWapFastCrossedOverMid ||
|
|
||||||
isVWapFastCrossedOverSlow))
|
|
||||||
//
|
|
||||||
)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBearishFormed =
|
|
||||||
//
|
|
||||||
isVWapBearishSlope
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
(
|
|
||||||
//
|
|
||||||
(isVWapBearishOrdered &&
|
|
||||||
isVWapSwitchedToBearishState)
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
(isVWapBearishState &&
|
|
||||||
isVWapSwitchedToBearishOrdered)
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
((isVWapMinBreakedDown ||
|
|
||||||
isClosedUnderVWapMin) &&
|
|
||||||
(isVWapFastCrossedUnderMid ||
|
|
||||||
isVWapFastCrossedUnderSlow))
|
|
||||||
//
|
|
||||||
)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Complext ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarIncreased = decisionConditions.x121Conditions.isSarIncreased;
|
|
||||||
bool isSarDecreased = decisionConditions.x121Conditions.isSarDecreased;
|
|
||||||
bool isSarEqualsToPeak = decisionConditions.x121Conditions.isSarEqualsToPeak;
|
|
||||||
bool isSarEqualsToVale = decisionConditions.x121Conditions.isSarEqualsToVale;
|
|
||||||
bool isStrEqualsToPeak = decisionConditions.x121Conditions.isStrEqualsToPeak;
|
|
||||||
bool isStrEqualsToVale = decisionConditions.x121Conditions.isStrEqualsToVale;
|
|
||||||
bool isStrUpperOverPeak = decisionConditions.x121Conditions.isStrUpperOverPeak;
|
|
||||||
bool isPeakOverAtrUpper = decisionConditions.x121Conditions.isPeakOverAtrUpper;
|
|
||||||
bool isStrLowerOverVale = decisionConditions.x121Conditions.isStrLowerOverVale;
|
|
||||||
bool isBreakedUpPrevSar = decisionConditions.x121Conditions.isBreakedUpPrevSar;
|
|
||||||
bool isBreakedUpPrevStr = decisionConditions.x121Conditions.isBreakedUpPrevStr;
|
|
||||||
bool isStrLowerUnderVale = decisionConditions.x121Conditions.isStrLowerUnderVale;
|
|
||||||
bool isStrUpperUnderPeak = decisionConditions.x121Conditions.isStrUpperUnderPeak;
|
|
||||||
bool isValeUnderAtrLower = decisionConditions.x121Conditions.isValeUnderAtrLower;
|
|
||||||
bool isSarCrossedOverVale = decisionConditions.x121Conditions.isSarCrossedOverVale;
|
|
||||||
bool isStrCrossedOverVale = decisionConditions.x121Conditions.isStrCrossedOverVale;
|
|
||||||
bool isBreakedDownPrevStr = decisionConditions.x121Conditions.isBreakedDownPrevStr;
|
|
||||||
bool isBreakedDownPrevSar = decisionConditions.x121Conditions.isBreakedDownPrevSar;
|
|
||||||
bool isSarCrossedUnderPeak = decisionConditions.x121Conditions.isSarCrossedUnderPeak;
|
|
||||||
bool isStrCrossedUnderPeak = decisionConditions.x121Conditions.isStrCrossedUnderPeak;
|
|
||||||
bool isNewPeakOverAtrUpper = decisionConditions.x121Conditions.isNewPeakOverAtrUpper;
|
|
||||||
bool isNewValeUnderAtrLower = decisionConditions.x121Conditions.isNewValeUnderAtrLower;
|
|
||||||
bool isStrUpperOverAtrUpper = decisionConditions.x121Conditions.isStrUpperOverAtrUpper;
|
|
||||||
bool isStrLowerOverAtrLower = decisionConditions.x121Conditions.isStrLowerOverAtrLower;
|
|
||||||
bool isStrUpperUnderAtrUpper = decisionConditions.x121Conditions.isStrUpperUnderAtrUpper;
|
|
||||||
bool isStrLowerUnderAtrLower = decisionConditions.x121Conditions.isStrLowerUnderAtrLower;
|
|
||||||
bool isBreakedUpPrevAtrUpper = decisionConditions.x121Conditions.isBreakedUpPrevAtrUpper;
|
|
||||||
bool isBreakedUpPrevAtrLower = decisionConditions.x121Conditions.isBreakedUpPrevAtrLower;
|
|
||||||
bool isBreakedDownPrevAtrUpper = decisionConditions.x121Conditions.isBreakedDownPrevAtrUpper;
|
|
||||||
bool isBreakedDownPrevAtrLower = decisionConditions.x121Conditions.isBreakedDownPrevAtrLower;
|
|
||||||
bool isDonLowLowerEqualsToVale = decisionConditions.x121Conditions.isDonLowLowerEqualsToVale;
|
|
||||||
bool isStrUpperCrossedOverPeak = decisionConditions.x121Conditions.isStrUpperCrossedOverPeak;
|
|
||||||
bool isStrLowerCrossedOverVale = decisionConditions.x121Conditions.isStrLowerCrossedOverVale;
|
|
||||||
bool isStrLowerOverDonLowLower = decisionConditions.x121Conditions.isStrLowerOverDonLowLower;
|
|
||||||
bool isStrUpperOverDonHighUpper = decisionConditions.x121Conditions.isStrUpperOverDonHighUpper;
|
|
||||||
bool isStrLowerUnderDonLowLower = decisionConditions.x121Conditions.isStrLowerUnderDonLowLower;
|
|
||||||
bool isDonHighUpperEqualsToPeak = decisionConditions.x121Conditions.isDonHighUpperEqualsToPeak;
|
|
||||||
bool isStrUpperCrossedUnderPeak = decisionConditions.x121Conditions.isStrUpperCrossedUnderPeak;
|
|
||||||
bool isStrLowerCrossedUnderVale = decisionConditions.x121Conditions.isStrLowerCrossedUnderVale;
|
|
||||||
bool isStrUpperUnderDonHighUpper = decisionConditions.x121Conditions.isStrUpperUnderDonHighUpper;
|
|
||||||
bool isStrLowerCrossedOverAtrLower = decisionConditions.x121Conditions.isStrLowerCrossedOverAtrLower;
|
|
||||||
bool isStrUpperCrossedOverAtrUpper = decisionConditions.x121Conditions.isStrUpperCrossedOverAtrUpper;
|
|
||||||
bool isStrUpperCrossedUnderAtrUpper = decisionConditions.x121Conditions.isStrUpperCrossedUnderAtrUpper;
|
|
||||||
bool isStrLowerCrossedUnderAtrLower = decisionConditions.x121Conditions.isStrLowerCrossedUnderAtrLower;
|
|
||||||
bool isStrLowerCrossedOverDonLowLower = decisionConditions.x121Conditions.isStrLowerCrossedOverDonLowLower;
|
|
||||||
bool isStrUpperCrossedOverDonHighUpper = decisionConditions.x121Conditions.isStrUpperCrossedOverDonHighUpper;
|
|
||||||
bool isStrLowerCrossedUnderDonLowLower = decisionConditions.x121Conditions.isStrLowerCrossedUnderDonLowLower;
|
|
||||||
bool isStrUpperCrossedUnderDonHighUpper = decisionConditions.x121Conditions.isStrUpperCrossedUnderDonHighUpper;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
XPriceZones priceZones;
|
XPriceZones priceZones;
|
||||||
@@ -914,107 +541,90 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
//
|
//
|
||||||
isPriceZoneValidForPeak =
|
isPriceZoneValidForPeak =
|
||||||
hasBoundary &&
|
hasBoundary &&
|
||||||
peak <= priceZonesUpper &&
|
pzPeak <= priceZonesUpper &&
|
||||||
peak >= priceZonesLower;
|
pzPeak >= priceZonesLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
isPriceZoneValidForVale =
|
isPriceZoneValidForVale =
|
||||||
hasBoundary &&
|
hasBoundary &&
|
||||||
vale <= priceZonesUpper &&
|
pzVale <= priceZonesUpper &&
|
||||||
vale >= priceZonesLower;
|
pzVale >= priceZonesLower;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
|
||||||
// Method 1 ...
|
|
||||||
// VWap Switch Start ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool bullishMethod1 =
|
|
||||||
//
|
|
||||||
isSarBullish &&
|
|
||||||
isStrBullish &&
|
|
||||||
isSlopesBullish &&
|
|
||||||
hasBullishTrend &&
|
|
||||||
cBar.IsBullish() &&
|
|
||||||
isAtrBullishSlope &&
|
|
||||||
isPVBullishFormed &&
|
|
||||||
isRsiBullishFormed &&
|
|
||||||
isVWapBullishFormed
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool bearishMethod1 =
|
|
||||||
//
|
|
||||||
isSarBearish &&
|
|
||||||
isStrBearish &&
|
|
||||||
isSlopesBearish &&
|
|
||||||
hasBearishTrend &&
|
|
||||||
cBar.IsBearish() &&
|
|
||||||
isAtrBearishSlope &&
|
|
||||||
isPVBearishFormed &&
|
|
||||||
isRsiBearishFormed &&
|
|
||||||
isVWapBearishFormed
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Method 2 ...
|
|
||||||
// PV Start ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool bullishMethod2 =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
// isStrCrossedOverVale
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool bearishMethod2 =
|
|
||||||
//
|
|
||||||
!isNewVale &&
|
|
||||||
(
|
|
||||||
//
|
|
||||||
isStrCrossedUnderPeak
|
|
||||||
//
|
|
||||||
||
|
|
||||||
//
|
|
||||||
(isPrevSarBreakedDown &&
|
|
||||||
isStrSwitchedToBearish)
|
|
||||||
//
|
|
||||||
)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Summarize Conditions ...
|
// Summarize Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isBullish =
|
isBullish =
|
||||||
//
|
//
|
||||||
// bullishMethod1
|
// Other Time Frames ...
|
||||||
// //
|
|
||||||
// ||
|
|
||||||
//
|
//
|
||||||
bullishMethod2
|
// Consolidation ...
|
||||||
|
(consolidationXConditions.isCheBullish &&
|
||||||
|
consolidationXConditions.isStrBullish &&
|
||||||
|
consolidationXConditions.isSarBullish &&
|
||||||
|
consolidationXConditions.isClosedOverVWapMax) &&
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
(analyseXConditions.isCheBullish &&
|
||||||
|
analyseXConditions.isStrBullish &&
|
||||||
|
analyseXConditions.isSarBullish &&
|
||||||
|
analyseXConditions.isClosedOverVWapMax) &&
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
hasBullishTrend &&
|
||||||
|
(
|
||||||
|
//
|
||||||
|
((decisionXConditions.isStrSwitchedToBullish &&
|
||||||
|
decisionXConditions.isCheBullish &&
|
||||||
|
decisionXConditions.isSarBullish) ||
|
||||||
|
(decisionXConditions.isCheSwitchedToBullish &&
|
||||||
|
decisionXConditions.isSarBullish &&
|
||||||
|
decisionXConditions.isStrBullish) ||
|
||||||
|
(decisionXConditions.isSarSwitchedToBullish &&
|
||||||
|
decisionXConditions.isCheBullish &&
|
||||||
|
decisionXConditions.isStrBullish))
|
||||||
|
//
|
||||||
|
)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
isBearish =
|
isBearish =
|
||||||
//
|
//
|
||||||
// bearishMethod1
|
// Other Time Frames ...
|
||||||
// //
|
|
||||||
// ||
|
|
||||||
//
|
//
|
||||||
bearishMethod2
|
// Consolidation ...
|
||||||
|
(consolidationXConditions.isCheBearish &&
|
||||||
|
consolidationXConditions.isStrBearish &&
|
||||||
|
consolidationXConditions.isSarBearish &&
|
||||||
|
consolidationXConditions.isClosedUnderVWapMax) &&
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
(analyseXConditions.isCheBearish &&
|
||||||
|
analyseXConditions.isStrBearish &&
|
||||||
|
analyseXConditions.isSarBearish &&
|
||||||
|
analyseXConditions.isClosedUnderVWapMax) &&
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
hasBearishTrend &&
|
||||||
|
(
|
||||||
|
//
|
||||||
|
((decisionXConditions.isStrSwitchedToBearish &&
|
||||||
|
decisionXConditions.isCheBearish &&
|
||||||
|
decisionXConditions.isSarBearish) ||
|
||||||
|
(decisionXConditions.isCheSwitchedToBearish &&
|
||||||
|
decisionXConditions.isSarBearish &&
|
||||||
|
decisionXConditions.isStrBearish) ||
|
||||||
|
(decisionXConditions.isSarSwitchedToBearish &&
|
||||||
|
decisionXConditions.isCheBearish &&
|
||||||
|
decisionXConditions.isStrBearish))
|
||||||
|
//
|
||||||
|
)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -1027,10 +637,10 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
conditions.point =
|
conditions.pivot =
|
||||||
isBullish
|
isBullish
|
||||||
? vale
|
? pzVale
|
||||||
: peak;
|
: pzPeak;
|
||||||
conditions.setupTime = cTime;
|
conditions.setupTime = cTime;
|
||||||
conditions.dir =
|
conditions.dir =
|
||||||
isBullish
|
isBullish
|
||||||
@@ -1262,26 +872,42 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
XPOIState consolidationState = consolidationConditions.state;
|
XPOIState consolidationState = consolidationConditions.state;
|
||||||
XPOIState visionState = visionConditions.state;
|
XPOIState visionState = visionConditions.state;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cycle X121Conditions ...
|
||||||
|
X121Conditions triggerXConditions = triggerConditions.x121Conditions;
|
||||||
|
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
|
||||||
|
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
|
||||||
|
X121Conditions verificationXConditions = verificationConditions.x121Conditions;
|
||||||
|
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
|
||||||
|
X121Conditions visionXConditions = visionConditions.x121Conditions;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trigger Conditions ...
|
// Trigger Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// SAR ...
|
// SAR ...
|
||||||
double sar = decisionConditions.x121Conditions.sarBuffer[1];
|
double sar = decisionXConditions.sarBuffer[1];
|
||||||
|
|
||||||
//
|
//
|
||||||
// STR ...
|
// STR ...
|
||||||
double str = decisionConditions.x121Conditions.strBuffer[1];
|
double str = decisionXConditions.strBuffer[1];
|
||||||
|
|
||||||
|
//
|
||||||
|
// CHE ...
|
||||||
|
double le1 = decisionXConditions.le1Buffer[1];
|
||||||
|
double le2 = decisionXConditions.le2Buffer[1];
|
||||||
|
double se1 = decisionXConditions.se1Buffer[1];
|
||||||
|
double se2 = decisionXConditions.se2Buffer[1];
|
||||||
|
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
double atrUpper = decisionConditions.x121Conditions.atrUpperBuffer[1];
|
double atrUpper = decisionXConditions.atrUpperBuffer[1];
|
||||||
double atrLower = decisionConditions.x121Conditions.atrLowerBuffer[1];
|
double atrLower = decisionXConditions.atrLowerBuffer[1];
|
||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
double peak = decisionConditions.x121Conditions.peaksBuffer[1];
|
double peak = decisionXConditions.peaksBuffer[1];
|
||||||
double vale = decisionConditions.x121Conditions.valesBuffer[1];
|
double vale = decisionXConditions.valesBuffer[1];
|
||||||
|
|
||||||
//
|
//
|
||||||
int higherPeakIDX = -1;
|
int higherPeakIDX = -1;
|
||||||
@@ -1301,6 +927,47 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
vale //
|
vale //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Slopes ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isRsiSlopeBullish = decisionXConditions.isRsiSlopeBullish;
|
||||||
|
bool isStrSlopeBullish = decisionXConditions.isStrSlopeBullish;
|
||||||
|
bool isAtrUpperSlopeBullish = decisionXConditions.isAtrUpperSlopeBullish;
|
||||||
|
bool isAtrLowerSlopeBullish = decisionXConditions.isAtrLowerSlopeBullish;
|
||||||
|
bool isVwapFastSlopeBullish = decisionXConditions.isVwapFastSlopeBullish;
|
||||||
|
bool isVwapMidSlopeBullish = decisionXConditions.isVwapMidSlopeBullish;
|
||||||
|
bool isVwapSlowSlopeBullish = decisionXConditions.isVwapSlowSlopeBullish;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isRsiSlopeBearish = decisionXConditions.isRsiSlopeBearish;
|
||||||
|
bool isStrSlopeBearish = decisionXConditions.isStrSlopeBearish;
|
||||||
|
bool isAtrUpperSlopeBearish = decisionXConditions.isAtrUpperSlopeBearish;
|
||||||
|
bool isAtrLowerSlopeBearish = decisionXConditions.isAtrLowerSlopeBearish;
|
||||||
|
bool isVwapFastSlopeBearish = decisionXConditions.isVwapFastSlopeBearish;
|
||||||
|
bool isVwapMidSlopeBearish = decisionXConditions.isVwapMidSlopeBearish;
|
||||||
|
bool isVwapSlowSlopeBearish = decisionXConditions.isVwapSlowSlopeBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSlopesBullish =
|
||||||
|
isRsiSlopeBullish &&
|
||||||
|
isStrSlopeBullish &&
|
||||||
|
isAtrUpperSlopeBullish &&
|
||||||
|
isAtrLowerSlopeBullish &&
|
||||||
|
isVwapFastSlopeBullish &&
|
||||||
|
isVwapMidSlopeBullish &&
|
||||||
|
isVwapSlowSlopeBullish;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSlopesBearish =
|
||||||
|
isRsiSlopeBearish &&
|
||||||
|
isStrSlopeBearish &&
|
||||||
|
isAtrUpperSlopeBearish &&
|
||||||
|
isAtrLowerSlopeBearish &&
|
||||||
|
isVwapFastSlopeBearish &&
|
||||||
|
isVwapMidSlopeBearish &&
|
||||||
|
isVwapSlowSlopeBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
double point = conditions.point;
|
double point = conditions.point;
|
||||||
bool isPointBreak = IsBarBreak(
|
bool isPointBreak = IsBarBreak(
|
||||||
@@ -1310,31 +977,26 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect Bullish Conditions ...
|
// Summary ...
|
||||||
|
|
||||||
|
//
|
||||||
isBullish =
|
isBullish =
|
||||||
//
|
//
|
||||||
isBullish &&
|
isBullish &&
|
||||||
isPointBreak &&
|
isPointBreak &&
|
||||||
|
isSlopesBullish &&
|
||||||
cBar.IsBullish()
|
cBar.IsBullish()
|
||||||
//
|
//
|
||||||
// &&
|
|
||||||
// //
|
|
||||||
// false
|
|
||||||
//
|
|
||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect Bearish Conditions ...
|
|
||||||
isBearish =
|
isBearish =
|
||||||
//
|
//
|
||||||
isBearish &&
|
isBearish &&
|
||||||
isPointBreak &&
|
isPointBreak &&
|
||||||
|
isSlopesBearish &&
|
||||||
cBar.IsBearish()
|
cBar.IsBearish()
|
||||||
//
|
//
|
||||||
// &&
|
|
||||||
// //
|
|
||||||
// false
|
|
||||||
//
|
|
||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1512,11 +1174,11 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
sls //
|
sls //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
// //
|
||||||
Add(
|
// Add(
|
||||||
vale,
|
// vale,
|
||||||
sls //
|
// sls //
|
||||||
);
|
// );
|
||||||
|
|
||||||
//
|
//
|
||||||
if (bullishMomentumBar.IsValid())
|
if (bullishMomentumBar.IsValid())
|
||||||
@@ -1528,12 +1190,32 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (IsValidIndex(lowerValeIDX))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// Add(
|
||||||
|
// lowerVale,
|
||||||
|
// sls //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
if (IsValidIndex(lowerValeIDX))
|
if (le1 != EMPTY_VALUE)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
Add(
|
||||||
lowerVale,
|
le1,
|
||||||
|
sls //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (le2 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
le2,
|
||||||
sls //
|
sls //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1546,11 +1228,11 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
sls //
|
sls //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
// //
|
||||||
Add(
|
// Add(
|
||||||
peak,
|
// peak,
|
||||||
sls //
|
// sls //
|
||||||
);
|
// );
|
||||||
|
|
||||||
//
|
//
|
||||||
if (bearishMomentumBar.IsValid())
|
if (bearishMomentumBar.IsValid())
|
||||||
@@ -1563,11 +1245,31 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (IsValidIndex(higherPeakIDX))
|
// if (IsValidIndex(higherPeakIDX))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// Add(
|
||||||
|
// higherPeak,
|
||||||
|
// sls //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
//
|
||||||
|
if (se1 != EMPTY_VALUE)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
Add(
|
||||||
higherPeak,
|
se1,
|
||||||
|
sls //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (se2 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
se2,
|
||||||
sls //
|
sls //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1261,7 +1261,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
bool showAll = false;
|
bool showAll = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
x121Inputs.showRSI = false;
|
x121Inputs.showRSI = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInited = false;
|
bool isInited = false;
|
||||||
@@ -1286,8 +1286,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// XATR ...
|
// XATR ...
|
||||||
x121Inputs.xatrInputs.showATRUpper = showAll || false;
|
x121Inputs.xatrInputs.showATRUpper = showAll || true;
|
||||||
x121Inputs.xatrInputs.showATRLower = showAll || false;
|
x121Inputs.xatrInputs.showATRLower = showAll || true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XSTR ...
|
// XSTR ...
|
||||||
@@ -1311,9 +1311,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// XVWAP ...
|
// XVWAP ...
|
||||||
x121Inputs.xvwapInputs.showVWapFast = showAll || false;
|
x121Inputs.xvwapInputs.showVWapFast = showAll || true;
|
||||||
x121Inputs.xvwapInputs.showVWapMedium = showAll || false;
|
x121Inputs.xvwapInputs.showVWapMedium = showAll || true;
|
||||||
x121Inputs.xvwapInputs.showVWapSlow = showAll || false;
|
x121Inputs.xvwapInputs.showVWapSlow = showAll || true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize Cycle Helpers ...
|
// Initialize Cycle Helpers ...
|
||||||
|
|||||||
Reference in New Issue
Block a user