last ...
This commit is contained in:
@@ -8558,6 +8558,476 @@ int GetLowest(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, typename F>
|
||||||
|
int FilterZones(
|
||||||
|
T *source,
|
||||||
|
F *&dest[],
|
||||||
|
bool filterDirection = true,
|
||||||
|
bool filterFrom = true,
|
||||||
|
bool filterPrice = true,
|
||||||
|
bool ignoreOutOfBox = false,
|
||||||
|
bool applySort = false,
|
||||||
|
bool ignoreInside = true //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(dest);
|
||||||
|
if (source == NULL ||
|
||||||
|
!source.IsValid() ||
|
||||||
|
!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone sourceBox;
|
||||||
|
bool hasSourceBox = ToBox(
|
||||||
|
sourceBox,
|
||||||
|
source //
|
||||||
|
);
|
||||||
|
if (!hasSourceBox)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
F *tmp[];
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
F *iZone = dest[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
bool hasBox = ToBox(
|
||||||
|
iBox,
|
||||||
|
iZone //
|
||||||
|
);
|
||||||
|
if (!hasBox)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION iDir = iBox.dir;
|
||||||
|
bool isIBullish = IsBullish(iDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterDirection)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isDirectionPassed =
|
||||||
|
sourceBox.dir == iDir;
|
||||||
|
if (!isDirectionPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterFrom)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isFromPassed = iBox.from > sourceBox.from;
|
||||||
|
if (!isFromPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterPrice)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isInside = IsBoxInside(
|
||||||
|
iBox,
|
||||||
|
sourceBox //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isAbove = IsBoxAbove(
|
||||||
|
iBox,
|
||||||
|
sourceBox,
|
||||||
|
ignoreInside //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBelow = IsBoxBelow(
|
||||||
|
iBox,
|
||||||
|
sourceBox,
|
||||||
|
ignoreInside //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPricePassed =
|
||||||
|
//
|
||||||
|
isInside =
|
||||||
|
ignoreOutOfBox
|
||||||
|
? isInside
|
||||||
|
: isInside &&
|
||||||
|
(isIBullish
|
||||||
|
? isAbove
|
||||||
|
: isBelow)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!isPricePassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(dest);
|
||||||
|
if (HasChild(tmp))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmp,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (applySort)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
F *lastZone;
|
||||||
|
XBoxZone last;
|
||||||
|
count = ArraySize(dest);
|
||||||
|
if (HasChild(dest))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int idx = GetYoungest(dest);
|
||||||
|
if (IsValidIndex(idx))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
lastZone = dest[idx];
|
||||||
|
ArrayRemove(
|
||||||
|
dest,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(dest);
|
||||||
|
bool hasLastBox = ToBox(
|
||||||
|
last,
|
||||||
|
lastZone //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
F *iZone = dest[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone iBox;
|
||||||
|
bool hasBox = ToBox(
|
||||||
|
iBox,
|
||||||
|
iZone //
|
||||||
|
);
|
||||||
|
if (!hasBox)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isLastPassed =
|
||||||
|
last.IsValid() &&
|
||||||
|
(IsBullish(last.dir)
|
||||||
|
? IsBoxAbove(
|
||||||
|
iBox,
|
||||||
|
last,
|
||||||
|
true //
|
||||||
|
)
|
||||||
|
: IsBoxBelow(
|
||||||
|
iBox,
|
||||||
|
last,
|
||||||
|
true //
|
||||||
|
));
|
||||||
|
if (!isLastPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
lastZone = iZone;
|
||||||
|
bool hasLastBox = ToBox(
|
||||||
|
last,
|
||||||
|
lastZone //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
iZone,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (last.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
lastZone,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(dest);
|
||||||
|
if (HasChild(tmp))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmp,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmp);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FilterBoxes(
|
||||||
|
XBoxZone &source,
|
||||||
|
XBoxZone &dest[],
|
||||||
|
bool filterDirection = true,
|
||||||
|
bool filterFrom = true,
|
||||||
|
bool filterPrice = true,
|
||||||
|
bool ignoreOutOfBox = false,
|
||||||
|
bool applySort = false,
|
||||||
|
bool ignoreInside = true //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(dest);
|
||||||
|
if (!source.IsValid() ||
|
||||||
|
!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmp[];
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = dest[i];
|
||||||
|
ENUM_X_DIRECTION iDir = iBox.dir;
|
||||||
|
bool isIBullish = IsBullish(iDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterDirection)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isDirectionPassed =
|
||||||
|
source.dir == iDir;
|
||||||
|
if (!isDirectionPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterFrom)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isFromPassed = iBox.from > source.from;
|
||||||
|
if (!isFromPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (filterPrice)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isInside = IsBoxInside(
|
||||||
|
iBox,
|
||||||
|
source //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isAbove = IsBoxAbove(
|
||||||
|
iBox,
|
||||||
|
source,
|
||||||
|
ignoreInside //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBelow = IsBoxBelow(
|
||||||
|
iBox,
|
||||||
|
source,
|
||||||
|
ignoreInside //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPricePassed =
|
||||||
|
//
|
||||||
|
ignoreOutOfBox
|
||||||
|
? isInside
|
||||||
|
: isInside &&
|
||||||
|
(isIBullish
|
||||||
|
? isAbove
|
||||||
|
: isBelow)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!isPricePassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (HasChild(tmp))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmp,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (applySort)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone last;
|
||||||
|
count = ArraySize(dest);
|
||||||
|
if (HasChild(dest))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int idx = GetYoungest(dest);
|
||||||
|
if (IsValidIndex(idx))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
last = dest[idx];
|
||||||
|
ArrayRemove(
|
||||||
|
dest,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = dest[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isLastPassed =
|
||||||
|
last.IsValid() &&
|
||||||
|
(IsBullish(last.dir)
|
||||||
|
? IsBoxAbove(
|
||||||
|
iBox,
|
||||||
|
last,
|
||||||
|
true //
|
||||||
|
)
|
||||||
|
: IsBoxBelow(
|
||||||
|
iBox,
|
||||||
|
last,
|
||||||
|
true //
|
||||||
|
));
|
||||||
|
if (!isLastPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
last = iBox;
|
||||||
|
AddRef(
|
||||||
|
iBox,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (last.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
last,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (HasChild(tmp))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmp,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
typedef void (*TOnPOIEvent)(ENUM_XPOI_EVENTS event,
|
typedef void (*TOnPOIEvent)(ENUM_XPOI_EVENTS event,
|
||||||
XCBasePOI *param //
|
XCBasePOI *param //
|
||||||
@@ -9066,6 +9536,134 @@ void OrderedSortZones(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OrderedSortBoxes(
|
||||||
|
XBoxZone &items[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int count = ArraySize(items);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Youngest ...
|
||||||
|
int youngestIDX = GetYoungest(
|
||||||
|
items //
|
||||||
|
);
|
||||||
|
bool hasYoungest = IsValidSize(youngestIDX);
|
||||||
|
if (!hasYoungest)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone youngest = items[youngestIDX];
|
||||||
|
ArrayRemove(
|
||||||
|
items,
|
||||||
|
youngestIDX,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
count = ArraySize(items);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
youngest,
|
||||||
|
items //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!youngest.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION dir = youngest.dir;
|
||||||
|
bool isBullish = IsBullish(dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmp[];
|
||||||
|
XBoxZone last = youngest;
|
||||||
|
while (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Youngest of Collection ...
|
||||||
|
int idx = GetYoungest(items);
|
||||||
|
XBoxZone iChild = items[idx];
|
||||||
|
ArrayRemove(
|
||||||
|
items,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
count = ArraySize(items);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Direction Must be Same ...
|
||||||
|
ENUM_X_DIRECTION iDir = iChild.dir;
|
||||||
|
bool isSameDir = dir == iDir;
|
||||||
|
if (!isSameDir)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Creation time Sequence ...
|
||||||
|
bool isFromPassed = last.from > iChild.from;
|
||||||
|
if (!isFromPassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Order Block Place ...
|
||||||
|
bool isPlacePassed =
|
||||||
|
isBullish
|
||||||
|
? IsBoxBelow(
|
||||||
|
iChild,
|
||||||
|
last,
|
||||||
|
true // Ignore Inside ...
|
||||||
|
)
|
||||||
|
: IsBoxAbove(
|
||||||
|
iChild,
|
||||||
|
last,
|
||||||
|
true // Ignore Inside ...
|
||||||
|
);
|
||||||
|
if (!isPlacePassed)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update Last OB ...
|
||||||
|
last = iChild;
|
||||||
|
AddRef(
|
||||||
|
iChild,
|
||||||
|
tmp //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update Ordered Sorted Order Blocks ...
|
||||||
|
count = ArraySize(tmp);
|
||||||
|
if (IsValidSize(count))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmp,
|
||||||
|
items //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract Order Flows Swing Points ...
|
* Extract Order Flows Swing Points ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -427,6 +427,9 @@ class XC121SMCCycleHelper : public XCBase
|
|||||||
conditions.period = GetPeriod();
|
conditions.period = GetPeriod();
|
||||||
conditions.time = TimeCurrent();
|
conditions.time = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Consolidation Zones Implement here ...
|
||||||
|
|
||||||
//
|
//
|
||||||
result = conditions.IsValid();
|
result = conditions.IsValid();
|
||||||
|
|
||||||
|
|||||||
@@ -2403,7 +2403,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
|
|||||||
if (isPriceInQuarterOne)
|
if (isPriceInQuarterOne)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bullishPriority = X121SMC_XSUPDEMOBS_PRIORITY_WEAK;
|
bullishPriority = X121SMC_XSUPDEMOBS_PRIORITY_NONE;
|
||||||
bearishPriority = X121SMC_XSUPDEMOBS_PRIORITY_REGULAR;
|
bearishPriority = X121SMC_XSUPDEMOBS_PRIORITY_REGULAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2455,7 +2455,7 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bullishPriority = X121SMC_XSUPDEMOBS_PRIORITY_REGULAR;
|
bullishPriority = X121SMC_XSUPDEMOBS_PRIORITY_REGULAR;
|
||||||
bearishPriority = X121SMC_XSUPDEMOBS_PRIORITY_WEAK;
|
bearishPriority = X121SMC_XSUPDEMOBS_PRIORITY_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2985,40 +2985,72 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
|
|||||||
if (isLookingForBullish)
|
if (isLookingForBullish)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
obsCount = ExtractUnActivatedZones(
|
Copy(
|
||||||
analyseState.bullishOrderBlocks,
|
analyseState.bullishOrderBlocks,
|
||||||
obs //
|
obs //
|
||||||
);
|
);
|
||||||
hasOBs = IsValidSize(obsCount);
|
FilterZones(
|
||||||
|
insideDemandZone,
|
||||||
|
obs,
|
||||||
|
true, // Filter Direction ...
|
||||||
|
true, // Filter From ...
|
||||||
|
true, // Filter Price ...
|
||||||
|
true, // Ignore Out of Box ...
|
||||||
|
true, // Apply Sort ...
|
||||||
|
true // Ignore Inside ...
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
fvgsCount = ExtractUnActivatedZones(
|
Copy(
|
||||||
analyseState.bullishFairValueGaps,
|
analyseState.bullishFairValueGaps,
|
||||||
fvgs //
|
fvgs //
|
||||||
);
|
);
|
||||||
hasFVGs = IsValidSize(fvgsCount);
|
FilterZones(
|
||||||
|
insideDemandZone,
|
||||||
|
fvgs,
|
||||||
|
true, // Filter Direction ...
|
||||||
|
true, // Filter From ...
|
||||||
|
true, // Filter Price ...
|
||||||
|
true, // Ignore Out of Box ...
|
||||||
|
true, // Apply Sort ...
|
||||||
|
true // Ignore Inside ...
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
obsCount = ExtractUnActivatedZones(
|
Copy(
|
||||||
analyseState.bearishOrderBlocks,
|
analyseState.bearishOrderBlocks,
|
||||||
obs //
|
obs //
|
||||||
);
|
);
|
||||||
hasOBs = IsValidSize(obsCount);
|
FilterZones(
|
||||||
|
insideSupplyZone,
|
||||||
|
obs,
|
||||||
|
true, // Filter Direction ...
|
||||||
|
true, // Filter From ...
|
||||||
|
true, // Filter Price ...
|
||||||
|
false, // Ignore Out of Box ...
|
||||||
|
true, // Apply Sort ...
|
||||||
|
true // Ignore Inside ...
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
fvgsCount = ExtractUnActivatedZones(
|
Copy(
|
||||||
analyseState.bearishFairValueGaps,
|
analyseState.bearishFairValueGaps,
|
||||||
fvgs //
|
fvgs //
|
||||||
);
|
);
|
||||||
hasFVGs = IsValidSize(fvgsCount);
|
FilterZones(
|
||||||
|
insideSupplyZone,
|
||||||
|
fvgs,
|
||||||
|
true, // Filter Direction ...
|
||||||
|
true, // Filter From ...
|
||||||
|
true, // Filter Price ...
|
||||||
|
false, // Ignore Out of Box ...
|
||||||
|
true, // Apply Sort ...
|
||||||
|
true // Ignore Inside ...
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
OrderedSortZones(obs);
|
|
||||||
OrderedSortZones(fvgs);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
obsCount = ArraySize(obs);
|
obsCount = ArraySize(obs);
|
||||||
fvgsCount = ArraySize(fvgs);
|
fvgsCount = ArraySize(fvgs);
|
||||||
@@ -3026,6 +3058,42 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
|
|||||||
//
|
//
|
||||||
hasOBs = IsValidSize(obsCount);
|
hasOBs = IsValidSize(obsCount);
|
||||||
hasFVGs = IsValidSize(fvgsCount);
|
hasFVGs = IsValidSize(fvgsCount);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (hasOBs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < obsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
obs[i].To(cTime);
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawX121SMCXSupDemOBSOrderBlock(
|
||||||
|
obs[i],
|
||||||
|
analyseCycleHelper.mPOIDrawer //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (hasFVGs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < fvgsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
fvgs[i].To(cTime);
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawX121SMCXSupDemOBSFairValueGap(
|
||||||
|
fvgs[i],
|
||||||
|
analyseCycleHelper.mPOIDrawer //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
if (hasOBs ||
|
if (hasOBs ||
|
||||||
hasFVGs)
|
hasFVGs)
|
||||||
{
|
{
|
||||||
@@ -3210,8 +3278,9 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
|
|||||||
|
|
||||||
//
|
//
|
||||||
result = hasInsideZone ||
|
result = hasInsideZone ||
|
||||||
hasRejectedZone ||
|
hasRejectedZone;
|
||||||
isPriceRejected;
|
// ||
|
||||||
|
// isPriceRejected;
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user