Files
xMQL5/BKPS/14040218 XCAEA/XCAEA/Classes/xcaea.x-poi.drawer.class.mq5
T
2025-05-08 14:17:59 +03:30

932 lines
17 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Indicator
// -------------------------------------------------
// Name: XCXCAEAPOIDrawer ...
// Description: Class for XCAEA POI Drawer ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://saherelm.ir"
#property version "1.00"
#property description "SaherElm Class for XCAEA POI Drawer"
#property strict
//
// Imports ...
#include "../../Classes/x-saherelm.x-poi.drawer.class.mq5"
#include "../Classes/xcaea.x-poi.detector.class.mq5"
//
// Definitions ...
struct XCAPivotStyle
{
//
// Properties ...
int width;
color clr;
ENUM_LINE_STYLE style;
//
// Constructor ...
XCAPivotStyle()
{
Default();
}
//
// Tools ...
//
// Cleanup Model ...
void Clean()
{
//
width = 1;
clr = CLR_NONE;
style = STYLE_SOLID;
//
ZeroMemory(this);
}
//
// Default Props ...
void Default()
{
//
width = 1;
clr = CLR_NONE;
style = STYLE_SOLID;
}
};
//
// Implementations ...
class XCXCAEAPOIDrawer : public XCBase
{
//
// Public ...
public:
//
// Props ...
//
bool ignoreUpdateOSCTos;
//
// Drawers ...
bool drawPeakPivots;
bool drawValePivots;
bool drawFVGBullishPivots;
bool drawFVGBearishPivots;
bool drawTrendBullishPivots;
bool drawTrendBearishPivots;
//
// Styling ...
//
XCAPivotStyle defaultBullishStyle;
XCAPivotStyle defaultBearishStyle;
//
XCAPivotStyle peakPivotStyle;
XCAPivotStyle valePivotStyle;
//
XCAPivotStyle fvgBullishPivotStyle;
XCAPivotStyle fvgBearishPivotStyle;
//
XCAPivotStyle trendBullishPivotStyle;
XCAPivotStyle trendBearishPivotStyle;
//
// Constructors ...
XCXCAEAPOIDrawer(
XCXCAEAPOIDetector *_detector //
)
{
//
detector = _detector;
drawer = new XCPOIDrawer();
//
Default();
}
//
// De Constructors ...
~XCXCAEAPOIDrawer()
{
//
Clear();
//
ZeroMemory(drawer);
ZeroMemory(detector);
}
//
// Properties ...
//
// Tools ...
//
virtual void Default()
{
//
// Drawing ...
drawPeakPivots = false;
drawValePivots = false;
drawFVGBullishPivots = false;
drawFVGBearishPivots = false;
drawTrendBullishPivots = false;
drawTrendBearishPivots = false;
//
// Styling ...
//
// Bullish ...
defaultBullishStyle.width = 1;
defaultBullishStyle.clr = clrLime;
defaultBullishStyle.style = STYLE_SOLID;
//
// Bearish ...
defaultBearishStyle.width = 1;
defaultBearishStyle.clr = clrRed;
defaultBearishStyle.style = STYLE_SOLID;
//
// Pivots ...
//
// PV ...
peakPivotStyle = defaultBearishStyle;
valePivotStyle = defaultBullishStyle;
//
// FVG ...
fvgBullishPivotStyle = defaultBullishStyle;
fvgBearishPivotStyle = defaultBearishStyle;
//
// TREND ...
trendBullishPivotStyle = defaultBullishStyle;
trendBearishPivotStyle = defaultBearishStyle;
}
//
void Draw(datetime to = NULL)
{
//
// PV ...
DrawPeakPivots(to);
DrawValePivots(to);
//
// FVG ...
DrawFVGBullishPivots(to);
DrawFVGBearishPivots(to);
//
// TREND ...
DrawTrendBullishPivots(to);
DrawTrendBearishPivots(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_PEAK:
//
DrawPeakPivot(
box,
to //
);
break;
//
case XCA_VALE:
//
DrawValePivot(
box,
to //
);
break;
//
case XCA_FVG_BULL:
//
DrawFVGBullishPivot(
box,
to //
);
break;
//
case XCA_FVG_BEAR:
//
DrawFVGBearishPivot(
box,
to //
);
break;
//
case XCA_TREND_BULL:
//
DrawTrendBullishPivot(
box,
to //
);
break;
//
case XCA_TREND_BEAR:
//
DrawTrendBearishPivot(
box,
to //
);
break;
}
}
//
void DrawBoxes(
XBoxZone &boxes[],
datetime to = NULL //
)
{
//
bool has = HasChild(boxes);
if (!has)
{
return;
}
//
int count = ArraySize(boxes);
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = boxes[i];
//
// Detect Pivot Type ...
DrawBox(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void Clear()
{
//
// Cleanup Models ...
defaultBullishStyle.Clean();
defaultBearishStyle.Clean();
//
// Cleanup Styles ...
peakPivotStyle.Clean();
valePivotStyle.Clean();
fvgBullishPivotStyle.Clean();
fvgBearishPivotStyle.Clean();
trendBullishPivotStyle.Clean();
trendBearishPivotStyle.Clean();
//
// Cleanup Pivot Objects Holder ...
mPeakPivotObjects.Clear();
mValePivotObjects.Clear();
mFVGBullishPivotObjects.Clear();
mFVGBearishPivotObjects.Clear();
mTrendBullishPivotObjects.Clear();
mTrendBearishPivotObjects.Clear();
}
//
// Collection Drawers ...
//
void DrawPeakPivots(datetime to = NULL)
{
//
bool has = drawPeakPivots;
if (!has)
{
return;
}
//
has = detector.HasPeakPivots();
if (!has)
{
return;
}
//
int count = detector.CountPeakPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.peakPivots[i];
//
DrawPeakPivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void DrawValePivots(datetime to = NULL)
{
//
bool has = drawValePivots;
if (!has)
{
return;
}
//
has = detector.HasValePivots();
if (!has)
{
return;
}
//
int count = detector.CountValePivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.valePivots[i];
//
DrawValePivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void DrawFVGBullishPivots(datetime to = NULL)
{
//
bool has = drawFVGBullishPivots;
if (!has)
{
return;
}
//
has = detector.HasFVGBullishPivots();
if (!has)
{
return;
}
//
int count = detector.CountFVGBullishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.fvgBullishPivots[i];
//
DrawFVGBullishPivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void DrawFVGBearishPivots(datetime to = NULL)
{
//
bool has = drawFVGBearishPivots;
if (!has)
{
return;
}
//
has = detector.HasFVGBearishPivots();
if (!has)
{
return;
}
//
int count = detector.CountFVGBearishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.fvgBearishPivots[i];
//
DrawFVGBearishPivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void DrawTrendBullishPivots(datetime to = NULL)
{
//
bool has = drawTrendBullishPivots;
if (!has)
{
return;
}
//
has = detector.HasTrendBullishPivots();
if (!has)
{
return;
}
//
int count = detector.CountTrendBullishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.trendBullishPivots[i];
//
DrawTrendBullishPivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
void DrawTrendBearishPivots(datetime to = NULL)
{
//
bool has = drawTrendBearishPivots;
if (!has)
{
return;
}
//
has = detector.HasTrendBearishPivots();
if (!has)
{
return;
}
//
int count = detector.CountTrendBearishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = detector.trendBearishPivots[i];
//
DrawTrendBearishPivot(
iBox,
to //
);
//
iBox.Clean();
}
}
//
// One Item Drawers ...
//
void DrawPeakPivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawPeakPivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_PEAK) &&
item.dir == GetDirection(XCA_PEAK);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
peakPivotStyle //
);
//
// Store Object ...
mPeakPivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
void DrawValePivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawValePivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_VALE) &&
item.dir == GetDirection(XCA_VALE);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
valePivotStyle //
);
//
// Store Object ...
mValePivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
void DrawFVGBullishPivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawFVGBullishPivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_FVG_BULL) &&
item.dir == GetDirection(XCA_FVG_BULL);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
fvgBullishPivotStyle //
);
//
// Store Object ...
mFVGBullishPivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
void DrawFVGBearishPivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawFVGBearishPivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_FVG_BEAR) &&
item.dir == GetDirection(XCA_FVG_BEAR);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
fvgBearishPivotStyle //
);
//
// Store Object ...
mFVGBearishPivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
void DrawTrendBullishPivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawTrendBullishPivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_TREND_BULL) &&
item.dir == GetDirection(XCA_TREND_BULL);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
trendBullishPivotStyle //
);
//
// Store Object ...
mTrendBullishPivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
void DrawTrendBearishPivot(
XBoxZone &item,
datetime to = NULL //
)
{
//
bool has = drawTrendBearishPivots;
if (!has)
{
return;
}
//
has = item.IsValid() &&
item.type == GetBoxType(XCA_TREND_BEAR) &&
item.dir == GetDirection(XCA_TREND_BEAR);
if (!has)
{
return;
}
//
bool canUpdateTo = IsValid(to);
if (canUpdateTo)
{
item.to = to;
}
//
XCBoxObject *iObj;
has = drawer.DrawBox(
item,
iObj //
);
if (has)
{
//
// Style Object ...
ApplyPivotStyle(
iObj,
trendBearishPivotStyle //
);
//
// Store Object ...
mTrendBearishPivotObjects.Add(iObj);
}
//
ZeroMemory(iObj);
}
//
// Protected ...
protected:
//
// Props ...
//
void ApplyPivotStyle(
XCBoxObject *&object,
XCAPivotStyle &style //
)
{
//
if (object == NULL)
{
return;
}
//
object.BoxColor(style.clr);
object.BoxWidth(style.width);
object.BoxStyle(style.style);
}
//
// Prrivate ...
private:
//
// Props ...
//
XCPOIDrawer *drawer;
XCXCAEAPOIDetector *detector;
//
CArrayObj mPeakPivotObjects;
CArrayObj mValePivotObjects;
//
CArrayObj mFVGBullishPivotObjects;
CArrayObj mFVGBearishPivotObjects;
//
CArrayObj mTrendBullishPivotObjects;
CArrayObj mTrendBearishPivotObjects;
//
};
//