This commit is contained in:
2025-10-11 16:58:19 +03:30
parent cc0c0872bc
commit 85db6eeca1
3 changed files with 511 additions and 58 deletions
@@ -30,6 +30,84 @@
//
// Definitions ...
enum ENUM_X_DETECTOR_ZONE_ACTION
{
X_DETECTOR_ZONE_ACTION_NONE = 0,
//
// Support ...
X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED = 1,
X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED = 2,
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED = 3,
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED = 4,
//
// Resistance ...
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED = 5,
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED = 6,
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED = 7,
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED = 8,
};
bool IsXValid(ENUM_X_DETECTOR_ZONE_ACTION value)
{
return value != X_DETECTOR_ZONE_ACTION_NONE;
}
string ToXString(ENUM_X_DETECTOR_ZONE_ACTION value)
{
//
string result = NULL;
//
if (!IsXValid(value))
{
return result;
}
//
switch (value)
{
//
case X_DETECTOR_ZONE_ACTION_NONE:
result = "NONE";
break;
//
case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_DETECTED:
result = "MAJOR_SUPPORT_DETECTED";
break;
//
case X_DETECTOR_ZONE_ACTION_MAJOR_SUPPORT_BREAKED:
result = "MAJOR_SUPPORT_BREAKED";
break;
//
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_DETECTED:
result = "MINOR_SUPPORT_DETECTED";
break;
//
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED:
result = "MINOR_SUPPORT_BREAKED";
break;
//
case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED:
result = "MAJOR_RESISTANCE_DETECTED";
break;
//
case X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED:
result = "MAJOR_RESISTANCE_BREAKED";
break;
//
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED:
result = "MINOR_RESISTANCE_DETECTED";
break;
//
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED:
result = "MINOR_RESISTANCE_BREAKED";
break;
}
//
return result;
}
//
// Implementation ...
class XCMarketPatternDetector : public XCBase
@@ -40,6 +118,13 @@ class XCMarketPatternDetector : public XCBase
//
// Props ...
//
XBoxZone zones[];
XBoxZone majorSupport;
XBoxZone minorSupport;
XBoxZone majorResistance;
XBoxZone minorResistance;
//
// Constructor ...
XCMarketPatternDetector()
@@ -2661,6 +2746,124 @@ class XCMarketPatternDetector : public XCBase
return result;
}
int UpdateZones(
XOHCL &bar,
ENUM_X_DETECTOR_ZONE_ACTION &actions[],
int loopback = 1500 //
)
{
//
int result = 0;
//
// Prepare ...
XClean(actions);
//
// Normalize ...
loopback = NormalizeInt(loopback, 100);
//
// Validate ...
bool has = bar.IsValid();
if (!has)
{
return result;
}
//
int barIndex = bar.Index();
//
// Collect Zones ...
bool hasZone = HasChild(zones);
if (!hasZone) {
//
int start = barIndex;
int end = barIndex + loopback;
for (int i = start; i < end; i++) {
//
// Extract Validated Zones ...
}
}
//
// Supports ...
bool hasMajorSupport = majorSupport.IsValid();
bool hasMinorSupport = minorSupport.IsValid();
//
// Look For Major Support ...
if (!hasMajorSupport)
{
//
minorSupport.Clean();
hasMinorSupport = false;
}
//
// For Looking up Minor Support, we
// have to Ensure Major Support Exists ...
if (hasMajorSupport)
{
//
// Look for Minor Support ...
if (!hasMinorSupport)
{
}
//
// Refine exists Minor Support ...
else
{
}
}
//
// Resistances ...
bool hasMajorResistance = majorResistance.IsValid();
bool hasMinorResistance = minorResistance.IsValid();
//
// Look For Major Resistance ...
if (!hasMajorResistance)
{
//
minorResistance.Clean();
hasMinorResistance = false;
}
//
// For Looking up Minor Resistance, we
// have to Ensure Major Resistance Exists ...
if (hasMajorResistance)
{
//
// Look for Minor Resistance ...
if (!hasMinorResistance)
{
}
//
// Refine exists Minor Resistance ...
else
{
}
}
//
if (!HasChild(actions))
{
//
Add(
X_DETECTOR_ZONE_ACTION_NONE,
actions //
);
}
result = ArraySize(actions);
//
return result;
}
//
// Protected ...
protected: