last ...
This commit is contained in:
@@ -1503,6 +1503,73 @@ class XCPOIDrawer : public XCBase
|
|||||||
XClean(tmps);
|
XClean(tmps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawTrendLine(
|
||||||
|
string name,
|
||||||
|
double fromPrice,
|
||||||
|
datetime fromTime,
|
||||||
|
double toPrice,
|
||||||
|
datetime toTime,
|
||||||
|
XPOIDrawConfig &config,
|
||||||
|
color clr = CLR_NONE //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
bool has =
|
||||||
|
IsXValid(name) &&
|
||||||
|
IsXValid(toTime) &&
|
||||||
|
IsXValid(fromTime) &&
|
||||||
|
NotEmptyZero(toPrice) &&
|
||||||
|
NotEmptyZero(fromPrice) &&
|
||||||
|
fromTime < toTime;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION trendDir =
|
||||||
|
fromPrice > toPrice
|
||||||
|
? X_DIRECTION_BEARISH
|
||||||
|
: fromPrice < toPrice
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_NONE;
|
||||||
|
color clrTrend =
|
||||||
|
(clr != CLR_NONE)
|
||||||
|
? clr
|
||||||
|
: IsXBullish(trendDir)
|
||||||
|
? config.bullishColor
|
||||||
|
: config.bearishColor;
|
||||||
|
|
||||||
|
//
|
||||||
|
CChartObjectTrend *object;
|
||||||
|
has = DrawTrendLine(
|
||||||
|
fromPrice,
|
||||||
|
fromTime,
|
||||||
|
toPrice,
|
||||||
|
toTime,
|
||||||
|
object,
|
||||||
|
name,
|
||||||
|
config.trendRayRight,
|
||||||
|
config.trendRayLeft //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Apply Style ...
|
||||||
|
object.Color(clr);
|
||||||
|
object.Width(config.trendWidth);
|
||||||
|
object.Style(config.trendStyle);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Save Object ...
|
||||||
|
drawnObjects.Add(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(object);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw Specified Pattern info ...
|
* Draw Specified Pattern info ...
|
||||||
*
|
*
|
||||||
@@ -2452,114 +2519,6 @@ class XCPOIDrawer : public XCBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Quarters ...
|
|
||||||
has = config.drawQuarterZones &&
|
|
||||||
analysis.IsQuarterReady();
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Draw Majors ...
|
|
||||||
has = config.drawQuarterMajors;
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Support ...
|
|
||||||
has = analysis.HasMajorSupport();
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
analysis.majorSupport.to = cTime;
|
|
||||||
DrawZone(
|
|
||||||
analysis.majorSupport,
|
|
||||||
config.quarterMajorsDrawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Resistance ...
|
|
||||||
has = analysis.HasMajorResistance();
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
analysis.majorResistance.to = cTime;
|
|
||||||
DrawZone(
|
|
||||||
analysis.majorResistance,
|
|
||||||
config.quarterMajorsDrawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Minors ...
|
|
||||||
if (config.drawQuarterMinors)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Support ...
|
|
||||||
has = analysis.HasMinorSupport();
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
analysis.minorSupport.to = cTime;
|
|
||||||
DrawZone(
|
|
||||||
analysis.minorSupport,
|
|
||||||
config.quarterMinorsDrawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Resistance ...
|
|
||||||
has = analysis.HasMinorResistance();
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
analysis.minorResistance.to = cTime;
|
|
||||||
DrawZone(
|
|
||||||
analysis.minorResistance,
|
|
||||||
config.quarterMinorsDrawConfig //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Quarter ...
|
|
||||||
if (config.drawQuarter &&
|
|
||||||
analysis.quarter > 0)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double quarter = analysis.quarter;
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime quarterFrom = MathMin(analysis.majorResistance.from,
|
|
||||||
analysis.majorSupport.from);
|
|
||||||
datetime quarterTo = cTime;
|
|
||||||
string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom));
|
|
||||||
|
|
||||||
//
|
|
||||||
CChartObjectTrend *iObj;
|
|
||||||
has = DrawTrendLine(
|
|
||||||
quarter,
|
|
||||||
quarterFrom,
|
|
||||||
quarter,
|
|
||||||
quarterTo,
|
|
||||||
iObj,
|
|
||||||
quarterName,
|
|
||||||
false, // Ray Right ...
|
|
||||||
false // Ray Left ...
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iObj.Width(config.quarterWidth);
|
|
||||||
iObj.Color(config.quarterColor);
|
|
||||||
iObj.Style(config.quarterStyle);
|
|
||||||
|
|
||||||
//
|
|
||||||
drawnObjects.Add(iObj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Resources ...
|
// Cleanup Resources ...
|
||||||
patternBar.Clean();
|
patternBar.Clean();
|
||||||
|
|||||||
@@ -1312,15 +1312,6 @@ 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()
|
||||||
@@ -1347,14 +1338,6 @@ 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);
|
||||||
}
|
}
|
||||||
@@ -1377,120 +1360,6 @@ 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 ...
|
// Pattern Actions ...
|
||||||
|
|
||||||
@@ -2884,18 +2753,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
//
|
|
||||||
// Quarters ...
|
|
||||||
bool drawQuarterZones; // Draw Quarters ...
|
|
||||||
bool drawQuarterMajors; // Draw Quarter Majors ...
|
|
||||||
bool drawQuarterMinors; // Draw Quarter Minors ...
|
|
||||||
bool drawQuarter; // Draw Quarter Trend Line ...
|
|
||||||
|
|
||||||
//
|
|
||||||
int quarterWidth;
|
|
||||||
color quarterColor;
|
|
||||||
ENUM_LINE_STYLE quarterStyle;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Patterns ...
|
// Patterns ...
|
||||||
|
|
||||||
@@ -2906,8 +2763,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
XPOIDrawConfig drawConfig;
|
XPOIDrawConfig drawConfig;
|
||||||
XPOIDrawConfig quarterMajorsDrawConfig;
|
|
||||||
XPOIDrawConfig quarterMinorsDrawConfig;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
@@ -2932,10 +2787,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
XClean(allowedDraws);
|
XClean(allowedDraws);
|
||||||
XClean(allowedDrawZones);
|
XClean(allowedDrawZones);
|
||||||
XClean(allowedDrawPivots);
|
XClean(allowedDrawPivots);
|
||||||
|
|
||||||
//
|
|
||||||
quarterMajorsDrawConfig.Clean();
|
|
||||||
quarterMinorsDrawConfig.Clean();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2946,19 +2797,10 @@ struct XPatternAnalysisDrawConfig
|
|||||||
//
|
//
|
||||||
// Drawing Configs ...
|
// Drawing Configs ...
|
||||||
drawConfig.Default();
|
drawConfig.Default();
|
||||||
quarterMajorsDrawConfig.Default();
|
|
||||||
quarterMinorsDrawConfig.Default();
|
|
||||||
ConfigureQuarterDraws();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
Full();
|
Full();
|
||||||
|
|
||||||
//
|
|
||||||
drawQuarter = true;
|
|
||||||
drawQuarterZones = true;
|
|
||||||
drawQuarterMajors = true;
|
|
||||||
drawQuarterMinors = true;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Remove Unused From Zones ...
|
// Remove Unused From Zones ...
|
||||||
Remove(X_BAR_PATTERN_PINNED, allowedDrawZones);
|
Remove(X_BAR_PATTERN_PINNED, allowedDrawZones);
|
||||||
@@ -2983,12 +2825,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
XClean(allowedDraws);
|
XClean(allowedDraws);
|
||||||
XClean(allowedDrawZones);
|
XClean(allowedDrawZones);
|
||||||
XClean(allowedDrawPivots);
|
XClean(allowedDrawPivots);
|
||||||
|
|
||||||
//
|
|
||||||
drawQuarter = false;
|
|
||||||
drawQuarterZones = false;
|
|
||||||
drawQuarterMajors = false;
|
|
||||||
drawQuarterMinors = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2996,12 +2832,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
*/
|
*/
|
||||||
void Full()
|
void Full()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
drawQuarter = true;
|
|
||||||
drawQuarterZones = true;
|
|
||||||
drawQuarterMajors = true;
|
|
||||||
drawQuarterMinors = true;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
GetAllBarPatters(allowedDraws);
|
GetAllBarPatters(allowedDraws);
|
||||||
GetAllBarPatters(allowedDrawZones);
|
GetAllBarPatters(allowedDrawZones);
|
||||||
@@ -3074,43 +2904,6 @@ struct XPatternAnalysisDrawConfig
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Drawer Configs ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PreConfigure Default Drawer Configs of Quarters ...
|
|
||||||
*/
|
|
||||||
void ConfigureQuarterDraws()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Quarter ...
|
|
||||||
quarterWidth = 2;
|
|
||||||
quarterStyle = STYLE_DOT;
|
|
||||||
quarterColor = clrYellow;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Majors ...
|
|
||||||
|
|
||||||
//
|
|
||||||
quarterMajorsDrawConfig.Default();
|
|
||||||
quarterMajorsDrawConfig = drawConfig;
|
|
||||||
|
|
||||||
//
|
|
||||||
quarterMajorsDrawConfig.zonesWidth = 3;
|
|
||||||
quarterMajorsDrawConfig.bearishColor = clrRed;
|
|
||||||
quarterMajorsDrawConfig.bullishColor = clrLime;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Minors ...
|
|
||||||
|
|
||||||
//
|
|
||||||
quarterMinorsDrawConfig.Default();
|
|
||||||
quarterMinorsDrawConfig = drawConfig;
|
|
||||||
|
|
||||||
//
|
|
||||||
quarterMinorsDrawConfig.zonesStyle = STYLE_DASH;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -307,121 +307,6 @@ 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 ...
|
||||||
|
|
||||||
@@ -1718,6 +1603,9 @@ struct XDirectionShift
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure Draws ...
|
||||||
|
**/
|
||||||
struct XPOIDrawConfig
|
struct XPOIDrawConfig
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1726,6 +1614,7 @@ struct XPOIDrawConfig
|
|||||||
//
|
//
|
||||||
color bullishColor;
|
color bullishColor;
|
||||||
color bearishColor;
|
color bearishColor;
|
||||||
|
color neuturalColor;
|
||||||
|
|
||||||
//
|
//
|
||||||
int arrowsWidth;
|
int arrowsWidth;
|
||||||
@@ -1741,6 +1630,12 @@ struct XPOIDrawConfig
|
|||||||
bool ignoreZonesAt;
|
bool ignoreZonesAt;
|
||||||
ENUM_LINE_STYLE zonesStyle;
|
ENUM_LINE_STYLE zonesStyle;
|
||||||
|
|
||||||
|
//
|
||||||
|
int trendWidth;
|
||||||
|
bool trendRayLeft;
|
||||||
|
bool trendRayRight;
|
||||||
|
ENUM_LINE_STYLE trendStyle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XPOIDrawConfig()
|
XPOIDrawConfig()
|
||||||
@@ -1759,6 +1654,7 @@ struct XPOIDrawConfig
|
|||||||
//
|
//
|
||||||
bullishColor = CLR_NONE;
|
bullishColor = CLR_NONE;
|
||||||
bearishColor = CLR_NONE;
|
bearishColor = CLR_NONE;
|
||||||
|
neuturalColor = CLR_NONE;
|
||||||
|
|
||||||
//
|
//
|
||||||
arrowsWidth = 0;
|
arrowsWidth = 0;
|
||||||
@@ -1773,6 +1669,12 @@ struct XPOIDrawConfig
|
|||||||
zonesFill = false;
|
zonesFill = false;
|
||||||
ignoreZonesAt = true;
|
ignoreZonesAt = true;
|
||||||
zonesStyle = STYLE_SOLID;
|
zonesStyle = STYLE_SOLID;
|
||||||
|
|
||||||
|
//
|
||||||
|
trendWidth = 0;
|
||||||
|
trendRayLeft = false;
|
||||||
|
trendRayRight = false;
|
||||||
|
trendStyle = STYLE_DOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1783,6 +1685,7 @@ struct XPOIDrawConfig
|
|||||||
//
|
//
|
||||||
bullishColor = clrAqua;
|
bullishColor = clrAqua;
|
||||||
bearishColor = clrMagenta;
|
bearishColor = clrMagenta;
|
||||||
|
neuturalColor = clrGray;
|
||||||
|
|
||||||
//
|
//
|
||||||
arrowsWidth = 1;
|
arrowsWidth = 1;
|
||||||
@@ -1797,6 +1700,12 @@ struct XPOIDrawConfig
|
|||||||
zonesFill = true;
|
zonesFill = true;
|
||||||
ignoreZonesAt = true;
|
ignoreZonesAt = true;
|
||||||
zonesStyle = STYLE_SOLID;
|
zonesStyle = STYLE_SOLID;
|
||||||
|
|
||||||
|
//
|
||||||
|
trendWidth = 2;
|
||||||
|
trendRayLeft = false;
|
||||||
|
trendRayRight = true;
|
||||||
|
trendStyle = STYLE_DOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1693,12 +1693,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validation Flags ...
|
||||||
|
bool validateBarInsideZone = true;
|
||||||
|
bool validateByBarPatterns = true;
|
||||||
|
bool validateByBarInsideATRBand = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Define Requirements ...
|
// Define Requirements ...
|
||||||
|
|
||||||
//
|
//
|
||||||
XOHCL pBar;
|
XOHCL pBar;
|
||||||
XOHCL p2Bar;
|
XOHCL p2Bar;
|
||||||
|
XOHCL p3Bar;
|
||||||
bool isBullish = false;
|
bool isBullish = false;
|
||||||
bool isBearish = false;
|
bool isBearish = false;
|
||||||
|
|
||||||
@@ -1707,11 +1714,14 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
result = bar.GetPreviousBar(pBar);
|
result = bar.GetPreviousBar(pBar);
|
||||||
result = result &&
|
result = result &&
|
||||||
pBar.GetPreviousBar(p2Bar);
|
pBar.GetPreviousBar(p2Bar);
|
||||||
|
result = result &&
|
||||||
|
p2Bar.GetPreviousBar(p3Bar);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
pBar.Clean();
|
pBar.Clean();
|
||||||
p2Bar.Clean();
|
p2Bar.Clean();
|
||||||
|
p3Bar.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -1720,11 +1730,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
// Do ...
|
// Do ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Retrieve pBar Patterns ...
|
||||||
|
XPatternAnalysis pBarPatterns;
|
||||||
|
poiDetector.AnalyseBarPatterns(
|
||||||
|
pBar,
|
||||||
|
pBarPatterns,
|
||||||
|
structureConfig.barsAnalysisConfig //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detecting OrderFlow ...
|
// Detecting OrderFlow ...
|
||||||
XBoxZone orderFlow[];
|
XBoxZone orderFlow[];
|
||||||
bool hasOrderFlow = poiDetector.HasOrderFlow(
|
bool hasOrderFlow = poiDetector.HasOrderFlow(
|
||||||
pBar,
|
p3Bar,
|
||||||
dir,
|
dir,
|
||||||
orderFlow,
|
orderFlow,
|
||||||
structureConfig.orderFlowValidation,
|
structureConfig.orderFlowValidation,
|
||||||
@@ -1736,6 +1755,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
structureConfig.loopback //
|
structureConfig.loopback //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
double atrBandMiddle = EMPTY_VALUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
isBullish = hasOrderFlow &&
|
isBullish = hasOrderFlow &&
|
||||||
IsXBullish(dir);
|
IsXBullish(dir);
|
||||||
@@ -1745,11 +1767,157 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
IsXBearish(dir);
|
IsXBearish(dir);
|
||||||
|
|
||||||
//
|
//
|
||||||
result = isBullish ||
|
// Summarize Result ...
|
||||||
isBearish;
|
result = isBullish || isBearish;
|
||||||
if (result) {
|
|
||||||
//
|
//
|
||||||
|
// Force Price of p2Bar is Inside Order Flow ...
|
||||||
|
if (result && validateBarInsideZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
double orderFlowUpper = 0;
|
||||||
|
double orderFlowLower = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
int idx = GetHighest(orderFlow);
|
||||||
|
if (IsValidIndex(idx))
|
||||||
|
{
|
||||||
|
orderFlowUpper = orderFlow[idx].upper;
|
||||||
|
}
|
||||||
|
idx = GetLowest(orderFlow);
|
||||||
|
if (IsValidIndex(idx))
|
||||||
|
{
|
||||||
|
orderFlowLower = orderFlow[idx].lower;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = NotEmptyZero(orderFlowUpper) &&
|
||||||
|
NotEmptyZero(orderFlowLower) &&
|
||||||
|
orderFlowUpper > orderFlowLower &&
|
||||||
|
(isBullish
|
||||||
|
? p2Bar.low < orderFlowUpper
|
||||||
|
: p2Bar.high > orderFlowLower);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Force PBar Has Pattern ...
|
||||||
|
if (result && validateByBarPatterns)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Analyse Bar Patterns ...
|
||||||
|
result = pBarPatterns.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
bool isPBarHasBullishPatterns =
|
||||||
|
// (bar.close > pBar.low ||
|
||||||
|
// bar.open > pBar.low) &&
|
||||||
|
(
|
||||||
|
//
|
||||||
|
pBarPatterns.IsPinned(X_DIRECTION_BULLISH) ||
|
||||||
|
pBarPatterns.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||||
|
pBarPatterns.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||||
|
pBarPatterns.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||||
|
pBarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
bool isPBarHasBearishPatterns =
|
||||||
|
// (bar.close < pBar.high ||
|
||||||
|
// bar.open < pBar.high) &&
|
||||||
|
(
|
||||||
|
//
|
||||||
|
pBarPatterns.IsPinned(X_DIRECTION_BEARISH) ||
|
||||||
|
pBarPatterns.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||||
|
pBarPatterns.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||||
|
pBarPatterns.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||||
|
pBarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
isBullish &&
|
||||||
|
isPBarHasBullishPatterns &&
|
||||||
|
!isPBarHasBearishPatterns;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
isBearish &&
|
||||||
|
isPBarHasBearishPatterns &&
|
||||||
|
!isPBarHasBullishPatterns;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Summarize Result ...
|
||||||
|
result = isBullish || isBearish;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Force P2Bar Place Checking based on ATR Band ...
|
||||||
|
if (result && validateByBarInsideATRBand)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
double atrBandUpper = fimaHelper.GetATRBandUpper(p2Bar.Index());
|
||||||
|
double atrBandLower = fimaHelper.GetATRBandLower(p2Bar.Index());
|
||||||
|
|
||||||
|
//
|
||||||
|
atrBandMiddle = atrBandLower + ((atrBandUpper - atrBandLower) / 2);
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
isBullish &&
|
||||||
|
NotEmptyZero(atrBandMiddle) &&
|
||||||
|
p2Bar.low < atrBandMiddle;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
isBearish &&
|
||||||
|
NotEmptyZero(atrBandMiddle) &&
|
||||||
|
p2Bar.high > atrBandMiddle;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Summarize Result ...
|
||||||
|
result = isBullish || isBearish;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
UpdateToTime(orderFlow, bar.time);
|
||||||
poiDrawer.DrawZones(orderFlow, structureDrawConfig.drawConfig);
|
poiDrawer.DrawZones(orderFlow, structureDrawConfig.drawConfig);
|
||||||
|
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw ATR Band Middle ...
|
||||||
|
if (NotEmptyZero(atrBandMiddle))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||||
|
iConfig.trendRayLeft = false;
|
||||||
|
iConfig.trendRayRight = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime to = bar.time;
|
||||||
|
datetime from = p2Bar.BeforeOn();
|
||||||
|
string trendName = "ATRBandMiddle_" + ToXString(TimeToSeconds(p2Bar.time));
|
||||||
|
poiDrawer.DrawTrendLine(
|
||||||
|
trendName,
|
||||||
|
atrBandMiddle,
|
||||||
|
from,
|
||||||
|
atrBandMiddle,
|
||||||
|
to,
|
||||||
|
iConfig,
|
||||||
|
clrYellow //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iConfig.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
Print("OrderFlow ...");
|
Print("OrderFlow ...");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1823,6 +1991,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
}
|
}
|
||||||
pBar.Clean();
|
pBar.Clean();
|
||||||
p2Bar.Clean();
|
p2Bar.Clean();
|
||||||
|
p3Bar.Clean();
|
||||||
|
XClean(orderFlow);
|
||||||
|
pBarPatterns.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ struct XFIMAMarketStructureConfig
|
|||||||
// Tools ...
|
// Tools ...
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function fulfills the will of the developer
|
* This function fulfills the will of the developer
|
||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
@@ -468,7 +468,7 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
// Tools ...
|
// Tools ...
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function fulfills the will of the developer
|
* This function fulfills the will of the developer
|
||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
@@ -574,7 +574,6 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
barAnalysisDrawConfig.drawConfig = drawConfig;
|
barAnalysisDrawConfig.drawConfig = drawConfig;
|
||||||
barAnalysisDrawConfig.ConfigureQuarterDraws();
|
|
||||||
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user