last works on XFima Strategy 2 Signalling ...
This commit is contained in:
@@ -2685,40 +2685,47 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Update Quarter ...
|
// Retrieve Previous Bar ...
|
||||||
UpdateZones(
|
XOHCL pBar;
|
||||||
bar,
|
has = bar.GetPreviousBar(pBar);
|
||||||
analysis.quarterActions,
|
if (has)
|
||||||
config.quarterZonesValidationLength, // Zones Validation Length ...
|
{
|
||||||
config.quarterZonesRequiredToStart, // Zones Count to Start Processing ...
|
//
|
||||||
config.quarterZoneDetectionLoopback // Zones Detection Loopback ...
|
// 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 ...
|
// Fill Quarter Props ...
|
||||||
analysis.majorSupport = majorSupport;
|
analysis.majorSupport = majorSupport;
|
||||||
analysis.minorSupport = minorSupport;
|
analysis.minorSupport = minorSupport;
|
||||||
analysis.quarter = CalculateQuarter();
|
analysis.quarter = CalculateQuarter();
|
||||||
analysis.majorResistance = majorResistance;
|
analysis.majorResistance = majorResistance;
|
||||||
analysis.minorResistance = minorResistance;
|
analysis.minorResistance = minorResistance;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update To Times ...
|
// Update To Times ...
|
||||||
if (analysis.majorSupport.IsValid())
|
if (analysis.majorSupport.IsValid())
|
||||||
{
|
{
|
||||||
analysis.majorSupport.to = bar.time;
|
analysis.majorSupport.to = bar.time;
|
||||||
}
|
}
|
||||||
if (analysis.minorSupport.IsValid())
|
if (analysis.minorSupport.IsValid())
|
||||||
{
|
{
|
||||||
analysis.minorSupport.to = bar.time;
|
analysis.minorSupport.to = bar.time;
|
||||||
}
|
}
|
||||||
if (analysis.majorResistance.IsValid())
|
if (analysis.majorResistance.IsValid())
|
||||||
{
|
{
|
||||||
analysis.majorResistance.to = bar.time;
|
analysis.majorResistance.to = bar.time;
|
||||||
}
|
}
|
||||||
if (analysis.minorResistance.IsValid())
|
if (analysis.minorResistance.IsValid())
|
||||||
{
|
{
|
||||||
analysis.minorResistance.to = bar.time;
|
analysis.minorResistance.to = bar.time;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3160,7 +3167,6 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED,
|
X_DETECTOR_ZONE_ACTION_MINOR_SUPPORT_RETESTED,
|
||||||
actions //
|
actions //
|
||||||
);
|
);
|
||||||
Print("Quarter: ", quarter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -3352,7 +3358,6 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED,
|
X_DETECTOR_ZONE_ACTION_MINOR_RESISTANCE_RETESTED,
|
||||||
actions //
|
actions //
|
||||||
);
|
);
|
||||||
Print("Quarter: ", quarter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1296,7 +1296,6 @@ class XCPOIDrawer : public XCBase
|
|||||||
style.Clean();
|
style.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// SPecial Draws Functions ...
|
// SPecial Draws Functions ...
|
||||||
|
|
||||||
@@ -1513,6 +1512,7 @@ class XCPOIDrawer : public XCBase
|
|||||||
ENUM_X_DIRECTION patternDir;
|
ENUM_X_DIRECTION patternDir;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
datetime cTime = TimeCurrent();
|
||||||
int patternsPivotThresholdMultiplier = 0;
|
int patternsPivotThresholdMultiplier = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2379,6 +2379,114 @@ 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();
|
||||||
|
|||||||
@@ -577,7 +577,8 @@ class XCTarget : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Do Risk Free if Provided ...
|
// Do Risk Free if Provided ...
|
||||||
if (target.doRF)
|
if (result &&
|
||||||
|
target.doRF)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
comment = "Taregt Manager do RF ...";
|
comment = "Taregt Manager do RF ...";
|
||||||
@@ -590,13 +591,48 @@ class XCTarget : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Handle Alert ...
|
// Handle Alert ...
|
||||||
message = "Target Manager do RF " + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") on: " + ToXString(position.price);
|
if (result)
|
||||||
alert.SendAlert(message);
|
{
|
||||||
|
//
|
||||||
|
message = "Target Manager do RF " + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") on: " + ToXString(position.price);
|
||||||
|
alert.SendAlert(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Risk Free on Entry if Provided ...
|
||||||
|
if (result &&
|
||||||
|
target.doRFOnEntry)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
comment = "Target Manager do RF on Entry ...";
|
||||||
|
double actingDistance = position.GetPointsValue() * target.actingDistance;
|
||||||
|
bool isLong = IsLong(position.type);
|
||||||
|
double sl = position.entry + (isLong
|
||||||
|
? actingDistance
|
||||||
|
: (-1 * actingDistance) //
|
||||||
|
);
|
||||||
|
result = trader.Modify(
|
||||||
|
position.ticket,
|
||||||
|
sl, // SL ...
|
||||||
|
position.tp, // TP ...
|
||||||
|
comment //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle Alert ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
message = "Target Manager do RF " + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") on Entry ...";
|
||||||
|
alert.SendAlert(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Do Partial Close if Provided ...
|
// Do Partial Close if Provided ...
|
||||||
if (result && target.volumeMultiplier > 0)
|
if (result &&
|
||||||
|
target.volumeMultiplier > 0)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double volume = NormalizeVolume((position.volume * target.volumeMultiplier), position.symbol);
|
double volume = NormalizeVolume((position.volume * target.volumeMultiplier), position.symbol);
|
||||||
@@ -612,8 +648,47 @@ class XCTarget : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Handle Alert ...
|
// Handle Alert ...
|
||||||
message = "Target Manager do Partial Close " + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") by: " + ToXString(volume);
|
if (result)
|
||||||
alert.SendAlert(message);
|
{
|
||||||
|
//
|
||||||
|
message = "Target Manager do Partial Close " + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") by: " + ToXString(volume);
|
||||||
|
alert.SendAlert(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle Replace TP ...
|
||||||
|
if (result &&
|
||||||
|
target.tpValue > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate TP Value ...
|
||||||
|
bool isLong = IsLong(position.type);
|
||||||
|
bool isValid = isLong
|
||||||
|
? target.tpValue > position.price &&
|
||||||
|
target.tpValue > position.tp
|
||||||
|
: target.tpValue < position.price &&
|
||||||
|
target.tpValue < position.tp;
|
||||||
|
if (isValid)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
comment = "Target Manager Change TP ...";
|
||||||
|
result = trader.Modify(
|
||||||
|
position.ticket,
|
||||||
|
position.sl, // SL ...
|
||||||
|
target.tpValue, // TP ...
|
||||||
|
comment //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle Alert ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
message = "Target Manager Change TP of" + ToXString(position.type) + " Position (" + ToXString(position.ticket) + ") to: " + ToXString(target.tpValue) + " ...";
|
||||||
|
alert.SendAlert(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2650,6 +2650,430 @@ class XCXFIMAHelper : public XCBaseHelper
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Higher Low Based On ZigZag ...
|
||||||
|
*
|
||||||
|
* @param barIndex: int, Specified Bar Index ...
|
||||||
|
* @param forceBarValidation: bool, Force Bar Price based on Pivot ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasZigZagHigherLow(
|
||||||
|
int barIndex = 0,
|
||||||
|
bool forceBarValidation = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
XOHCL bar;
|
||||||
|
result = IsValid() &&
|
||||||
|
bar.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Pivots ...
|
||||||
|
XPivot pivots[];
|
||||||
|
int count = ExtractZigZagPivots(
|
||||||
|
pivots,
|
||||||
|
barIndex,
|
||||||
|
10,
|
||||||
|
200 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Pivots and Nearest Pivot is Low ...
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
pivots[0].IsVale();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Directional Pivots ...
|
||||||
|
XPivot vales[];
|
||||||
|
count = ExtractPivots(
|
||||||
|
vales,
|
||||||
|
pivots,
|
||||||
|
X_PIVOT_TYPE_VALE //
|
||||||
|
);
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
count >= 2;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(vales);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Result ...
|
||||||
|
result =
|
||||||
|
vales[0].value > vales[1].value;
|
||||||
|
if (forceBarValidation)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
bar.open > vales[0].value &&
|
||||||
|
bar.close > vales[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
bar.Clean();
|
||||||
|
XClean(vales);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Lower Low Based On ZigZag ...
|
||||||
|
*
|
||||||
|
* @param barIndex: int, Specified Bar Index ...
|
||||||
|
* @param forceBarValidation: bool, Force Bar Price based on Pivot ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasZigZagLowerLow(
|
||||||
|
int barIndex = 0,
|
||||||
|
bool forceBarValidation = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
XOHCL bar;
|
||||||
|
result = IsValid() &&
|
||||||
|
bar.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Pivots ...
|
||||||
|
XPivot pivots[];
|
||||||
|
int count = ExtractZigZagPivots(
|
||||||
|
pivots,
|
||||||
|
barIndex,
|
||||||
|
10,
|
||||||
|
200 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Pivots and Nearest Pivot is Low ...
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
pivots[0].IsVale();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Directional Pivots ...
|
||||||
|
XPivot vales[];
|
||||||
|
count = ExtractPivots(
|
||||||
|
vales,
|
||||||
|
pivots,
|
||||||
|
X_PIVOT_TYPE_VALE //
|
||||||
|
);
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
count >= 2;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(vales);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Result ...
|
||||||
|
result =
|
||||||
|
vales[0].value < vales[1].value;
|
||||||
|
if (forceBarValidation)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
bar.open < vales[0].value &&
|
||||||
|
bar.close < vales[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
bar.Clean();
|
||||||
|
XClean(vales);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Higher High Based On ZigZag ...
|
||||||
|
*
|
||||||
|
* @param barIndex: int, Specified Bar Index ...
|
||||||
|
* @param forceBarValidation: bool, Force Bar Price based on Pivot ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasZigZagHigherHigh(
|
||||||
|
int barIndex = 0,
|
||||||
|
bool forceBarValidation = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
XOHCL bar;
|
||||||
|
result = IsValid() &&
|
||||||
|
bar.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Pivots ...
|
||||||
|
XPivot pivots[];
|
||||||
|
int count = ExtractZigZagPivots(
|
||||||
|
pivots,
|
||||||
|
barIndex,
|
||||||
|
10,
|
||||||
|
200 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Pivots and Nearest Pivot is Low ...
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
pivots[0].IsPeak();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Directional Pivots ...
|
||||||
|
XPivot peaks[];
|
||||||
|
count = ExtractPivots(
|
||||||
|
peaks,
|
||||||
|
pivots,
|
||||||
|
X_PIVOT_TYPE_PEAK //
|
||||||
|
);
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
count >= 2;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(peaks);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Result ...
|
||||||
|
result =
|
||||||
|
peaks[0].value > peaks[1].value;
|
||||||
|
if (forceBarValidation)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
bar.open > peaks[0].value &&
|
||||||
|
bar.close > peaks[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
bar.Clean();
|
||||||
|
XClean(peaks);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Has Lower High Based On ZigZag ...
|
||||||
|
*
|
||||||
|
* @param barIndex: int, Specified Bar Index ...
|
||||||
|
* @param forceBarValidation: bool, Force Bar Price based on Pivot ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool HasZigZagLowerHigh(
|
||||||
|
int barIndex = 0,
|
||||||
|
bool forceBarValidation = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
XOHCL bar;
|
||||||
|
result = IsValid() &&
|
||||||
|
bar.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Pivots ...
|
||||||
|
XPivot pivots[];
|
||||||
|
int count = ExtractZigZagPivots(
|
||||||
|
pivots,
|
||||||
|
barIndex,
|
||||||
|
10,
|
||||||
|
200 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Pivots and Nearest Pivot is Low ...
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
pivots[0].IsPeak();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extract Directional Pivots ...
|
||||||
|
XPivot peaks[];
|
||||||
|
count = ExtractPivots(
|
||||||
|
peaks,
|
||||||
|
pivots,
|
||||||
|
X_PIVOT_TYPE_PEAK //
|
||||||
|
);
|
||||||
|
result = IsValidSize(count) &&
|
||||||
|
count >= 2;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
XClean(peaks);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Result ...
|
||||||
|
result =
|
||||||
|
peaks[0].value < peaks[1].value;
|
||||||
|
if (forceBarValidation)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
bar.open < peaks[0].value &&
|
||||||
|
bar.close < peaks[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
bar.Clean();
|
||||||
|
XClean(peaks);
|
||||||
|
XClean(pivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Extractions ...
|
// Extractions ...
|
||||||
|
|
||||||
|
|||||||
@@ -539,12 +539,18 @@ struct XPivotAnalysis
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Calculating Slope and Intercept ...
|
// Calculating Slope and Intercept ...
|
||||||
CalculateSlopeAndIntercept(
|
has = ArraySize(xData) >= 2 &&
|
||||||
peakSlope,
|
ArraySize(yData) >= 2;
|
||||||
peakIntercept,
|
if (has)
|
||||||
xData,
|
{
|
||||||
yData //
|
//
|
||||||
);
|
CalculateSlopeAndIntercept(
|
||||||
|
peakSlope,
|
||||||
|
peakIntercept,
|
||||||
|
xData,
|
||||||
|
yData //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -570,12 +576,18 @@ struct XPivotAnalysis
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Calculating Slope and Intercept ...
|
// Calculating Slope and Intercept ...
|
||||||
CalculateSlopeAndIntercept(
|
has = ArraySize(xData) >= 2 &&
|
||||||
valeSlope,
|
ArraySize(yData) >= 2;
|
||||||
valeIntercept,
|
if (has)
|
||||||
xData,
|
{
|
||||||
yData //
|
//
|
||||||
);
|
CalculateSlopeAndIntercept(
|
||||||
|
valeSlope,
|
||||||
|
valeIntercept,
|
||||||
|
xData,
|
||||||
|
yData //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1482,7 +1494,13 @@ struct XPatternAnalysis
|
|||||||
//
|
//
|
||||||
// Pattern Actions ...
|
// Pattern Actions ...
|
||||||
|
|
||||||
//
|
/**
|
||||||
|
* Count Directional Patterns ...
|
||||||
|
*
|
||||||
|
* @param forDir: ENUM_X_DIRECTION, Specified Direction ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
int Count(
|
int Count(
|
||||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
||||||
)
|
)
|
||||||
@@ -2826,6 +2844,21 @@ 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 ...
|
||||||
|
|
||||||
//
|
//
|
||||||
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
||||||
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
||||||
@@ -2833,6 +2866,8 @@ struct XPatternAnalysisDrawConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
XPOIDrawConfig drawConfig;
|
XPOIDrawConfig drawConfig;
|
||||||
|
XPOIDrawConfig quarterMajorsDrawConfig;
|
||||||
|
XPOIDrawConfig quarterMinorsDrawConfig;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
@@ -2857,6 +2892,10 @@ struct XPatternAnalysisDrawConfig
|
|||||||
XClean(allowedDraws);
|
XClean(allowedDraws);
|
||||||
XClean(allowedDrawZones);
|
XClean(allowedDrawZones);
|
||||||
XClean(allowedDrawPivots);
|
XClean(allowedDrawPivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
quarterMajorsDrawConfig.Clean();
|
||||||
|
quarterMinorsDrawConfig.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2867,10 +2906,19 @@ 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);
|
||||||
@@ -2895,6 +2943,12 @@ struct XPatternAnalysisDrawConfig
|
|||||||
XClean(allowedDraws);
|
XClean(allowedDraws);
|
||||||
XClean(allowedDrawZones);
|
XClean(allowedDrawZones);
|
||||||
XClean(allowedDrawPivots);
|
XClean(allowedDrawPivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
drawQuarter = false;
|
||||||
|
drawQuarterZones = false;
|
||||||
|
drawQuarterMajors = false;
|
||||||
|
drawQuarterMinors = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2902,6 +2956,12 @@ struct XPatternAnalysisDrawConfig
|
|||||||
*/
|
*/
|
||||||
void Full()
|
void Full()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
drawQuarter = true;
|
||||||
|
drawQuarterZones = true;
|
||||||
|
drawQuarterMajors = true;
|
||||||
|
drawQuarterMinors = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
GetAllBarPatters(allowedDraws);
|
GetAllBarPatters(allowedDraws);
|
||||||
GetAllBarPatters(allowedDrawZones);
|
GetAllBarPatters(allowedDrawZones);
|
||||||
@@ -2974,6 +3034,43 @@ 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;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -719,9 +719,11 @@ struct XTarget
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
bool doRF; // Do RF on Target
|
bool doRF; // Do RF on Target
|
||||||
|
bool doRFOnEntry; // Do RF on Entry
|
||||||
double actingDistance; // Acting Distances
|
double actingDistance; // Acting Distances
|
||||||
double target; // Target Price for Actions
|
double target; // Target Price for Actions
|
||||||
double volumeMultiplier; // Volume Multiplier for Partial Close
|
double volumeMultiplier; // Volume Multiplier for Partial Close
|
||||||
|
double tpValue; // TP Value Changed ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
@@ -739,8 +741,10 @@ struct XTarget
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
target = 0;
|
target = 0;
|
||||||
|
tpValue = 0;
|
||||||
doRF = false;
|
doRF = false;
|
||||||
actingDistance = 0;
|
actingDistance = 0;
|
||||||
|
doRFOnEntry = false;
|
||||||
volumeMultiplier = 0;
|
volumeMultiplier = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -372,111 +372,6 @@ 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,
|
||||||
@@ -978,13 +873,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Prepare ...
|
// Prepare ...
|
||||||
|
XOHCL pBar;
|
||||||
|
XOHCL p2Bar;
|
||||||
zone.Clean();
|
zone.Clean();
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
XClean(targets);
|
XClean(targets);
|
||||||
dir = X_DIRECTION_NONE;
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate ...
|
// Validate ...
|
||||||
result = bar.IsValid();
|
result = bar.IsValid() &&
|
||||||
|
bar.GetPreviousBar(pBar) &&
|
||||||
|
pBar.GetPreviousBar(p2Bar);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
@@ -999,78 +900,177 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
// Do Signal Detection ...
|
// Do Signal Detection ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// result = fimaHelper.HasHKBasedTrend(dir, bar.Index(), 1);
|
// Preparing Requirement Conditions ...
|
||||||
// bool isBullish = result &&
|
// Here we Have to Prepare Some Directional Confirmations Using Indicators ...
|
||||||
// IsXBullish(dir);
|
// for Validate Signals ...
|
||||||
// bool isBearish = result &&
|
|
||||||
// IsXBearish(dir);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get Bar Pattern ...
|
bool hasZigZagHigherLow = fimaHelper.HasZigZagHigherLow(bar.Index(), true);
|
||||||
// XPatternAnalysis barAnalysis;
|
bool hasZigZagLowerHigh = fimaHelper.HasZigZagLowerHigh(bar.Index(), true);
|
||||||
// result =
|
|
||||||
// poiDetector.AnalyseBarPatterns(
|
|
||||||
// bar,
|
|
||||||
// barAnalysis,
|
|
||||||
// structureConfig.barsAnalysisConfig //
|
|
||||||
// );
|
|
||||||
// bool isBullish = barAnalysis.Count(X_DIRECTION_BULLISH) >= 4;
|
|
||||||
// bool isBearish = barAnalysis.Count(X_DIRECTION_BEARISH) >= 4;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Validation Patterns ...
|
||||||
|
int directionalPatternsValidations = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Bullish Conditions ...
|
||||||
|
isBullish =
|
||||||
|
//
|
||||||
|
_structure.barAnalysis.HasMinorSupport() &&
|
||||||
|
bar.open > _structure.barAnalysis.minorSupport.upper &&
|
||||||
|
bar.close > _structure.barAnalysis.minorSupport.upper &&
|
||||||
|
(_structure.barsAnalysis[1].Count(X_DIRECTION_BULLISH) >= directionalPatternsValidations) &&
|
||||||
|
//
|
||||||
|
(IsTested(
|
||||||
|
pBar,
|
||||||
|
_structure.barAnalysis.minorSupport //
|
||||||
|
) ||
|
||||||
|
IsTested(
|
||||||
|
p2Bar,
|
||||||
|
_structure.barAnalysis.minorSupport //
|
||||||
|
)) &&
|
||||||
|
//
|
||||||
|
(hasZigZagHigherLow)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Bearish Conditions ...
|
||||||
|
isBearish =
|
||||||
|
//
|
||||||
|
_structure.barAnalysis.HasMinorResistance() &&
|
||||||
|
bar.open < _structure.barAnalysis.minorResistance.lower &&
|
||||||
|
bar.close < _structure.barAnalysis.minorResistance.lower &&
|
||||||
|
(_structure.barsAnalysis[1].Count(X_DIRECTION_BEARISH) >= directionalPatternsValidations) &&
|
||||||
|
//
|
||||||
|
(IsTested(
|
||||||
|
pBar,
|
||||||
|
_structure.barAnalysis.minorResistance //
|
||||||
|
) ||
|
||||||
|
IsTested(
|
||||||
|
p2Bar,
|
||||||
|
_structure.barAnalysis.minorResistance //
|
||||||
|
)) &&
|
||||||
|
//
|
||||||
|
(hasZigZagLowerHigh)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Summarize Conditions ...
|
||||||
|
result =
|
||||||
|
isBullish ||
|
||||||
|
isBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Assign Direction ...
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Draw Bar Patterns Analysis ...
|
dir = isBullish
|
||||||
// poiDrawer.DrawPatternAnalysis(
|
? X_DIRECTION_BULLISH
|
||||||
// barAnalysis,
|
: isBearish
|
||||||
// structureDrawConfig.barAnalysisDrawConfig //
|
? X_DIRECTION_BEARISH
|
||||||
// );
|
: X_DIRECTION_NONE;
|
||||||
|
|
||||||
//
|
//
|
||||||
if (isBullish)
|
if (isBullish)
|
||||||
{
|
{
|
||||||
Print("Bullish HK Bond Trend ...");
|
zone = _structure.barAnalysis.minorSupport;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (isBearish)
|
if (isBearish)
|
||||||
{
|
{
|
||||||
Print("Bearish HK Bond Trend ...");
|
zone = _structure.barAnalysis.minorResistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
Print(ToXString(dir), " Detected ...");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup ...
|
// Validate Result ...
|
||||||
result = false;
|
result =
|
||||||
dir = X_DIRECTION_NONE;
|
result &&
|
||||||
|
zone.IsValid() &&
|
||||||
|
HasDirection(dir);
|
||||||
|
// if (result)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// XPOIDrawConfig iConfig = structureDrawConfig
|
||||||
|
// .barAnalysisDrawConfig
|
||||||
|
// .quarterMinorsDrawConfig;
|
||||||
|
// iConfig.zonesWidth = 3;
|
||||||
|
// iConfig.zonesFill = true;
|
||||||
|
// iConfig.bullishColor = clrYellow;
|
||||||
|
// iConfig.bearishColor = clrYellow;
|
||||||
|
|
||||||
//
|
// //
|
||||||
// Draw Custom Requirements ...
|
// if (isBullish)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// poiDrawer.DrawZone(
|
||||||
|
// _structure.barAnalysis.minorSupport,
|
||||||
|
// iConfig //
|
||||||
|
// );
|
||||||
|
|
||||||
//
|
// //
|
||||||
// Prepare Decision Zone ...
|
// Print("Bullish Condition ...");
|
||||||
if (result)
|
// }
|
||||||
{
|
|
||||||
//
|
|
||||||
// Create Decision Zone and Validate it ...
|
|
||||||
|
|
||||||
//
|
// //
|
||||||
result = zone.IsValid();
|
// if (isBearish)
|
||||||
}
|
// {
|
||||||
|
// //
|
||||||
|
// poiDrawer.DrawZone(
|
||||||
|
// _structure.barAnalysis.minorResistance,
|
||||||
|
// iConfig //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// Print("Bearish Condition ...");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //
|
||||||
|
// Print(ToXString(dir), " Detected ...");
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Provide Direction and Targets if Required ...
|
// Provide Direction and Targets if Required ...
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Handle Signal Direction ...
|
// Handle Targets Detection ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Handle Targets Detection ...
|
double spread = GetSpread(zone.symbol);
|
||||||
|
double entry = GetEntry(zone.symbol, dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
double risk = isBullish
|
||||||
|
? entry - zone.lower
|
||||||
|
: zone.upper - entry;
|
||||||
|
double reward1 = entry + (isBullish
|
||||||
|
? risk
|
||||||
|
: (-1 * risk) //
|
||||||
|
);
|
||||||
|
double reward4 = entry + (isBullish
|
||||||
|
? 4 * risk
|
||||||
|
: (-4 * risk) //
|
||||||
|
);
|
||||||
|
double requiredDistance = PriceToPoint(spread * 2, zone.symbol);
|
||||||
|
|
||||||
|
//
|
||||||
|
XTarget iRFOnEntryOnTP1;
|
||||||
|
iRFOnEntryOnTP1.target = reward1;
|
||||||
|
iRFOnEntryOnTP1.tpValue = reward4;
|
||||||
|
iRFOnEntryOnTP1.doRFOnEntry = true;
|
||||||
|
iRFOnEntryOnTP1.volumeMultiplier = 0.5;
|
||||||
|
iRFOnEntryOnTP1.actingDistance = requiredDistance;
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iRFOnEntryOnTP1,
|
||||||
|
targets //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1081,6 +1081,8 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
zone.Clean();
|
zone.Clean();
|
||||||
XClean(targets);
|
XClean(targets);
|
||||||
}
|
}
|
||||||
|
pBar.Clean();
|
||||||
|
p2Bar.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -389,8 +389,8 @@ struct XFIMAMarketStructureConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Configure Detectors ...
|
// Configure Detectors ...
|
||||||
loopback = 500;
|
loopback = 200;
|
||||||
requiredPivots = 25;
|
requiredPivots = 10;
|
||||||
pvPivotsValidationLength = 5;
|
pvPivotsValidationLength = 5;
|
||||||
maCrossValidationDiffMultiplier = 4;
|
maCrossValidationDiffMultiplier = 4;
|
||||||
|
|
||||||
@@ -549,6 +549,7 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
barAnalysisDrawConfig.drawConfig = drawConfig;
|
barAnalysisDrawConfig.drawConfig = drawConfig;
|
||||||
|
barAnalysisDrawConfig.ConfigureQuarterDraws();
|
||||||
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,3 +562,5 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
Reference in New Issue
Block a user