last ...
This commit is contained in:
@@ -30,176 +30,6 @@
|
|||||||
//
|
//
|
||||||
// Definitions ...
|
// 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_REFINED = 4,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED = 5,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED = 6,
|
|
||||||
//
|
|
||||||
// Resistance ...
|
|
||||||
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED = 7,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED = 8,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED = 9,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED = 10,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED = 11,
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED = 12,
|
|
||||||
};
|
|
||||||
|
|
||||||
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_REFINED:
|
|
||||||
result = "MINOR_SUPPORT_REFINED";
|
|
||||||
break;
|
|
||||||
//
|
|
||||||
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED:
|
|
||||||
result = "MINOR_SUPPORT_BREAKED";
|
|
||||||
break;
|
|
||||||
//
|
|
||||||
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED:
|
|
||||||
result = "MINOR_SUPPORT_RETESTED";
|
|
||||||
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_REFINED:
|
|
||||||
result = "MINOR_RESISTANCE_REFINED";
|
|
||||||
break;
|
|
||||||
//
|
|
||||||
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED:
|
|
||||||
result = "MINOR_RESISTANCE_BREAKED";
|
|
||||||
break;
|
|
||||||
//
|
|
||||||
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED:
|
|
||||||
result = "MINOR_RESISTANCE_RETESTED";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int XExtractValids(
|
|
||||||
ENUM_X_DETECTOR_ZONE_ACTION &source[],
|
|
||||||
ENUM_X_DETECTOR_ZONE_ACTION &dest[] //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Prepare ...
|
|
||||||
XClean(dest);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Validate ...
|
|
||||||
bool has = HasChild(source);
|
|
||||||
if (!has)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Calculations ...
|
|
||||||
int count = ArraySize(source);
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
has = IsXValid(source[i]);
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Add(
|
|
||||||
source[i],
|
|
||||||
dest //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Size ...
|
|
||||||
result = ArraySize(dest);
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasXValid(ENUM_X_DETECTOR_ZONE_ACTION &source[])
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = HasChild(source);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
for (int i = 0; i < ArraySize(source); i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
result = IsXValid(source[i]);
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Implementation ...
|
// Implementation ...
|
||||||
class XCMarketPatternDetector : public XCBase
|
class XCMarketPatternDetector : public XCBase
|
||||||
@@ -2850,6 +2680,48 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
// Validate Analysis ...
|
// Validate Analysis ...
|
||||||
result = analysis.IsValid();
|
result = analysis.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update Quarter ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Update Quarter ...
|
||||||
|
UpdateZones(
|
||||||
|
bar,
|
||||||
|
analysis.quarterActions,
|
||||||
|
config.quarterZonesValidationLength, // Zones Validation Length ...
|
||||||
|
config.quarterZonesRequiredToStart, // Zones Count to Start Processing ...
|
||||||
|
config.quarterZoneDetectionLoopback // Zones Detection Loopback ...
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fill Quarter Props ...
|
||||||
|
analysis.majorSupport = majorSupport;
|
||||||
|
analysis.minorSupport = minorSupport;
|
||||||
|
analysis.quarter = CalculateQuarter();
|
||||||
|
analysis.majorResistance = majorResistance;
|
||||||
|
analysis.minorResistance = minorResistance;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update To Times ...
|
||||||
|
if (analysis.majorSupport.IsValid())
|
||||||
|
{
|
||||||
|
analysis.majorSupport.to = bar.time;
|
||||||
|
}
|
||||||
|
if (analysis.minorSupport.IsValid())
|
||||||
|
{
|
||||||
|
analysis.minorSupport.to = bar.time;
|
||||||
|
}
|
||||||
|
if (analysis.majorResistance.IsValid())
|
||||||
|
{
|
||||||
|
analysis.majorResistance.to = bar.time;
|
||||||
|
}
|
||||||
|
if (analysis.minorResistance.IsValid())
|
||||||
|
{
|
||||||
|
analysis.minorResistance.to = bar.time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Resources ...
|
// Cleanup Resources ...
|
||||||
iZone.Clean();
|
iZone.Clean();
|
||||||
@@ -3630,15 +3502,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Preparing Actions ...
|
// Actions Counting ...
|
||||||
if (!HasChild(actions))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Add(
|
|
||||||
X_DETECTOR_ZONE_ACTION_NONE,
|
|
||||||
actions //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
result = ArraySize(actions);
|
result = ArraySize(actions);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ void OnTick()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Bar Index ...
|
// Bar Index ...
|
||||||
int barIndex = 1;
|
int barIndex = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Signallers Calling OnTick ...
|
// Signallers Calling OnTick ...
|
||||||
|
|||||||
@@ -1300,6 +1300,15 @@ struct XPatternAnalysis
|
|||||||
ENUM_X_BAR_PATTERN patterns[]; // All Bars Exists Patterns ...
|
ENUM_X_BAR_PATTERN patterns[]; // All Bars Exists Patterns ...
|
||||||
ENUM_X_DIRECTION patternsDir[]; // Each Exists Patterns Directions ...
|
ENUM_X_DIRECTION patternsDir[]; // Each Exists Patterns Directions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Quarter Analysis ...
|
||||||
|
double quarter; // Premium Discount Verifier ...
|
||||||
|
XBoxZone majorSupport; // Major Support Zone ...
|
||||||
|
XBoxZone minorSupport; // Minor Support Zone ...
|
||||||
|
XBoxZone majorResistance; // Major Resistance Zone ...
|
||||||
|
XBoxZone minorResistance; // Minor Resistance Zone ...
|
||||||
|
ENUM_X_DETECTOR_ZONE_ACTION quarterActions[]; // Specified Quarter Actions based on Time ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XPatternAnalysis()
|
XPatternAnalysis()
|
||||||
@@ -1326,6 +1335,14 @@ struct XPatternAnalysis
|
|||||||
resistance.Clean();
|
resistance.Clean();
|
||||||
XClean(patternsDir);
|
XClean(patternsDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
quarter = 0;
|
||||||
|
XClean(quarterActions);
|
||||||
|
majorSupport.Clean();
|
||||||
|
minorSupport.Clean();
|
||||||
|
majorResistance.Clean();
|
||||||
|
minorResistance.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
ZeroMemory(this);
|
ZeroMemory(this);
|
||||||
}
|
}
|
||||||
@@ -1348,6 +1365,123 @@ struct XPatternAnalysis
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Quarter Actions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Major Support or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasMajorSupport()
|
||||||
|
{
|
||||||
|
return IsValid() &&
|
||||||
|
majorSupport.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Minor Support or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasMinorSupport()
|
||||||
|
{
|
||||||
|
return IsValid() &&
|
||||||
|
IsQuarterReady() &&
|
||||||
|
minorSupport.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Major Resistance or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasMajorResistance()
|
||||||
|
{
|
||||||
|
return IsValid() &&
|
||||||
|
majorResistance.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Minor Resistance or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasMinorResistance()
|
||||||
|
{
|
||||||
|
return IsValid() &&
|
||||||
|
IsQuarterReady() &&
|
||||||
|
minorResistance.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Zones Quarter Initialized ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsQuarterReady()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
return IsValid() &&
|
||||||
|
HasMajorSupport() &&
|
||||||
|
HasMajorResistance() &&
|
||||||
|
quarter > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Quarter Actions ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasQuarterActions()
|
||||||
|
{
|
||||||
|
return HasChild(quarterActions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Contains Specified Quarter Actions or not ...
|
||||||
|
*
|
||||||
|
* @param value: ENUM_X_DETECTOR_ZONE_ACTION, Specified Action ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasQuarterAction(ENUM_X_DETECTOR_ZONE_ACTION value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsXValid(value) &&
|
||||||
|
HasQuarterActions() &&
|
||||||
|
Contains(value, quarterActions);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Minor Support Retested or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsMinorSupportRetested()
|
||||||
|
{
|
||||||
|
return HasQuarterAction(X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Minor Resistance Retested or not ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsMinorResistanceRetested()
|
||||||
|
{
|
||||||
|
return HasQuarterAction(X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pattern Actions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
int Count(
|
int Count(
|
||||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
||||||
@@ -2308,6 +2442,12 @@ struct XPatternAnalysisConfig
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Quarter ...
|
||||||
|
int quarterZonesRequiredToStart;
|
||||||
|
int quarterZoneDetectionLoopback;
|
||||||
|
int quarterZonesValidationLength;
|
||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
int pvValidationLength;
|
int pvValidationLength;
|
||||||
@@ -2365,6 +2505,12 @@ struct XPatternAnalysisConfig
|
|||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// Quarter ...
|
||||||
|
quarterZonesRequiredToStart = 0;
|
||||||
|
quarterZoneDetectionLoopback = 0;
|
||||||
|
quarterZonesValidationLength = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
pvValidationLength = 0;
|
pvValidationLength = 0;
|
||||||
@@ -2416,6 +2562,12 @@ struct XPatternAnalysisConfig
|
|||||||
*/
|
*/
|
||||||
void Default()
|
void Default()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// Quarter ...
|
||||||
|
quarterZonesRequiredToStart = 20;
|
||||||
|
quarterZonesValidationLength = 3;
|
||||||
|
quarterZoneDetectionLoopback = 1500;
|
||||||
|
|
||||||
//
|
//
|
||||||
// PV ...
|
// PV ...
|
||||||
pvValidationLength = 5;
|
pvValidationLength = 5;
|
||||||
|
|||||||
@@ -285,6 +285,121 @@ int GetAllBarPatters(ENUM_X_BAR_PATTERN &dest[])
|
|||||||
return ArraySize(dest);
|
return ArraySize(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quarter Zones Actions ...
|
||||||
|
**/
|
||||||
|
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_REFINED = 4,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED = 5,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED = 6,
|
||||||
|
//
|
||||||
|
// Resistance ...
|
||||||
|
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_DETECTED = 7,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MAJOR_RESISTANCE_BREAKED = 8,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_DETECTED = 9,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_REFINED = 10,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED = 11,
|
||||||
|
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED = 12,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate an ENUM member ...
|
||||||
|
*
|
||||||
|
* @param value: ENUM_X_DETECTOR_ZONE_ACTION ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsXValid(ENUM_X_DETECTOR_ZONE_ACTION value)
|
||||||
|
{
|
||||||
|
return value != X_DETECTOR_ZONE_ACTION_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Pattern ENUM to String Representation ...
|
||||||
|
*
|
||||||
|
* @param value: ENUM_X_DETECTOR_ZONE_ACTION, member ...
|
||||||
|
*
|
||||||
|
* @return ( string )
|
||||||
|
*/
|
||||||
|
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_REFINED:
|
||||||
|
result = "MINOR_SUPPORT_REFINED";
|
||||||
|
break;
|
||||||
|
//
|
||||||
|
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_BREAKED:
|
||||||
|
result = "MINOR_SUPPORT_BREAKED";
|
||||||
|
break;
|
||||||
|
//
|
||||||
|
case X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED:
|
||||||
|
result = "MINOR_SUPPORT_RETESTED";
|
||||||
|
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_REFINED:
|
||||||
|
result = "MINOR_RESISTANCE_REFINED";
|
||||||
|
break;
|
||||||
|
//
|
||||||
|
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_BREAKED:
|
||||||
|
result = "MINOR_RESISTANCE_BREAKED";
|
||||||
|
break;
|
||||||
|
//
|
||||||
|
case X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED:
|
||||||
|
result = "MINOR_RESISTANCE_RETESTED";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Structures ...
|
// Structures ...
|
||||||
|
|
||||||
|
|||||||
@@ -348,187 +348,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Manage Zones of Pattern Detector ...
|
|
||||||
ENUM_X_DETECTOR_ZONE_ACTION zoneActions[];
|
|
||||||
int zoneActionsCount = poiDetector.UpdateZones(
|
|
||||||
iBar,
|
|
||||||
zoneActions,
|
|
||||||
3, // Validation Length ...
|
|
||||||
20, // Required Zones ...
|
|
||||||
1500 // Loopback ...
|
|
||||||
);
|
|
||||||
has = IsValidSize(zoneActionsCount);
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Sample Draws ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support ...
|
|
||||||
if (poiDetector.majorSupport.IsValid())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
|
||||||
iConfig.zonesWidth = 3;
|
|
||||||
|
|
||||||
//
|
|
||||||
poiDrawer.DrawZone(
|
|
||||||
poiDetector.majorSupport,
|
|
||||||
iConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (poiDetector.minorSupport.IsValid())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
|
||||||
iConfig.zonesStyle = STYLE_DASH;
|
|
||||||
|
|
||||||
//
|
|
||||||
poiDrawer.DrawZone(
|
|
||||||
poiDetector.minorSupport,
|
|
||||||
iConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Resistance ...
|
|
||||||
if (poiDetector.majorResistance.IsValid())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
|
||||||
iConfig.zonesWidth = 3;
|
|
||||||
|
|
||||||
//
|
|
||||||
poiDrawer.DrawZone(
|
|
||||||
poiDetector.majorResistance,
|
|
||||||
iConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (poiDetector.minorResistance.IsValid())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
|
||||||
iConfig.zonesStyle = STYLE_DASH;
|
|
||||||
|
|
||||||
//
|
|
||||||
poiDrawer.DrawZone(
|
|
||||||
poiDetector.minorResistance,
|
|
||||||
iConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Quarter Line ...
|
|
||||||
if (poiDetector.majorSupport.IsValid() &&
|
|
||||||
poiDetector.majorResistance.IsValid())
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double quarter = poiDetector.CalculateQuarter();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime quarterFrom = MathMin(poiDetector.majorResistance.from,
|
|
||||||
poiDetector.majorSupport.from);
|
|
||||||
datetime quarterTo = MathMax(poiDetector.majorResistance.to,
|
|
||||||
poiDetector.majorSupport.to);
|
|
||||||
string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom));
|
|
||||||
|
|
||||||
//
|
|
||||||
CChartObjectTrend *iObj;
|
|
||||||
has = poiDrawer.DrawTrendLine(
|
|
||||||
quarter,
|
|
||||||
quarterFrom,
|
|
||||||
quarter,
|
|
||||||
quarterTo,
|
|
||||||
iObj,
|
|
||||||
quarterName,
|
|
||||||
false, // Ray Right ...
|
|
||||||
false // Ray Left ...
|
|
||||||
);
|
|
||||||
if (has) {
|
|
||||||
//
|
|
||||||
iObj.Width(2);
|
|
||||||
iObj.Color(clrYellow);
|
|
||||||
|
|
||||||
//
|
|
||||||
poiDrawer.drawnObjects.Add(iObj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Actions for Debugging ...
|
|
||||||
has = HasXValid(zoneActions) &&
|
|
||||||
(Contains(
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED,
|
|
||||||
zoneActions) ||
|
|
||||||
Contains(
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED,
|
|
||||||
zoneActions));
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Draw Bar Arrow Based On Action ...
|
|
||||||
XPivot msPivot;
|
|
||||||
XPivot mrPivot;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support ReTest ...
|
|
||||||
has = Contains(
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED,
|
|
||||||
zoneActions //
|
|
||||||
);
|
|
||||||
has =
|
|
||||||
has &&
|
|
||||||
ToPivot(
|
|
||||||
iBar,
|
|
||||||
msPivot,
|
|
||||||
X_DIRECTION_BULLISH,
|
|
||||||
X_BAR_PATTERN_SUPPORT //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
poiDrawer.DrawPivot(
|
|
||||||
msPivot,
|
|
||||||
structureDrawConfig.drawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Resistance ReTest ...
|
|
||||||
has = Contains(
|
|
||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED,
|
|
||||||
zoneActions //
|
|
||||||
);
|
|
||||||
has =
|
|
||||||
has &&
|
|
||||||
ToPivot(
|
|
||||||
iBar,
|
|
||||||
mrPivot,
|
|
||||||
X_DIRECTION_BEARISH,
|
|
||||||
X_BAR_PATTERN_RESISTANCE //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
poiDrawer.DrawPivot(
|
|
||||||
mrPivot,
|
|
||||||
structureDrawConfig.drawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Cleanup Pivots ...
|
|
||||||
msPivot.Clean();
|
|
||||||
mrPivot.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
Print("Hot Zone Actions ...");
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Retrieve Conditions ...
|
// Retrieve Conditions ...
|
||||||
has = fimaHelper.GetConditions(
|
has = fimaHelper.GetConditions(
|
||||||
@@ -553,6 +372,111 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
structureConfig,
|
structureConfig,
|
||||||
barIndex //
|
barIndex //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sample Draws ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support ...
|
||||||
|
if (structure.barAnalysis.IsQuarterReady())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Majors ...
|
||||||
|
|
||||||
|
//
|
||||||
|
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||||
|
iConfig.zonesWidth = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
poiDrawer.DrawZone(
|
||||||
|
structure.barAnalysis.majorSupport,
|
||||||
|
iConfig //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
poiDrawer.DrawZone(
|
||||||
|
structure.barAnalysis.majorResistance,
|
||||||
|
iConfig //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Minors ...
|
||||||
|
|
||||||
|
//
|
||||||
|
if (structure.barAnalysis.HasMinorSupport())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||||
|
iConfig.zonesStyle = STYLE_DASH;
|
||||||
|
|
||||||
|
//
|
||||||
|
poiDrawer.DrawZone(
|
||||||
|
structure.barAnalysis.minorSupport,
|
||||||
|
iConfig //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (structure.barAnalysis.HasMinorResistance())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||||
|
iConfig.zonesStyle = STYLE_DASH;
|
||||||
|
|
||||||
|
//
|
||||||
|
poiDrawer.DrawZone(
|
||||||
|
structure.barAnalysis.minorResistance,
|
||||||
|
iConfig //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Quarter Draw ...
|
||||||
|
if (structure.barAnalysis.quarter > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
double quarter = structure.barAnalysis.quarter;
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime quarterFrom = MathMin(poiDetector.majorResistance.from,
|
||||||
|
poiDetector.majorSupport.from);
|
||||||
|
datetime quarterTo = iBar.time;
|
||||||
|
string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom));
|
||||||
|
|
||||||
|
//
|
||||||
|
CChartObjectTrend *iObj;
|
||||||
|
has = poiDrawer.DrawTrendLine(
|
||||||
|
quarter,
|
||||||
|
quarterFrom,
|
||||||
|
quarter,
|
||||||
|
quarterTo,
|
||||||
|
iObj,
|
||||||
|
quarterName,
|
||||||
|
false, // Ray Right ...
|
||||||
|
false // Ray Left ...
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iObj.Width(2);
|
||||||
|
iObj.Color(clrYellow);
|
||||||
|
|
||||||
|
//
|
||||||
|
poiDrawer.drawnObjects.Add(iObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Resistance ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Quarter Line ...
|
||||||
|
if (poiDetector.majorSupport.IsValid() &&
|
||||||
|
poiDetector.majorResistance.IsValid())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// poiDrawer.drawnObjects.Clear();
|
// poiDrawer.drawnObjects.Clear();
|
||||||
// poiDrawer.DrawMarketStructure(
|
// poiDrawer.DrawMarketStructure(
|
||||||
// structure,
|
// structure,
|
||||||
|
|||||||
@@ -427,6 +427,12 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector
|
|||||||
iPatternAnalysis,
|
iPatternAnalysis,
|
||||||
structure.barsAnalysis //
|
structure.barsAnalysis //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (i == barIndex)
|
||||||
|
{
|
||||||
|
structure.barAnalysis = iPatternAnalysis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -36,7 +36,8 @@
|
|||||||
struct XFIMAMarketStructure
|
struct XFIMAMarketStructure
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
XOHCL bar; // Spacified Start Bar for Analysing ...
|
XOHCL bar; // Spacified Start Bar for Analysing ...
|
||||||
|
XPatternAnalysis barAnalysis; // Structure Bar Pattern Analysis ...
|
||||||
|
|
||||||
//
|
//
|
||||||
XPivotAnalysis pvAnalysis; // PV Pivot Analysis Result ...
|
XPivotAnalysis pvAnalysis; // PV Pivot Analysis Result ...
|
||||||
@@ -62,6 +63,7 @@ struct XFIMAMarketStructure
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bar.Clean();
|
bar.Clean();
|
||||||
|
barAnalysis.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
pvAnalysis.Clean();
|
pvAnalysis.Clean();
|
||||||
@@ -83,7 +85,8 @@ struct XFIMAMarketStructure
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = bar.IsValid();
|
result = bar.IsValid() &&
|
||||||
|
barAnalysis.IsValid();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user