last works on Strategy 1 of XFIMA Signaller ...
This commit is contained in:
@@ -4244,6 +4244,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
* @param forDir: ENUM_X_DIRECTION, Specified Zones Direction for Detecting ...
|
* @param forDir: ENUM_X_DIRECTION, Specified Zones Direction for Detecting ...
|
||||||
* @param sortby: ENUM_X_SORT_BY, Specified Zones Sorting Factor ...
|
* @param sortby: ENUM_X_SORT_BY, Specified Zones Sorting Factor ...
|
||||||
* @param sortDir: ENUM_X_DIRECTION, Specified Zones Sorting Direction ...
|
* @param sortDir: ENUM_X_DIRECTION, Specified Zones Sorting Direction ...
|
||||||
|
* @param zonesRangeValidationFactor: double, Specified Zones Range Validation in Points ...
|
||||||
* @param zonesLoopback: int, loop back for Zones Detection ...
|
* @param zonesLoopback: int, loop back for Zones Detection ...
|
||||||
* @param zonesValidationLength: int, zones Validation Length ...
|
* @param zonesValidationLength: int, zones Validation Length ...
|
||||||
* @param count: int, number of required Zones ...
|
* @param count: int, number of required Zones ...
|
||||||
@@ -4262,6 +4263,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_SORT_BY sortBy = X_SORT_BY_DATE,
|
ENUM_X_SORT_BY sortBy = X_SORT_BY_DATE,
|
||||||
ENUM_X_DIRECTION sortDir = X_DIRECTION_BEARISH,
|
ENUM_X_DIRECTION sortDir = X_DIRECTION_BEARISH,
|
||||||
|
double zonesRangeValidationFactor = 10,
|
||||||
int zonesLoopback = 5,
|
int zonesLoopback = 5,
|
||||||
int zonesValidationLength = 5,
|
int zonesValidationLength = 5,
|
||||||
int count = 0,
|
int count = 0,
|
||||||
@@ -4410,6 +4412,15 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
RemoveBreakedZones(zones, true);
|
RemoveBreakedZones(zones, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Zones Range ...
|
||||||
|
if (zonesRangeValidationFactor > 0) {
|
||||||
|
//
|
||||||
|
double points = GetPoints(bar.symbol);
|
||||||
|
double minAllowedRange = points * zonesRangeValidationFactor;
|
||||||
|
ValidateZonesRange(zones, minAllowedRange);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Apply Sorting ...
|
// Apply Sorting ...
|
||||||
Sort(zones, sortBy, sortDir);
|
Sort(zones, sortBy, sortDir);
|
||||||
|
|||||||
@@ -5659,6 +5659,14 @@ bool HasInside(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified ZOne is Affected by Specified Bar or not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL, reference to Specified Bar ...
|
||||||
|
* @param zone: XBoxZone, reference to Specified Zone ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
bool IsZoneAffected(
|
bool IsZoneAffected(
|
||||||
XOHCL &bar,
|
XOHCL &bar,
|
||||||
XBoxZone &zone //
|
XBoxZone &zone //
|
||||||
@@ -6167,6 +6175,14 @@ int GetTesterBars(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Zone is Breaked or not ...
|
||||||
|
*
|
||||||
|
* @param zone: XBoxZone, reference to Specified Zone ...
|
||||||
|
* @param priceType: ENUM_X_PRICE, Specified Price Type for Zone Break Detection ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
bool IsBreaked(
|
bool IsBreaked(
|
||||||
XBoxZone &zone,
|
XBoxZone &zone,
|
||||||
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
|
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
|
||||||
@@ -6225,6 +6241,72 @@ bool IsBreaked(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate Zones Range ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone, collection reference to Validate ...
|
||||||
|
* @param minAllowedRange: double, min allowed range to Validate ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int ValidateZonesRange(
|
||||||
|
XBoxZone &source[],
|
||||||
|
double minAllowedRange //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
bool has = HasChild(source) &&
|
||||||
|
minAllowedRange > 0;
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone iTMP;
|
||||||
|
XBoxZone tmps[];
|
||||||
|
Copy(source, tmps);
|
||||||
|
XClean(source);
|
||||||
|
while (HasChild(tmps))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iTMP.Clean();
|
||||||
|
iTMP = tmps[0];
|
||||||
|
ArrayRemove(tmps, 0, 1);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Range Validation ...
|
||||||
|
has = iTMP.GetRange() > minAllowedRange;
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
AddIfNotExists(iTMP, source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(source);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
XClean(tmps);
|
||||||
|
iTMP.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove Breaked Zones ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone, collection reference to Remove Breaked Zones ...
|
||||||
|
* @param priceType: ENUM_X_PRICE, Specified Price type of Break Detection ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
int RemoveBreakedZones(
|
int RemoveBreakedZones(
|
||||||
XBoxZone &source[],
|
XBoxZone &source[],
|
||||||
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
|
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
|
||||||
|
|||||||
@@ -1062,7 +1062,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Validator Flags ...
|
// Validator Flags ...
|
||||||
|
bool validateByZones = true;
|
||||||
bool validateByXFIMARejected = true;
|
bool validateByXFIMARejected = true;
|
||||||
|
bool validateByCyclesMATresnding = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Define Requirements ...
|
// Define Requirements ...
|
||||||
@@ -1071,6 +1073,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
XOHCL pBar;
|
XOHCL pBar;
|
||||||
XOHCL p2Bar;
|
XOHCL p2Bar;
|
||||||
XOHCL p3Bar;
|
XOHCL p3Bar;
|
||||||
|
XBoxZone zones[];
|
||||||
double rejecteds[];
|
double rejecteds[];
|
||||||
bool isBullish = false;
|
bool isBullish = false;
|
||||||
bool isBearish = false;
|
bool isBearish = false;
|
||||||
@@ -1206,8 +1209,115 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
|
|
||||||
//
|
//
|
||||||
rejectedBar.Clean();
|
rejectedBar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reset Flags ...
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zone.Clean();
|
||||||
|
result = false;
|
||||||
|
isBullish = false;
|
||||||
|
isBearish = false;
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Rejection by Cycleas MA Trending ...
|
||||||
|
if (result && validateByCyclesMATresnding)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int barIDX = pBar.Index();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isCyclesMABulliah =
|
||||||
|
fimaParser.IsHCMABullish(barIDX) &&
|
||||||
|
fimaParser.IsHCMAOverLast(barIDX);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isCyclesMABearish =
|
||||||
|
fimaParser.IsHCMABearish(barIDX) &&
|
||||||
|
fimaParser.IsHCMAUnderLast(barIDX);
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
isBullish &&
|
||||||
|
isCyclesMABulliah;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
isBearish &&
|
||||||
|
isCyclesMABearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = isBullish || isBearish;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect a Zone ...
|
||||||
|
// Validate by Has a Zone (FVG, Support, Resistance) ...
|
||||||
|
if (result && validateByZones)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int zonesCount = poiDetector.DetectZones(
|
||||||
|
bar,
|
||||||
|
zones,
|
||||||
|
true, // Validated Zones ...
|
||||||
|
false, // Contains Order Block ...
|
||||||
|
true, // Contains Fair Value Gaps ...
|
||||||
|
true, // Contains Supports ...
|
||||||
|
true, // Contains Resistances ...
|
||||||
|
X_DIRECTION_ALL, // For All Directions ...
|
||||||
|
X_SORT_BY_DATE, // Sort by Date ...
|
||||||
|
X_DIRECTION_BEARISH, // Sorting Direction ...
|
||||||
|
10, // Zones Validation Points Factor ...
|
||||||
|
5, // Zones Loopback ...
|
||||||
|
3, // Zones Validation ...
|
||||||
|
0, // All Zones ...
|
||||||
|
50 // Loopback Length ...
|
||||||
|
);
|
||||||
|
UpdateToTime(zones, bar.time);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = result && IsValidSize(zonesCount);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone tmpZones[];
|
||||||
|
int bullishCount = ExtractByDirection(
|
||||||
|
tmpZones,
|
||||||
|
zones,
|
||||||
|
X_DIRECTION_BULLISH //
|
||||||
|
);
|
||||||
|
int bearishCount = ExtractByDirection(
|
||||||
|
tmpZones,
|
||||||
|
zones,
|
||||||
|
X_DIRECTION_BEARISH //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
IsValidSize(bullishCount) &&
|
||||||
|
IsValidSize(bearishCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reset Flags ...
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zone.Clean();
|
||||||
|
result = false;
|
||||||
|
isBullish = false;
|
||||||
|
isBearish = false;
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TODO: Remove this and Put inside Draws Part ...
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1250,7 +1360,11 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
DebugBreak();
|
// Draw Detected Zones ...
|
||||||
|
if (HasChild(zones))
|
||||||
|
{
|
||||||
|
poiDrawer.DrawZones(zones, iConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1373,6 +1487,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
pBar.Clean();
|
pBar.Clean();
|
||||||
p2Bar.Clean();
|
p2Bar.Clean();
|
||||||
p3Bar.Clean();
|
p3Bar.Clean();
|
||||||
|
XClean(zones);
|
||||||
XClean(rejecteds);
|
XClean(rejecteds);
|
||||||
pBarPatterns.Clean();
|
pBarPatterns.Clean();
|
||||||
p2BarPatterns.Clean();
|
p2BarPatterns.Clean();
|
||||||
|
|||||||
Reference in New Issue
Block a user