last ...
This commit is contained in:
@@ -1503,6 +1503,73 @@ class XCPOIDrawer : public XCBase
|
||||
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 ...
|
||||
*
|
||||
@@ -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 ...
|
||||
patternBar.Clean();
|
||||
|
||||
@@ -1312,15 +1312,6 @@ struct XPatternAnalysis
|
||||
ENUM_X_BAR_PATTERN patterns[]; // All Bars Exists Patterns ...
|
||||
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 ...
|
||||
XPatternAnalysis()
|
||||
@@ -1347,14 +1338,6 @@ struct XPatternAnalysis
|
||||
resistance.Clean();
|
||||
XClean(patternsDir);
|
||||
|
||||
//
|
||||
quarter = 0;
|
||||
XClean(quarterActions);
|
||||
majorSupport.Clean();
|
||||
minorSupport.Clean();
|
||||
majorResistance.Clean();
|
||||
minorResistance.Clean();
|
||||
|
||||
//
|
||||
ZeroMemory(this);
|
||||
}
|
||||
@@ -1377,120 +1360,6 @@ struct XPatternAnalysis
|
||||
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 ...
|
||||
|
||||
@@ -2884,18 +2753,6 @@ struct XPatternAnalysisDrawConfig
|
||||
//
|
||||
// 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 ...
|
||||
|
||||
@@ -2906,8 +2763,6 @@ struct XPatternAnalysisDrawConfig
|
||||
|
||||
//
|
||||
XPOIDrawConfig drawConfig;
|
||||
XPOIDrawConfig quarterMajorsDrawConfig;
|
||||
XPOIDrawConfig quarterMinorsDrawConfig;
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
@@ -2932,10 +2787,6 @@ struct XPatternAnalysisDrawConfig
|
||||
XClean(allowedDraws);
|
||||
XClean(allowedDrawZones);
|
||||
XClean(allowedDrawPivots);
|
||||
|
||||
//
|
||||
quarterMajorsDrawConfig.Clean();
|
||||
quarterMinorsDrawConfig.Clean();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2946,19 +2797,10 @@ struct XPatternAnalysisDrawConfig
|
||||
//
|
||||
// Drawing Configs ...
|
||||
drawConfig.Default();
|
||||
quarterMajorsDrawConfig.Default();
|
||||
quarterMinorsDrawConfig.Default();
|
||||
ConfigureQuarterDraws();
|
||||
|
||||
//
|
||||
Full();
|
||||
|
||||
//
|
||||
drawQuarter = true;
|
||||
drawQuarterZones = true;
|
||||
drawQuarterMajors = true;
|
||||
drawQuarterMinors = true;
|
||||
|
||||
//
|
||||
// Remove Unused From Zones ...
|
||||
Remove(X_BAR_PATTERN_PINNED, allowedDrawZones);
|
||||
@@ -2983,12 +2825,6 @@ struct XPatternAnalysisDrawConfig
|
||||
XClean(allowedDraws);
|
||||
XClean(allowedDrawZones);
|
||||
XClean(allowedDrawPivots);
|
||||
|
||||
//
|
||||
drawQuarter = false;
|
||||
drawQuarterZones = false;
|
||||
drawQuarterMajors = false;
|
||||
drawQuarterMinors = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2996,12 +2832,6 @@ struct XPatternAnalysisDrawConfig
|
||||
*/
|
||||
void Full()
|
||||
{
|
||||
//
|
||||
drawQuarter = true;
|
||||
drawQuarterZones = true;
|
||||
drawQuarterMajors = true;
|
||||
drawQuarterMinors = true;
|
||||
|
||||
//
|
||||
GetAllBarPatters(allowedDraws);
|
||||
GetAllBarPatters(allowedDrawZones);
|
||||
@@ -3074,43 +2904,6 @@ struct XPatternAnalysisDrawConfig
|
||||
//
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ...
|
||||
|
||||
@@ -1718,6 +1603,9 @@ struct XDirectionShift
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Configure Draws ...
|
||||
**/
|
||||
struct XPOIDrawConfig
|
||||
{
|
||||
//
|
||||
@@ -1726,6 +1614,7 @@ struct XPOIDrawConfig
|
||||
//
|
||||
color bullishColor;
|
||||
color bearishColor;
|
||||
color neuturalColor;
|
||||
|
||||
//
|
||||
int arrowsWidth;
|
||||
@@ -1741,6 +1630,12 @@ struct XPOIDrawConfig
|
||||
bool ignoreZonesAt;
|
||||
ENUM_LINE_STYLE zonesStyle;
|
||||
|
||||
//
|
||||
int trendWidth;
|
||||
bool trendRayLeft;
|
||||
bool trendRayRight;
|
||||
ENUM_LINE_STYLE trendStyle;
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
XPOIDrawConfig()
|
||||
@@ -1759,6 +1654,7 @@ struct XPOIDrawConfig
|
||||
//
|
||||
bullishColor = CLR_NONE;
|
||||
bearishColor = CLR_NONE;
|
||||
neuturalColor = CLR_NONE;
|
||||
|
||||
//
|
||||
arrowsWidth = 0;
|
||||
@@ -1773,6 +1669,12 @@ struct XPOIDrawConfig
|
||||
zonesFill = false;
|
||||
ignoreZonesAt = true;
|
||||
zonesStyle = STYLE_SOLID;
|
||||
|
||||
//
|
||||
trendWidth = 0;
|
||||
trendRayLeft = false;
|
||||
trendRayRight = false;
|
||||
trendStyle = STYLE_DOT;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1783,6 +1685,7 @@ struct XPOIDrawConfig
|
||||
//
|
||||
bullishColor = clrAqua;
|
||||
bearishColor = clrMagenta;
|
||||
neuturalColor = clrGray;
|
||||
|
||||
//
|
||||
arrowsWidth = 1;
|
||||
@@ -1797,6 +1700,12 @@ struct XPOIDrawConfig
|
||||
zonesFill = true;
|
||||
ignoreZonesAt = true;
|
||||
zonesStyle = STYLE_SOLID;
|
||||
|
||||
//
|
||||
trendWidth = 2;
|
||||
trendRayLeft = false;
|
||||
trendRayRight = true;
|
||||
trendStyle = STYLE_DOT;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -1693,12 +1693,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validation Flags ...
|
||||
bool validateBarInsideZone = true;
|
||||
bool validateByBarPatterns = true;
|
||||
bool validateByBarInsideATRBand = true;
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
XOHCL p3Bar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
@@ -1707,11 +1714,14 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
result = result &&
|
||||
pBar.GetPreviousBar(p2Bar);
|
||||
result = result &&
|
||||
p2Bar.GetPreviousBar(p3Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -1720,11 +1730,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
//
|
||||
// Do ...
|
||||
|
||||
//
|
||||
// Retrieve pBar Patterns ...
|
||||
XPatternAnalysis pBarPatterns;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarPatterns,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Detecting OrderFlow ...
|
||||
XBoxZone orderFlow[];
|
||||
bool hasOrderFlow = poiDetector.HasOrderFlow(
|
||||
pBar,
|
||||
p3Bar,
|
||||
dir,
|
||||
orderFlow,
|
||||
structureConfig.orderFlowValidation,
|
||||
@@ -1736,6 +1755,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
structureConfig.loopback //
|
||||
);
|
||||
|
||||
//
|
||||
double atrBandMiddle = EMPTY_VALUE;
|
||||
|
||||
//
|
||||
isBullish = hasOrderFlow &&
|
||||
IsXBullish(dir);
|
||||
@@ -1745,11 +1767,157 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
IsXBearish(dir);
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result) {
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
|
||||
//
|
||||
// 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.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 ...");
|
||||
}
|
||||
|
||||
@@ -1823,6 +1991,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
}
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
XClean(orderFlow);
|
||||
pBarPatterns.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
@@ -334,7 +334,7 @@ struct XFIMAMarketStructureConfig
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* This function fulfills the will of the developer
|
||||
* This function fulfills the will of the developer
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
@@ -468,7 +468,7 @@ struct XFIMAMarketStructureDrawerConfig
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* This function fulfills the will of the developer
|
||||
* This function fulfills the will of the developer
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
@@ -574,7 +574,6 @@ struct XFIMAMarketStructureDrawerConfig
|
||||
{
|
||||
//
|
||||
barAnalysisDrawConfig.drawConfig = drawConfig;
|
||||
barAnalysisDrawConfig.ConfigureQuarterDraws();
|
||||
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user