last ...
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user