last ...
This commit is contained in:
@@ -30,176 +30,6 @@
|
||||
//
|
||||
// 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 ...
|
||||
class XCMarketPatternDetector : public XCBase
|
||||
@@ -2850,6 +2680,48 @@ class XCMarketPatternDetector : public XCBase
|
||||
// Validate Analysis ...
|
||||
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 ...
|
||||
iZone.Clean();
|
||||
@@ -3630,15 +3502,7 @@ class XCMarketPatternDetector : public XCBase
|
||||
}
|
||||
|
||||
//
|
||||
// Preparing Actions ...
|
||||
if (!HasChild(actions))
|
||||
{
|
||||
//
|
||||
Add(
|
||||
X_DETECTOR_ZONE_ACTION_NONE,
|
||||
actions //
|
||||
);
|
||||
}
|
||||
// Actions Counting ...
|
||||
result = ArraySize(actions);
|
||||
|
||||
//
|
||||
|
||||
@@ -512,7 +512,7 @@ void OnTick()
|
||||
|
||||
//
|
||||
// Bar Index ...
|
||||
int barIndex = 1;
|
||||
int barIndex = 0;
|
||||
|
||||
//
|
||||
// Signallers Calling OnTick ...
|
||||
|
||||
@@ -1300,6 +1300,15 @@ 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()
|
||||
@@ -1326,6 +1335,14 @@ struct XPatternAnalysis
|
||||
resistance.Clean();
|
||||
XClean(patternsDir);
|
||||
|
||||
//
|
||||
quarter = 0;
|
||||
XClean(quarterActions);
|
||||
majorSupport.Clean();
|
||||
minorSupport.Clean();
|
||||
majorResistance.Clean();
|
||||
minorResistance.Clean();
|
||||
|
||||
//
|
||||
ZeroMemory(this);
|
||||
}
|
||||
@@ -1348,6 +1365,123 @@ 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 ...
|
||||
|
||||
//
|
||||
int Count(
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
||||
@@ -2308,6 +2442,12 @@ struct XPatternAnalysisConfig
|
||||
//
|
||||
// Props ...
|
||||
|
||||
//
|
||||
// Quarter ...
|
||||
int quarterZonesRequiredToStart;
|
||||
int quarterZoneDetectionLoopback;
|
||||
int quarterZonesValidationLength;
|
||||
|
||||
//
|
||||
// PV ...
|
||||
int pvValidationLength;
|
||||
@@ -2365,6 +2505,12 @@ struct XPatternAnalysisConfig
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
// Quarter ...
|
||||
quarterZonesRequiredToStart = 0;
|
||||
quarterZoneDetectionLoopback = 0;
|
||||
quarterZonesValidationLength = 0;
|
||||
|
||||
//
|
||||
// PV ...
|
||||
pvValidationLength = 0;
|
||||
@@ -2416,6 +2562,12 @@ struct XPatternAnalysisConfig
|
||||
*/
|
||||
void Default()
|
||||
{
|
||||
//
|
||||
// Quarter ...
|
||||
quarterZonesRequiredToStart = 20;
|
||||
quarterZonesValidationLength = 3;
|
||||
quarterZoneDetectionLoopback = 1500;
|
||||
|
||||
//
|
||||
// PV ...
|
||||
pvValidationLength = 5;
|
||||
|
||||
@@ -285,6 +285,121 @@ 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 ...
|
||||
|
||||
|
||||
@@ -348,187 +348,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
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 ...
|
||||
has = fimaHelper.GetConditions(
|
||||
@@ -553,6 +372,111 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
structureConfig,
|
||||
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.DrawMarketStructure(
|
||||
// structure,
|
||||
|
||||
@@ -427,6 +427,12 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector
|
||||
iPatternAnalysis,
|
||||
structure.barsAnalysis //
|
||||
);
|
||||
|
||||
//
|
||||
if (i == barIndex)
|
||||
{
|
||||
structure.barAnalysis = iPatternAnalysis;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
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 ...
|
||||
@@ -62,6 +63,7 @@ struct XFIMAMarketStructure
|
||||
{
|
||||
//
|
||||
bar.Clean();
|
||||
barAnalysis.Clean();
|
||||
|
||||
//
|
||||
pvAnalysis.Clean();
|
||||
@@ -83,7 +85,8 @@ struct XFIMAMarketStructure
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = bar.IsValid();
|
||||
result = bar.IsValid() &&
|
||||
barAnalysis.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user