last ...
This commit is contained in:
@@ -2151,7 +2151,16 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
if (detectFVGBullishPivots)
|
||||
{
|
||||
//
|
||||
if (isBullishFVG)
|
||||
bool checkingCondition =
|
||||
//
|
||||
isBullishFVG &&
|
||||
(cPeak > pPeak ||
|
||||
pPeak > p2Peak)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
if (checkingCondition)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox;
|
||||
@@ -2193,7 +2202,16 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
if (detectFVGBearishPivots)
|
||||
{
|
||||
//
|
||||
if (isBearishFVG)
|
||||
bool checkingCondition =
|
||||
//
|
||||
isBearishFVG &&
|
||||
(cVale < pVale ||
|
||||
pVale < p2Vale)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
if (checkingCondition)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox;
|
||||
@@ -2921,7 +2939,8 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
//
|
||||
void Validate(
|
||||
XBoxZone &unAvailableBoxes[],
|
||||
int barIndex = 0 //
|
||||
int barIndex = 0,
|
||||
bool validateFVGsUsingPV = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -2942,6 +2961,20 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
int pIDX = cIDX + 1;
|
||||
int p2IDX = pIDX + 1;
|
||||
|
||||
//
|
||||
// Retrieve Conditions ...
|
||||
XCAEAConditions conditions;
|
||||
has = helper.GetConditions(
|
||||
conditions,
|
||||
barIndex,
|
||||
5 //
|
||||
);
|
||||
if (!has)
|
||||
{
|
||||
conditions.Clean();
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Implement Validation Senarios ...
|
||||
|
||||
@@ -3040,6 +3073,16 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
unAvailableBoxes,
|
||||
barIndex //
|
||||
);
|
||||
|
||||
//
|
||||
if (validateFVGsUsingPV)
|
||||
{
|
||||
//
|
||||
ApplyFVGPVValidation(
|
||||
fvgBullishPivots,
|
||||
conditions //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -3055,6 +3098,16 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
unAvailableBoxes,
|
||||
barIndex //
|
||||
);
|
||||
|
||||
//
|
||||
if (validateFVGsUsingPV)
|
||||
{
|
||||
//
|
||||
ApplyFVGPVValidation(
|
||||
fvgBearishPivots,
|
||||
conditions //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -3177,6 +3230,9 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
conditions.Clean();
|
||||
|
||||
//
|
||||
SortPivots();
|
||||
}
|
||||
@@ -4175,6 +4231,89 @@ class XCXCAEAPOIDetector : public XCBase
|
||||
Clean(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
void ApplyFVGPVValidation(
|
||||
XBoxZone &fvgs[],
|
||||
XCAEAConditions &conditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
int zIDX = 0;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
int p2IDX = pIDX + 1;
|
||||
|
||||
//
|
||||
bool has = HasChild(fvgs);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Reading Values ...
|
||||
|
||||
//
|
||||
// PEAK ...
|
||||
double zPeak = conditions.peakBuffer[zIDX];
|
||||
double cPeak = conditions.peakBuffer[cIDX];
|
||||
double pPeak = conditions.peakBuffer[pIDX];
|
||||
double p2Peak = conditions.peakBuffer[p2IDX];
|
||||
|
||||
//
|
||||
// VALE ...
|
||||
double zVale = conditions.valeBuffer[zIDX];
|
||||
double cVale = conditions.valeBuffer[cIDX];
|
||||
double pVale = conditions.valeBuffer[pIDX];
|
||||
double p2Vale = conditions.valeBuffer[p2IDX];
|
||||
|
||||
//
|
||||
XBoxZone tmp[];
|
||||
Copy(
|
||||
fvgs,
|
||||
tmp //
|
||||
);
|
||||
Clean(fvgs);
|
||||
while (HasChild(tmp))
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = tmp[0];
|
||||
ArrayRemove(
|
||||
tmp,
|
||||
0,
|
||||
1 //
|
||||
);
|
||||
|
||||
//
|
||||
bool isBullish = iBox.IsBullish();
|
||||
|
||||
//
|
||||
bool isTooOld = iBox.GetAge() > 21;
|
||||
bool isPVBreaked =
|
||||
isBullish
|
||||
? cVale > iBox.upper
|
||||
: cPeak < iBox.lower;
|
||||
|
||||
//
|
||||
has = !isTooOld &&
|
||||
!isPVBreaked;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iBox,
|
||||
fvgs //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmp);
|
||||
}
|
||||
|
||||
//
|
||||
void ApplySortOnBox(
|
||||
XBoxZone &items[] //
|
||||
|
||||
@@ -318,6 +318,158 @@ class XCXCAEAPOIDrawer : public XCBase
|
||||
DrawCCICrossedUnderOBPivots(to);
|
||||
}
|
||||
|
||||
//
|
||||
void DrawBox(
|
||||
XBoxZone &box,
|
||||
datetime to = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool has = box.IsValid();
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//
|
||||
// Detect Pivot Type ...
|
||||
ENUM_XCA_PIVOTS iType = GetPivotType(box);
|
||||
has = IsValid(iType);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
switch (iType)
|
||||
{
|
||||
//
|
||||
case XCA_TICK:
|
||||
//
|
||||
DrawTickPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_VOLUME:
|
||||
//
|
||||
DrawVolumePivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_FVG_BULL:
|
||||
//
|
||||
DrawFVGBullishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_FVG_BEAR:
|
||||
//
|
||||
DrawFVGBearishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_COOS:
|
||||
//
|
||||
DrawRSICrossedOverOSPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_CUOB:
|
||||
//
|
||||
DrawRSICrossedUnderOBPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_PEAK:
|
||||
//
|
||||
DrawRSIPeakPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_VALE:
|
||||
//
|
||||
DrawRSIValePivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_COOS:
|
||||
//
|
||||
DrawCCICrossedOverOSPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_CUOB:
|
||||
//
|
||||
DrawCCICrossedUnderOBPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_PEAK:
|
||||
//
|
||||
DrawCCIPeakPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_VALE:
|
||||
//
|
||||
DrawCCIValePivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_PEAKSWHRES:
|
||||
//
|
||||
DrawPeakResSWHPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_VALESWLSUP:
|
||||
//
|
||||
DrawValeSupSWLPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void DrawBoxes(
|
||||
XBoxZone &boxes[],
|
||||
@@ -340,146 +492,10 @@ class XCXCAEAPOIDrawer : public XCBase
|
||||
|
||||
//
|
||||
// Detect Pivot Type ...
|
||||
ENUM_XCA_PIVOTS iType = GetPivotType(iBox);
|
||||
has = IsValid(iType);
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
switch (iType)
|
||||
{
|
||||
//
|
||||
case XCA_TICK:
|
||||
//
|
||||
DrawTickPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_VOLUME:
|
||||
//
|
||||
DrawVolumePivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_FVG_BULL:
|
||||
//
|
||||
DrawFVGBullishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_FVG_BEAR:
|
||||
//
|
||||
DrawFVGBearishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_COOS:
|
||||
//
|
||||
DrawRSICrossedOverOSPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_CUOB:
|
||||
//
|
||||
DrawRSICrossedUnderOBPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_PEAK:
|
||||
//
|
||||
DrawRSIPeakPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_RSI_VALE:
|
||||
//
|
||||
DrawRSIValePivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_COOS:
|
||||
//
|
||||
DrawCCICrossedOverOSPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_CUOB:
|
||||
//
|
||||
DrawCCICrossedUnderOBPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_PEAK:
|
||||
//
|
||||
DrawCCIPeakPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_CCI_VALE:
|
||||
//
|
||||
DrawCCIValePivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_PEAKSWHRES:
|
||||
//
|
||||
DrawPeakResSWHPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_VALESWLSUP:
|
||||
//
|
||||
DrawValeSupSWLPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
}
|
||||
DrawBox(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
|
||||
Reference in New Issue
Block a user