prepare for test ...

This commit is contained in:
2025-02-02 00:37:22 +03:30
parent 959a4f417a
commit f60bc18d73
7 changed files with 3751 additions and 721 deletions
@@ -704,631 +704,19 @@ bool DetectX121SMCXHKPVSignalSetup(
;
//
// Detect Cycle State ...
//
double upper = 0;
double lower = 0;
bool hasYoungestOB = false;
bool isPriceOBValid = false;
bool isBullishHappens = false;
bool isBearishHappens = false;
XCOrderBlock *youngestOB = NULL;
bool hasPriceBox = conditions.priceBox.IsValid();
bool hasState = visionCycleHelper.GetCycleState(conditions.state);
//
// Detect Price Box if not Provided ...
if (hasState &&
!hasPriceBox)
{
//
hasPriceBox = DetectPriceInsideBox(
conditions.priceBox,
conditions.priceOB,
decisionXConditions,
conditions.state //
);
if (hasPriceBox)
{
conditions.priceOBAt = cTime;
}
}
//
if (hasPriceBox)
{
//
// Update Price Box Date ...
conditions.priceOB.To(cTime);
conditions.priceBox.to = cTime;
upper = conditions.priceOB.Upper();
lower = conditions.priceOB.Lower();
//
hasYoungestOB = conditions.state.GetYoungestOB(youngestOB);
//
// Here We Can Validate Box by Same Cycles Peaks and Vales ...
bool isBullish = IsBullish(conditions.priceBox.dir);
//
bool isPriceBoxSameAsOB =
//
conditions.priceBox.upper <= conditions.priceOB.Upper() &&
conditions.priceBox.lower >= conditions.priceOB.Lower()
//
;
//
int cIDX = 1;
//
bool isSameCyclePeaks =
//
triggerXConditions.peaksBuffer[cIDX] == decisionXConditions.peaksBuffer[cIDX] &&
decisionXConditions.peaksBuffer[cIDX] == analyseXConditions.peaksBuffer[cIDX] &&
analyseXConditions.peaksBuffer[cIDX] == verificationXConditions.peaksBuffer[cIDX]
//
;
//
bool isSameCycleVales =
//
triggerXConditions.valesBuffer[cIDX] == decisionXConditions.valesBuffer[cIDX] &&
decisionXConditions.valesBuffer[cIDX] == analyseXConditions.valesBuffer[cIDX] &&
analyseXConditions.valesBuffer[cIDX] == verificationXConditions.valesBuffer[cIDX]
//
;
//
// Check Validation Conditions ...
isPriceOBValid =
//
hasPriceBox &&
isPriceBoxSameAsOB &&
(isBullish
? isSameCycleVales
: isSameCyclePeaks)
//
;
//
// Check Conditions ...
//
X121Conditions xConditions = triggerXConditions;
//
isBullishHappens =
//
isPriceOBValid &&
isCBarBullishFormed &&
conditions.priceOB.IsBullish() &&
IsBullish(conditions.priceBox.dir) &&
//
(xConditions.isBreakedUpPrevSar ||
xConditions.isBreakedUpPrevStr ||
xConditions.isVWapMaxBreakedUp ||
xConditions.isBreakedUpPrevCheMax ||
xConditions.isBreakedUpPrevAtrLower) &&
//
(xConditions.isSarSwitchedToBullish ||
xConditions.isStrSwitchedToBullish ||
xConditions.isCheSwitchedToBullish ||
xConditions.isVWapSwitchedToBullishState ||
xConditions.isVWapSwitchedToBullishOrdered)
//
;
//
isBearishHappens =
//
isPriceOBValid &&
isCBarBearishFormed &&
conditions.priceOB.IsBearish() &&
IsBearish(conditions.priceBox.dir) &&
//
(xConditions.isBreakedDownPrevSar ||
xConditions.isBreakedDownPrevStr ||
xConditions.isVWapMinBreakedDown ||
xConditions.isBreakedDownPrevCheMin ||
xConditions.isBreakedDownPrevAtrUpper) &&
//
(xConditions.isSarSwitchedToBearish ||
xConditions.isStrSwitchedToBearish ||
xConditions.isCheSwitchedToBearish ||
xConditions.isVWapSwitchedToBearishState ||
xConditions.isVWapSwitchedToBearishOrdered)
//
;
//
if (!conditions.isPriceOBActed)
{
conditions.isPriceOBActed = isBullishHappens ||
isBearishHappens;
}
}
//
// Detect Accumulation ...
if (conditions.isPriceOBActed)
{
//
// Checking OB Breake on Side ...
if (!conditions.isPriceOBBreaked)
{
//
conditions.isPriceOBBreaked =
(conditions.priceOB.IsBullish() &&
IsBullish(conditions.priceBox.dir))
? (cBar.low < upper &&
cBar.high > upper &&
cBar.close > upper)
//
||
//
(pBar.high < upper &&
cBar.low > upper &&
cBar.open > upper)
: (cBar.high > lower &&
cBar.low < lower &&
cBar.close < lower)
//
||
//
(pBar.low > lower &&
cBar.high < lower &&
cBar.open < lower);
}
}
//
// Detect Distribution ...
bool isPriceOBUpperBrekedUp = false;
bool isPriceOBLowerBrekedDown = false;
if (conditions.isPriceOBBreaked)
{
//
isPriceOBUpperBrekedUp = IsBarBreak(
upper,
X_DIRECTION_BULLISH,
cBar //
);
//
isPriceOBLowerBrekedDown = IsBarBreak(
lower,
X_DIRECTION_BEARISH,
cBar //
);
}
// //
// // Draw ...
// XCBaseObject *drawnObjects[];
// int drawnObjectsCount = visionCycleHelper.DrawCycleState(
// conditions.state,
// drawnObjects //
// );
// //
// if (hasPriceBox)
// {
// //
// bool isBullish = IsBullish(conditions.priceBox.dir);
// color boxColor = isBullish ? clrYellow : clrOrange;
// //
// XCBoxObject *iObj;
// bool isCreated = visionCycleHelper.mPOIDrawer.CreateBox(
// conditions.priceBox,
// iObj,
// boxColor,
// 1,
// false,
// STYLE_DASHDOTDOT //
// );
// //
// if (isCreated)
// {
// //
// Add(
// (XCBaseObject *)iObj,
// drawnObjects //
// );
// }
// //
// XCBaseObject *priceOBObj = NULL;
// if (isBullish)
// {
// //
// XCBullishOrderBlockObject *iObj;
// isCreated = visionCycleHelper
// .mPOIDrawer
// .CreateBullishOrderBlock(
// conditions.priceOB,
// iObj //
// );
// //
// if (isCreated)
// {
// //
// iObj.ZoneWidth(2);
// iObj.ZoneColor(boxColor);
// iObj.ZoneStyle(STYLE_SOLID);
// //
// priceOBObj = (XCBaseObject *)iObj;
// }
// }
// else
// {
// //
// XCBearishOrderBlockObject *iObj;
// isCreated = visionCycleHelper
// .mPOIDrawer
// .CreateBearishOrderBlock(
// conditions.priceOB,
// iObj //
// );
// //
// if (isCreated)
// {
// //
// iObj.ZoneWidth(2);
// iObj.ZoneColor(boxColor);
// iObj.ZoneStyle(STYLE_SOLID);
// //
// priceOBObj = (XCBaseObject *)iObj;
// }
// }
// //
// if (isCreated)
// {
// //
// Add(
// priceOBObj,
// drawnObjects //
// );
// }
// }
//
//
//
//
// Check Verifications Conditions ...
//
// XHK ...
bool isXHKBullish = false;
bool isXHKBearish = false;
//
// XSAR ...
bool isXSarBullish = false;
bool isXSarBearish = false;
//
// XATR ...
bool isXAtrBullish = false;
bool isXAtrBearish = false;
//
// XSTR ...
bool isXStrBullish = false;
bool isXStrBearish = false;
//
// XVWAP ...
bool isXVWapBullish = false;
bool isXVWapBearish = false;
//
// XCHE ...
bool isXCheBullish = false;
bool isXCheBearish = false;
//
if (hasPriceBox)
{
//
// XHK ...
//
isXHKBullish =
//
// Trigger ...
triggerXConditions.isSMHKBullish &&
triggerXConditions.isRawHKBullish &&
triggerXConditions.isClosedOverSMHK &&
triggerXConditions.isClosedOverRawHK &&
(triggerXConditions.isBreakedUpSMHK ||
triggerXConditions.isBreakedUpRawHK) &&
triggerXConditions.isRawHKClosedOverSMHK &&
//
// Decision ...
decisionXConditions.isSMHKBullish &&
decisionXConditions.isRawHKBullish &&
decisionXConditions.isClosedOverSMHK &&
decisionXConditions.isClosedOverRawHK &&
(decisionXConditions.isBreakedUpSMHK ||
decisionXConditions.isBreakedUpRawHK) &&
decisionXConditions.isRawHKClosedOverSMHK &&
//
// Analyse ...
analyseXConditions.isSMHKBullish &&
analyseXConditions.isRawHKBullish &&
analyseXConditions.isClosedOverSMHK &&
analyseXConditions.isClosedOverRawHK &&
(analyseXConditions.isBreakedUpSMHK ||
analyseXConditions.isBreakedUpRawHK) &&
decisionXConditions.isRawHKClosedOverSMHK
//
;
//
isXHKBearish =
//
// Trigger ...
triggerXConditions.isSMHKBearish &&
triggerXConditions.isRawHKBearish &&
triggerXConditions.isClosedUnderSMHK &&
triggerXConditions.isClosedUnderRawHK &&
(triggerXConditions.isBreakedDownSMHK ||
triggerXConditions.isBreakedDownRawHK) &&
triggerXConditions.isRawHKClosedUnderSMHK &&
//
// Decision ...
decisionXConditions.isSMHKBearish &&
decisionXConditions.isRawHKBearish &&
decisionXConditions.isClosedUnderSMHK &&
decisionXConditions.isClosedUnderRawHK &&
(decisionXConditions.isBreakedDownSMHK ||
decisionXConditions.isBreakedDownRawHK) &&
decisionXConditions.isRawHKClosedUnderSMHK &&
//
// Analyse ...
analyseXConditions.isSMHKBearish &&
analyseXConditions.isRawHKBearish &&
analyseXConditions.isClosedUnderSMHK &&
analyseXConditions.isClosedUnderRawHK &&
(analyseXConditions.isBreakedDownSMHK ||
analyseXConditions.isBreakedDownRawHK) &&
analyseXConditions.isRawHKClosedUnderSMHK
//
;
//
// XSAR ...
//
isXSarBullish =
//
// Trigger ...
triggerXConditions.isSarBullish &&
triggerXConditions.isSarIncreased &&
//
// Decision ...
decisionXConditions.isSarBullish &&
decisionXConditions.isSarIncreased &&
//
// Analyse ...
analyseXConditions.isSarBullish &&
analyseXConditions.isSarIncreased
//
;
//
isXSarBearish =
//
// Trigger ...
triggerXConditions.isSarBearish &&
triggerXConditions.isSarDecreased &&
//
// Decision ...
decisionXConditions.isSarBearish &&
decisionXConditions.isSarDecreased &&
//
// Analyse ...
analyseXConditions.isSarBearish // &&
//
;
//
// XATR ...
//
isXAtrBullish =
//
// Trigger ...
triggerXConditions.isClosedOverAtrUpper &&
//
// Decision ...
decisionXConditions.isClosedOverAtrUpper
//
// Analyse ...
//
;
//
isXAtrBearish =
//
// Trigger ...
triggerXConditions.isClosedUnderAtrLower &&
//
// Decision ...
decisionXConditions.isClosedUnderAtrLower
//
// Analyse ...
//
;
//
// XSTR ...
//
isXStrBullish =
//
// Trigger ...
triggerXConditions.isStrBullish &&
//
// Decision ...
decisionXConditions.isStrBullish
//
// Analyse ...
//
;
//
isXStrBearish =
//
// Trigger ...
triggerXConditions.isStrBearish &&
//
// Decision ...
decisionXConditions.isStrBearish
//
// Analyse ...
//
;
//
// XVWAP ...
//
isXVWapBullish =
//
// Trigger ...
triggerXConditions.isVWapBullishState &&
triggerXConditions.isVWapBullishOrdered &&
//
// Decision ...
decisionXConditions.isVWapBullishState &&
decisionXConditions.isVWapBullishOrdered &&
//
// Analyse ...
analyseXConditions.isVWapBullishState &&
analyseXConditions.isVWapBullishOrdered
//
;
//
isXVWapBearish =
//
// Trigger ...
triggerXConditions.isVWapBearishState &&
triggerXConditions.isVWapBearishOrdered &&
//
// Decision ...
decisionXConditions.isVWapBearishState &&
decisionXConditions.isVWapBearishOrdered &&
//
// Analyse ...
analyseXConditions.isVWapBearishState &&
analyseXConditions.isVWapBearishOrdered
//
;
//
// XCHE ...
//
isXCheBullish =
//
// Trigger ...
triggerXConditions.isCheBullish &&
//
// Decision ...
decisionXConditions.isCheBullish &&
//
// Analyse ...
analyseXConditions.isCheBullish
//
;
//
isXCheBearish =
//
// Trigger ...
triggerXConditions.isCheBearish &&
//
// Decision ...
decisionXConditions.isCheBearish &&
//
// Analyse ...
analyseXConditions.isCheBearish
//
;
}
//
// Summarize Conditions ...
// Detect ...
//
bool isCondition1Bullish =
//
isPriceOBUpperBrekedUp &&
conditions.isPriceOBBreaked &&
conditions.priceOB.IsBearish() &&
//
// XHK ...
isXHKBullish &&
//
// XSAR ...
isXSarBullish &&
//
// XATR ...
isXAtrBullish &&
//
// XSTR ...
isXStrBullish &&
//
// XVWAP ...
isXVWapBullish &&
//
// XCHE ...
isXCheBullish &&
//
true
false
//
;
//
bool isCondition1Bearish =
//
isPriceOBLowerBrekedDown &&
conditions.isPriceOBBreaked &&
conditions.priceOB.IsBullish() &&
//
// XHK ...
isXHKBearish &&
//
// XSAR ...
isXSarBearish &&
//
// XATR ...
isXAtrBearish &&
//
// XSTR ...
isXStrBearish &&
//
// XVWAP ...
isXVWapBearish &&
//
// XCHE ...
isXCheBearish &&
//
true
false
//
;
@@ -1350,8 +738,8 @@ bool DetectX121SMCXHKPVSignalSetup(
);
//
double longPivot = lower; // triggerXConditions.valesBuffer[1];
double shortPivot = upper; // triggerXConditions.peaksBuffer[1];
double longPivot = triggerXConditions.valesBuffer[1];
double shortPivot = triggerXConditions.peaksBuffer[1];
//
// Manipulate Conditions Point ...
@@ -1395,24 +783,6 @@ bool DetectX121SMCXHKPVSignalSetup(
isBearish;
if (!result)
{
//
// Detect PriceOB Lifetime Bars ...
if (hasPriceBox)
{
//
int obLifetimeBars = (int)(cTime - conditions.priceOBAt) / PeriodSeconds(PERIOD_M1);
bool canReset =
//
!conditions.isPriceOBActed &&
obLifetimeBars >= resetAfterUnActedZoneInMinutes
//
;
if (canReset)
{
conditions.Clean();
}
}
//
// Cleanup Arrays ...
Clean(triggerPoiEvents);