last ...
This commit is contained in:
@@ -4330,6 +4330,339 @@ class XCPOIDrawer : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int DrawOBFVG(
|
||||||
|
XOBFVG &item,
|
||||||
|
XCBaseObject *&objects[],
|
||||||
|
//
|
||||||
|
bool drawOrderBlock = true,
|
||||||
|
bool drawFairValueGap = true,
|
||||||
|
bool drawSupplyZones = true,
|
||||||
|
bool drawDemandZones = true,
|
||||||
|
bool drawSupportZones = true,
|
||||||
|
bool drawResistanceZones = true,
|
||||||
|
//
|
||||||
|
bool drawOBStartedBar = true,
|
||||||
|
bool drawOBActivatedBar = true,
|
||||||
|
bool drawOBBreakedBar = true,
|
||||||
|
bool drawOBWorkedBar = true,
|
||||||
|
//
|
||||||
|
bool drawFVGStartedBar = true,
|
||||||
|
bool drawFVGActivatedBar = true,
|
||||||
|
bool drawFVGBreakedBar = true,
|
||||||
|
bool drawFVGWorkedBar = true,
|
||||||
|
//
|
||||||
|
// Order Block Specs ...
|
||||||
|
//
|
||||||
|
int widthOBStartedBar = 1,
|
||||||
|
color clrOBStartedBar = clrYellow,
|
||||||
|
ENUM_LINE_STYLE styleOBStartedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthOBActivatedBar = 1,
|
||||||
|
color clrOBActivatedBar = clrLime,
|
||||||
|
ENUM_LINE_STYLE styleOBActivatedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthOBBreakedBar = 1,
|
||||||
|
color clrOBBreakedBar = clrRed,
|
||||||
|
ENUM_LINE_STYLE styleOBBreakedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthOBWorkedBar = 1,
|
||||||
|
color clrOBWorkedBar = clrAqua,
|
||||||
|
ENUM_LINE_STYLE styleOBWorkedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
// Fair Value Gap Specs ...
|
||||||
|
//
|
||||||
|
int widthFVGStartedBar = 1,
|
||||||
|
color clrFVGStartedBar = clrYellow,
|
||||||
|
ENUM_LINE_STYLE styleFVGStartedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthFVGActivatedBar = 1,
|
||||||
|
color clrFVGActivatedBar = clrLime,
|
||||||
|
ENUM_LINE_STYLE styleFVGActivatedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthFVGBreakedBar = 1,
|
||||||
|
color clrFVGBreakedBar = clrRed,
|
||||||
|
ENUM_LINE_STYLE styleFVGBreakedBar = STYLE_SOLID,
|
||||||
|
//
|
||||||
|
int widthFVGWorkedBar = 1,
|
||||||
|
color clrFVGWorkedBar = clrAqua,
|
||||||
|
ENUM_LINE_STYLE styleFVGWorkedBar = STYLE_SOLID
|
||||||
|
//
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(objects);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isValid = item.IsValid();
|
||||||
|
if (!isValid)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = 0;
|
||||||
|
bool has = false;
|
||||||
|
bool isCreated = false;
|
||||||
|
XCBaseObject *tmpObjects[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Order Block ...
|
||||||
|
has = item.HasOB();
|
||||||
|
if (has &&
|
||||||
|
drawOrderBlock)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = DrawOrderBlock(
|
||||||
|
item.ob,
|
||||||
|
tmpObjects,
|
||||||
|
drawOBStartedBar,
|
||||||
|
drawOBActivatedBar,
|
||||||
|
drawOBBreakedBar,
|
||||||
|
drawOBWorkedBar,
|
||||||
|
widthOBStartedBar,
|
||||||
|
clrOBStartedBar,
|
||||||
|
styleOBStartedBar,
|
||||||
|
widthOBActivatedBar,
|
||||||
|
clrOBActivatedBar,
|
||||||
|
styleOBActivatedBar,
|
||||||
|
widthOBBreakedBar,
|
||||||
|
clrOBBreakedBar,
|
||||||
|
styleOBBreakedBar,
|
||||||
|
widthOBWorkedBar,
|
||||||
|
clrOBWorkedBar,
|
||||||
|
styleOBWorkedBar //
|
||||||
|
);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fair Value Gap ...
|
||||||
|
has = item.HasFVG();
|
||||||
|
if (has &&
|
||||||
|
drawFairValueGap)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = DrawFairValueGap(
|
||||||
|
item.fvg,
|
||||||
|
tmpObjects,
|
||||||
|
drawFVGStartedBar,
|
||||||
|
drawFVGActivatedBar,
|
||||||
|
drawFVGBreakedBar,
|
||||||
|
drawFVGWorkedBar,
|
||||||
|
widthFVGStartedBar,
|
||||||
|
clrFVGStartedBar,
|
||||||
|
styleFVGStartedBar,
|
||||||
|
widthFVGActivatedBar,
|
||||||
|
clrFVGActivatedBar,
|
||||||
|
styleFVGActivatedBar,
|
||||||
|
widthFVGBreakedBar,
|
||||||
|
clrFVGBreakedBar,
|
||||||
|
styleFVGBreakedBar,
|
||||||
|
widthFVGWorkedBar,
|
||||||
|
clrFVGWorkedBar,
|
||||||
|
styleFVGWorkedBar //
|
||||||
|
);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Supply Zones ...
|
||||||
|
has = item.HasSupplyZones();
|
||||||
|
if (has &&
|
||||||
|
drawSupplyZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = item.CountSupplyZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupplyZoneObject *iZoneObj;
|
||||||
|
has = CreateSupplyZone(
|
||||||
|
item.supplyZones[i],
|
||||||
|
iZoneObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
(XCBaseObject *)iZoneObj,
|
||||||
|
tmpObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(tmpObjects);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Demand Zones ...
|
||||||
|
has = item.HasDemandZones();
|
||||||
|
if (has &&
|
||||||
|
drawDemandZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = item.CountDemandZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCDemandZoneObject *iZoneObj;
|
||||||
|
has = CreateDemandZone(
|
||||||
|
item.demandZones[i],
|
||||||
|
iZoneObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
(XCBaseObject *)iZoneObj,
|
||||||
|
tmpObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(tmpObjects);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support Zones ...
|
||||||
|
has = item.HasSupportZones();
|
||||||
|
if (has &&
|
||||||
|
drawSupportZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = item.CountSupportZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCSupportZoneObject *iZoneObj;
|
||||||
|
has = CreateSupportZone(
|
||||||
|
item.supportZones[i],
|
||||||
|
iZoneObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
(XCBaseObject *)iZoneObj,
|
||||||
|
tmpObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(tmpObjects);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Resistance Zones ...
|
||||||
|
has = item.HasResistanceZones();
|
||||||
|
if (has &&
|
||||||
|
drawResistanceZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
count = item.CountResistanceZones();
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCResistanceZoneObject *iZoneObj;
|
||||||
|
has = CreateResistanceZone(
|
||||||
|
item.resistanceZones[i],
|
||||||
|
iZoneObj //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
(XCBaseObject *)iZoneObj,
|
||||||
|
tmpObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
count = ArraySize(tmpObjects);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Copy(
|
||||||
|
tmpObjects,
|
||||||
|
objects,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmpObjects);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(objects);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
protected:
|
protected:
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -6099,6 +6099,12 @@ struct XOBFVG
|
|||||||
//
|
//
|
||||||
ZeroMemory(ob);
|
ZeroMemory(ob);
|
||||||
ZeroMemory(fvg);
|
ZeroMemory(fvg);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(supplyZones);
|
||||||
|
Clean(demandZones);
|
||||||
|
Clean(supportZones);
|
||||||
|
Clean(resistanceZones);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -6181,13 +6187,15 @@ struct XOBFVG
|
|||||||
bool has = false;
|
bool has = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
if (HasOB())
|
has = HasOB();
|
||||||
|
if (has)
|
||||||
{
|
{
|
||||||
ob.To(value);
|
ob.To(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (HasFVG())
|
has = HasFVG();
|
||||||
|
if (has)
|
||||||
{
|
{
|
||||||
fvg.To(value);
|
fvg.To(value);
|
||||||
}
|
}
|
||||||
@@ -6199,7 +6207,7 @@ struct XOBFVG
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = CountSupplyZones();
|
count = CountSupplyZones();
|
||||||
for (int i = 0; count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
supplyZones[i].To(value);
|
supplyZones[i].To(value);
|
||||||
}
|
}
|
||||||
@@ -6212,7 +6220,7 @@ struct XOBFVG
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = CountDemandZones();
|
count = CountDemandZones();
|
||||||
for (int i = 0; count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
demandZones[i].To(value);
|
demandZones[i].To(value);
|
||||||
}
|
}
|
||||||
@@ -6225,7 +6233,7 @@ struct XOBFVG
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = CountSupportZones();
|
count = CountSupportZones();
|
||||||
for (int i = 0; count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
supportZones[i].To(value);
|
supportZones[i].To(value);
|
||||||
}
|
}
|
||||||
@@ -6238,7 +6246,7 @@ struct XOBFVG
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = CountResistanceZones();
|
count = CountResistanceZones();
|
||||||
for (int i = 0; count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
resistanceZones[i].To(value);
|
resistanceZones[i].To(value);
|
||||||
}
|
}
|
||||||
@@ -8365,6 +8373,7 @@ int GetLowest(
|
|||||||
* @param applyFromFilter: Filter Sorted Zones based on Occured Date ...
|
* @param applyFromFilter: Filter Sorted Zones based on Occured Date ...
|
||||||
* @param applyPlaceFilter: Filter Sorted Zones based on Occured Place ...
|
* @param applyPlaceFilter: Filter Sorted Zones based on Occured Place ...
|
||||||
* @param ignoreInside: Ignore Inside Sides of POI(s) Zones in Related to Order Block ...
|
* @param ignoreInside: Ignore Inside Sides of POI(s) Zones in Related to Order Block ...
|
||||||
|
* @param applyFromFilterForPOIs: Apply From Filter for Other POI(s) ...
|
||||||
*
|
*
|
||||||
* @return ( int )
|
* @return ( int )
|
||||||
*/
|
*/
|
||||||
@@ -8397,7 +8406,11 @@ int ExtractOBFVGZones(
|
|||||||
bool applyFromFilter = true,
|
bool applyFromFilter = true,
|
||||||
bool applyPlaceFilter = true,
|
bool applyPlaceFilter = true,
|
||||||
//
|
//
|
||||||
bool ignoreInside = true
|
bool ignoreInside = true,
|
||||||
|
//
|
||||||
|
bool detectInsideOBPOIs = true,
|
||||||
|
bool detectInsideFVGPOIs = true,
|
||||||
|
bool applyFromFilterForPOIs = true
|
||||||
//
|
//
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -9008,7 +9021,11 @@ int ExtractOBFVGZones(
|
|||||||
//
|
//
|
||||||
// Detecting Other POI(s) ...
|
// Detecting Other POI(s) ...
|
||||||
has = HasChild(dest);
|
has = HasChild(dest);
|
||||||
if (has)
|
bool canDetectPOIs =
|
||||||
|
detectInsideOBPOIs ||
|
||||||
|
detectInsideFVGPOIs;
|
||||||
|
if (has &&
|
||||||
|
canDetectPOIs)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
count = ArraySize(dest);
|
count = ArraySize(dest);
|
||||||
@@ -9024,27 +9041,15 @@ int ExtractOBFVGZones(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool isInsideOB = IsInsideDiff(
|
bool isInsideOB = IsInsideDiff(
|
||||||
stfState.supplyZones[j],
|
stfState.supplyZones[j],
|
||||||
dest[i].ob,
|
dest[i].ob //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.supplyZones[j],
|
|
||||||
dest[i].ob,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInsideFVG = IsInsideDiff(
|
bool isInsideFVG = IsInsideDiff(
|
||||||
stfState.supplyZones[j],
|
stfState.supplyZones[j],
|
||||||
dest[i].fvg,
|
dest[i].fvg //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.supplyZones[j],
|
|
||||||
dest[i].fvg,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInside = isInsideOB ||
|
bool isInside = isInsideOB ||
|
||||||
@@ -9052,10 +9057,34 @@ int ExtractOBFVGZones(
|
|||||||
if (isInside)
|
if (isInside)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bool isPassed =
|
||||||
stfState.supplyZones[j],
|
detectInsideOBPOIs
|
||||||
dest[i].supplyZones //
|
? isInsideOB
|
||||||
);
|
: detectInsideFVGPOIs
|
||||||
|
? isInsideFVG
|
||||||
|
: false;
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
isPassed =
|
||||||
|
!applyFromFilterForPOIs
|
||||||
|
? isPassed
|
||||||
|
: isInsideOB
|
||||||
|
? stfState.supplyZones[j].From() > dest[i].ob.From()
|
||||||
|
: isInsideFVG
|
||||||
|
? stfState.supplyZones[j].From() > dest[i].fvg.From()
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
stfState.supplyZones[j],
|
||||||
|
dest[i].supplyZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9070,27 +9099,15 @@ int ExtractOBFVGZones(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool isInsideOB = IsInsideDiff(
|
bool isInsideOB = IsInsideDiff(
|
||||||
stfState.demandZones[j],
|
stfState.demandZones[j],
|
||||||
dest[i].ob,
|
dest[i].ob //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.demandZones[j],
|
|
||||||
dest[i].ob,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInsideFVG = IsInsideDiff(
|
bool isInsideFVG = IsInsideDiff(
|
||||||
stfState.demandZones[j],
|
stfState.demandZones[j],
|
||||||
dest[i].fvg,
|
dest[i].fvg //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.demandZones[j],
|
|
||||||
dest[i].fvg,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInside = isInsideOB ||
|
bool isInside = isInsideOB ||
|
||||||
@@ -9098,10 +9115,34 @@ int ExtractOBFVGZones(
|
|||||||
if (isInside)
|
if (isInside)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bool isPassed =
|
||||||
stfState.demandZones[j],
|
detectInsideOBPOIs
|
||||||
dest[i].demandZones //
|
? isInsideOB
|
||||||
);
|
: detectInsideFVGPOIs
|
||||||
|
? isInsideFVG
|
||||||
|
: false;
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
isPassed =
|
||||||
|
!applyFromFilterForPOIs
|
||||||
|
? isPassed
|
||||||
|
: isInsideOB
|
||||||
|
? stfState.demandZones[j].From() > dest[i].ob.From()
|
||||||
|
: isInsideFVG
|
||||||
|
? stfState.demandZones[j].From() > dest[i].fvg.From()
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
stfState.demandZones[j],
|
||||||
|
dest[i].demandZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9116,27 +9157,15 @@ int ExtractOBFVGZones(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool isInsideOB = IsInsideDiff(
|
bool isInsideOB = IsInsideDiff(
|
||||||
stfState.supportZones[j],
|
stfState.supportZones[j],
|
||||||
dest[i].ob,
|
dest[i].ob //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.supportZones[j],
|
|
||||||
dest[i].ob,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInsideFVG = IsInsideDiff(
|
bool isInsideFVG = IsInsideDiff(
|
||||||
stfState.supportZones[j],
|
stfState.supportZones[j],
|
||||||
dest[i].fvg,
|
dest[i].fvg //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.supportZones[j],
|
|
||||||
dest[i].fvg,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInside = isInsideOB ||
|
bool isInside = isInsideOB ||
|
||||||
@@ -9144,10 +9173,34 @@ int ExtractOBFVGZones(
|
|||||||
if (isInside)
|
if (isInside)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bool isPassed =
|
||||||
stfState.supportZones[j],
|
detectInsideOBPOIs
|
||||||
dest[i].supportZones //
|
? isInsideOB
|
||||||
);
|
: detectInsideFVGPOIs
|
||||||
|
? isInsideFVG
|
||||||
|
: false;
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
isPassed =
|
||||||
|
!applyFromFilterForPOIs
|
||||||
|
? isPassed
|
||||||
|
: isInsideOB
|
||||||
|
? stfState.supportZones[j].From() > dest[i].ob.From()
|
||||||
|
: isInsideFVG
|
||||||
|
? stfState.supportZones[j].From() > dest[i].fvg.From()
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
stfState.supportZones[j],
|
||||||
|
dest[i].supportZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9162,27 +9215,15 @@ int ExtractOBFVGZones(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool isInsideOB = IsInsideDiff(
|
bool isInsideOB = IsInsideDiff(
|
||||||
stfState.resistanceZones[j],
|
stfState.resistanceZones[j],
|
||||||
dest[i].ob,
|
dest[i].ob //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.resistanceZones[j],
|
|
||||||
dest[i].ob,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInsideFVG = IsInsideDiff(
|
bool isInsideFVG = IsInsideDiff(
|
||||||
stfState.resistanceZones[j],
|
stfState.resistanceZones[j],
|
||||||
dest[i].fvg,
|
dest[i].fvg //
|
||||||
false //
|
);
|
||||||
) ||
|
|
||||||
IsInsideDiff(
|
|
||||||
stfState.resistanceZones[j],
|
|
||||||
dest[i].fvg,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInside = isInsideOB ||
|
bool isInside = isInsideOB ||
|
||||||
@@ -9190,10 +9231,34 @@ int ExtractOBFVGZones(
|
|||||||
if (isInside)
|
if (isInside)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bool isPassed =
|
||||||
stfState.resistanceZones[j],
|
detectInsideOBPOIs
|
||||||
dest[i].resistanceZones //
|
? isInsideOB
|
||||||
);
|
: detectInsideFVGPOIs
|
||||||
|
? isInsideFVG
|
||||||
|
: false;
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
isPassed =
|
||||||
|
!applyFromFilterForPOIs
|
||||||
|
? isPassed
|
||||||
|
: isInsideOB
|
||||||
|
? stfState.resistanceZones[j].From() > dest[i].ob.From()
|
||||||
|
: isInsideFVG
|
||||||
|
? stfState.resistanceZones[j].From() > dest[i].fvg.From()
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isPassed)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
stfState.resistanceZones[j],
|
||||||
|
dest[i].resistanceZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -236,6 +236,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
X_DIRECTION_BULLISH,
|
X_DIRECTION_BULLISH,
|
||||||
consolidationState,
|
consolidationState,
|
||||||
analyseState,
|
analyseState,
|
||||||
|
decisionState,
|
||||||
zIndex,
|
zIndex,
|
||||||
period,
|
period,
|
||||||
visionCycleHelper.mPOIDrawer //
|
visionCycleHelper.mPOIDrawer //
|
||||||
@@ -246,6 +247,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
X_DIRECTION_BEARISH,
|
X_DIRECTION_BEARISH,
|
||||||
consolidationState,
|
consolidationState,
|
||||||
analyseState,
|
analyseState,
|
||||||
|
decisionState,
|
||||||
zIndex,
|
zIndex,
|
||||||
period,
|
period,
|
||||||
visionCycleHelper.mPOIDrawer //
|
visionCycleHelper.mPOIDrawer //
|
||||||
|
|||||||
@@ -553,6 +553,7 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
ENUM_X_DIRECTION forDir,
|
ENUM_X_DIRECTION forDir,
|
||||||
XPOIState &htfState,
|
XPOIState &htfState,
|
||||||
XPOIState &mtfState,
|
XPOIState &mtfState,
|
||||||
|
XPOIState &stfState,
|
||||||
int barIndex = 0,
|
int barIndex = 0,
|
||||||
ENUM_TIMEFRAMES forPeriod = NULL,
|
ENUM_TIMEFRAMES forPeriod = NULL,
|
||||||
XCPOIDrawer *drawer = NULL //
|
XCPOIDrawer *drawer = NULL //
|
||||||
@@ -568,6 +569,7 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
IsValid(period) &&
|
IsValid(period) &&
|
||||||
htfState.HasChild() &&
|
htfState.HasChild() &&
|
||||||
mtfState.HasChild() &&
|
mtfState.HasChild() &&
|
||||||
|
stfState.HasChild() &&
|
||||||
HasDirection(forDir)
|
HasDirection(forDir)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
@@ -595,7 +597,7 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
count = ExtractOBFVGZones(
|
count = ExtractOBFVGZones(
|
||||||
htfState,
|
htfState,
|
||||||
mtfState,
|
mtfState,
|
||||||
mtfState,
|
stfState,
|
||||||
tmpOBFVGs,
|
tmpOBFVGs,
|
||||||
forDir,
|
forDir,
|
||||||
NULL, // For Period ...
|
NULL, // For Period ...
|
||||||
@@ -620,7 +622,11 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
true, // From Filter ...
|
true, // From Filter ...
|
||||||
true, // Place Filter ...
|
true, // Place Filter ...
|
||||||
//
|
//
|
||||||
true // Ignore Inside in Place Filter ...
|
true, // Ignore Inside in Place Filter ...
|
||||||
|
//
|
||||||
|
true, // Detect Inside OB POI(s) ...
|
||||||
|
false, // Detect Inside FVG POI(s) ...
|
||||||
|
true // Apply From Filter to Selected POI(s) ...
|
||||||
);
|
);
|
||||||
has = IsValidSize(count);
|
has = IsValidSize(count);
|
||||||
if (has)
|
if (has)
|
||||||
@@ -630,20 +636,151 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
XOBFVG iOBFVG = tmpOBFVGs[i];
|
XOBFVG iOBFVG = tmpOBFVGs[i];
|
||||||
|
iOBFVG.UpdateTo(NULL);
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (iOBFVG.HasOB())
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCBaseObject *iObj;
|
||||||
|
// drawer.CreateOrderBlock(
|
||||||
|
// iOBFVG.ob,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (stfState.HasSupplyZones())
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// for (int j = 0; j < stfState.CountSupplyZones(); j++)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCSupplyZone *jZone = stfState.supplyZones[j];
|
||||||
|
|
||||||
|
// //
|
||||||
|
// bool isInside = IsInsideDiff(
|
||||||
|
// jZone,
|
||||||
|
// iOBFVG.ob,
|
||||||
|
// false //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (isInside)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCSupplyZoneObject *iObj;
|
||||||
|
// drawer.CreateSupplyZone(
|
||||||
|
// jZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (stfState.HasDemandZones())
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// for (int j = 0; j < stfState.CountDemandZones(); j++)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCDemandZone *jZone = stfState.demandZones[j];
|
||||||
|
|
||||||
|
// //
|
||||||
|
// bool isInside = IsInsideDiff(
|
||||||
|
// jZone,
|
||||||
|
// iOBFVG.ob,
|
||||||
|
// false //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (isInside)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCDemandZoneObject *iObj;
|
||||||
|
// drawer.CreateDemandZone(
|
||||||
|
// jZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (stfState.HasSupportZones())
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// for (int j = 0; j < stfState.CountSupportZones(); j++)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCSupportZone *jZone = stfState.supportZones[j];
|
||||||
|
|
||||||
|
// //
|
||||||
|
// bool isInside = IsInsideDiff(
|
||||||
|
// jZone,
|
||||||
|
// iOBFVG.ob,
|
||||||
|
// false //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (isInside)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCSupportZoneObject *iObj;
|
||||||
|
// drawer.CreateSupportZone(
|
||||||
|
// jZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (stfState.HasResistanceZones())
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// for (int j = 0; j < stfState.CountResistanceZones(); j++)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCResistanceZone *jZone = stfState.resistanceZones[j];
|
||||||
|
|
||||||
|
// //
|
||||||
|
// bool isInside = IsInsideDiff(
|
||||||
|
// jZone,
|
||||||
|
// iOBFVG.ob,
|
||||||
|
// false //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// if (isInside)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XCResistanceZoneObject *iObj;
|
||||||
|
// drawer.CreateResistanceZone(
|
||||||
|
// jZone,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBaseObject *iOBObjs[];
|
XCBaseObject *drawnObjects[];
|
||||||
int drawnCount = drawer.DrawOrderBlock(
|
int drawnObjectsCount = drawer.DrawOBFVG(
|
||||||
iOBFVG.ob,
|
iOBFVG,
|
||||||
iOBObjs //
|
drawnObjects,
|
||||||
|
//
|
||||||
|
true, // Draw Order Block ...
|
||||||
|
true, // Draw Fair Value Gap ...
|
||||||
|
true, // Draw Supply Zones ...
|
||||||
|
true, // Draw Demand Zones ...
|
||||||
|
true, // Draw Support Zones ...
|
||||||
|
true // Draw Resistance Zones ...
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
XCBaseObject *iFVGObjs[];
|
iOBFVG.Clean();
|
||||||
drawnCount = drawer.DrawFairValueGap(
|
|
||||||
iOBFVG.fvg,
|
|
||||||
iFVGObjs //
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user