Complete Ticks Zones ...

This commit is contained in:
2024-11-14 20:57:29 +03:30
parent 53f3f94b75
commit b921b45eb2
4 changed files with 995 additions and 5 deletions
+326
View File
@@ -28,6 +28,7 @@
#include <ChartObjects/ChartObjectsArrows.mqh>
#include <ChartObjects/ChartObjectsLines.mqh>
#include <ChartObjects/ChartObjectsShapes.mqh>
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//
// Definitions ...
@@ -60,6 +61,8 @@ enum ENUM_XCHARTOBJECTS
X_BEARISH_ORDERBLOCK_OBJ = 9873,
X_BULLISH_FVG_OBJ = 9874,
X_BEARISH_FVG_OBJ = 9875,
X_TICK_ZONE_OBJ = 9876,
X_TICKS_ZONE_OBJ = 9877,
};
enum ENUM_X_CHART_IDS
@@ -1532,4 +1535,327 @@ class XCBearishFairValueGapObject : public XCZoneObject
}
};
//
// Zone Ticks ...
class XCTickZoneObject : public XCBaseObject
{
//
public:
//
/**
* Creator ...
*
* @param chart_id: Long, Specified Chart ID ...
* @param window: Integer, Specified Chart Window ID ...
* @param name: String, Specify Chart Object Identifier ...
* @param from: Datetime ...
* @param to: Datetime ...
* @param zone: XCTickZone instance ...
* @param prefix: String ...
*
* @return ( bool )
*/
bool Create(
long chart_id,
int window,
string name,
datetime from,
datetime to,
XCTickZone *zone,
string prefix = NULL //
)
{
//
bool result = false;
//
result =
IsValid(name) &&
zone.IsValid() &&
IsValid(to) &&
IsValid(from);
if (!result)
{
return result;
}
//
if (IsValid(prefix))
{
name = prefix + "_" + name;
}
//
string rectName = "TKZ_" + name;
result = mRect.Create(
chart_id,
rectName,
window,
from,
zone.high,
to,
zone.low //
);
if (!result)
{
return result;
}
//
string lblName = "LBL_" + name;
result = mLabel.Create(
chart_id,
lblName,
window,
from,
zone.high //
);
if (!result)
{
return result;
}
//
mLabel.Description(ToString(zone.percent) + "%");
//
ObjName(name);
//
return result;
}
//
// Virtual ...
/**
* Retrieve Object Type ...
*
* @return ( ENUM_XCHARTOBJECTS )
*/
virtual ENUM_XCHARTOBJECTS Type()
{
return X_TICK_ZONE_OBJ;
}
//
// Getter(s) / Setter(s) ...
/**
* Set Zone Width ...
*
* @param value: Integer ...
*/
void ZoneWidth(int value)
{
//
if (value < 1)
{
value = 1;
}
//
mRect.Width(value);
}
/**
* Set Zone Color ...
*
* @param value: Color ...
*/
void ZoneColor(color value)
{
mRect.Color(value);
}
/**
* Set Zone Style ...
*
* @param value: ENUM_LINE_STYLE member ...
*/
void ZoneStyle(ENUM_LINE_STYLE value)
{
mRect.Style(value);
}
/**
* Set Zone Fill ...
*
* @param value: Boolean ...
*/
void ZoneFill(bool value)
{
mRect.Fill(value);
}
/**
* Set Label Color ...
*
* @param value: Color ...
*/
void LabelColor(color value)
{
mLabel.Color(value);
}
/**
* Set Label Size ...
*
* @param value: Integer ...
*/
void LabelSize(int value)
{
mLabel.FontSize(value);
}
/**
* Set Label Font ...
*
* @param value: String ...
*/
void LabelFont(string value)
{
mLabel.Font(value);
}
/**
* Set Label Angle ...
*
* @param value: double ...
*/
void LabelAngle(double value)
{
mLabel.Angle(value);
}
//
private:
//
// Props ...
CChartObjectRectangle mRect;
CChartObjectLabel mLabel;
//
};
class XCTicksZoneObject : public XCBaseObject
{
//
public:
//
//
void ~XCTicksZoneObject()
{
mZones.Clear();
}
/**
* Creator ...
*
* @param chart_id: Long, Specified Chart ID ...
* @param window: Integer, Specified Chart Window ID ...
* @param zone: XCTicksZone instance ...
* @param prefix: String ...
*
* @return ( bool )
*/
bool Create(
long chart_id,
int window,
XCTicksZone &zone,
string prefix = NULL //
)
{
//
bool result = false;
//
result = zone.IsValid();
if (!result)
{
return result;
}
//
string name = zone.GetTag();
int levels = zone.Levels();
result = levels > 0;
if (!result)
{
return result;
}
//
for (int i = 0; i < levels; i++)
{
//
XCTickZone *iZone = zone.GetZone(i);
XCTickZoneObject *iObj;
iObj = new XCTickZoneObject();
result = iObj.Create(
chart_id,
window,
ToString(i) + "_" + name,
zone.From(),
zone.To(),
iZone,
prefix //
);
if (!result)
{
break;
}
//
mZones.Add(iObj);
}
//
if (result)
{
ObjName(name);
}
else
{
mZones.Clear();
}
//
return result;
}
//
// Virtual ...
/**
* Retrieve Object Type ...
*
* @return ( ENUM_XCHARTOBJECTS )
*/
virtual ENUM_XCHARTOBJECTS Type()
{
return X_TICKS_ZONE_OBJ;
}
//
// Getter(s) / Setter(s) ...
//
// Actions ...
void Destroy() {
mZones.Clear();
}
//
private:
//
// Props ...
CArrayObj mZones;
//
};
//
+161 -4
View File
@@ -437,6 +437,63 @@ class XCPOIDetector : public XCBaseAlert
mFairValueGapsSameBars = value;
}
//
// Ticks Zone ...
/**
* Get Ticks Range Levels ...
*
* @return ( int )
*/
int TicksRangeZoneLevel()
{
return mTicksRangeZoneLevel;
}
/**
* Set Ticks Range Levels ...
*
* @param value: Integer ...
*/
void TicksRangeZoneLevel(int value)
{
//
if (value < 2)
{
value = 2;
}
//
mTicksRangeZoneLevel = value;
}
/**
* Get Ticks Range Zone Loopback Period ...
*
* @return ( int )
*/
int TicksRangeZoneRange()
{
return mTicksRangeZoneRange;
}
/**
* Set Ticks Range Zone Loopback Period ...
*
* @param value: Integer ...
*/
void TicksRangeZoneRange(int value)
{
//
if (value < 7)
{
value = 7;
}
//
mTicksRangeZoneRange = value;
}
//
// Actions ...
@@ -952,6 +1009,20 @@ class XCPOIDetector : public XCBaseAlert
}
}
//
// Ticks Range Zone ...
int ticksLevels = TicksRangeZoneLevel();
int ticksRange = TicksRangeZoneRange();
if (ticksLevels > 0 &&
ticksRange > 0)
{
//
isDetected = DetectTicksZoneRange(cBar);
if (isDetected)
{
}
}
//
ValidatePOIs(cBar);
@@ -1109,6 +1180,10 @@ class XCPOIDetector : public XCBaseAlert
//
FairValueGapsSameBars(3);
//
TicksRangeZoneLevel(10);
TicksRangeZoneRange(144);
}
//
@@ -3283,7 +3358,8 @@ class XCPOIDetector : public XCBaseAlert
//
int sameBars = OrderBlocksSameBars();
if (sameBars < 0)
result = sameBars > 0;
if (!result)
{
return result;
}
@@ -3440,7 +3516,8 @@ class XCPOIDetector : public XCBaseAlert
//
int sameBars = OrderBlocksSameBars();
if (sameBars < 0)
result = sameBars > 0;
if (!result)
{
return result;
}
@@ -3601,7 +3678,8 @@ class XCPOIDetector : public XCBaseAlert
//
int sameBars = FairValueGapsSameBars();
if (sameBars < 0)
result = sameBars > 0;
if (!result)
{
return result;
}
@@ -3761,7 +3839,8 @@ class XCPOIDetector : public XCBaseAlert
//
int sameBars = FairValueGapsSameBars();
if (sameBars < 0)
result = sameBars > 0;
if (!result)
{
return result;
}
@@ -3896,6 +3975,84 @@ class XCPOIDetector : public XCBaseAlert
return result;
}
//
// Ticks Range Zones ...
int mTicksRangeZoneLevel; // Ticks Range Levels ...
int mTicksRangeZoneRange; // Ticks Range Zone Loopback Period ...
//
XCTicksZone *mTicksZone; // Ticks Zone ...
// XCTicksZoneObject *mTicksZoneObject; // Ticks Zone Object ...
/**
* Detect Ticks Zone Range ...
*
* @param bar: XOHCL instance ...
*
* @return ( bool )
*/
bool DetectTicksZoneRange(XOHCL &bar)
{
//
bool result = false;
//
result = bar.IsValid();
if (!result)
{
return result;
}
//
int ticksLevels = TicksRangeZoneLevel();
int ticksRange = TicksRangeZoneRange();
result = ticksLevels > 0 &&
ticksRange > 0;
if (!result)
{
return result;
}
//
int startBarIndex = bar.Index() + ticksRange;
XOHCL startBar;
result = startBar.Init(
bar.symbol,
bar.period,
startBarIndex //
);
if (!result)
{
return result;
}
//
mTicksZone = new XCTicksZone();
result = mTicksZone.Init(
startBar,
bar //
);
if (!result)
{
//
mTicksZone = NULL;
return result;
}
// //
// if (mTicksZoneObject != NULL)
// {
// mTicksZoneObject.Destroy();
// }
// mDrawer.CreateTicksZone(
// mTicksZone,
// mTicksZoneObject //
// );
//
return result;
}
//
// Liquidity Zones ...
+53
View File
@@ -2268,6 +2268,59 @@ class XCPOIDrawer : public XCBase
return result;
}
//
// Ticks Zone ...
bool CreateTicksZone(
XCTicksZone &zone,
XCTicksZoneObject *&object
) {
//
bool result = false;
//
result = zone.IsValid();
if (!result)
{
return result;
}
//
string prefix = Prefix();
long chartID = ChartIdentification();
int window = SubWindowIdentification();
//
// bool fill = BearishFVGFill();
// int width = BearishFVGWidth();
// color crl = BearishFVGColor();
// ENUM_LINE_STYLE style = BearishFVGStyle();
//
object = new XCTicksZoneObject();
result = object.Create(
chartID,
window,
zone,
prefix //
);
//
if (!result)
{
return result;
}
//
// object.ZoneFill(fill);
// object.ZoneColor(crl);
// object.ZoneWidth(width);
// object.ZoneStyle(style);
//
return result;
}
//
protected:
//