This commit is contained in:
2025-10-28 03:56:41 +03:30
parent fda0da2d2e
commit 1fd79e5621
@@ -1395,7 +1395,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
bool useSignaller1 = false; bool useSignaller1 = false;
bool useSignaller2 = false; bool useSignaller2 = false;
bool useSignaller3 = true; bool useSignaller3 = true;
bool useSignaller4 = false; bool useSignaller4 = true;
// //
// Validator Flags ... // Validator Flags ...
@@ -1745,13 +1745,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
dir = X_DIRECTION_NONE; dir = X_DIRECTION_NONE;
} }
//
// Debug Breake ...
if (result)
{
// DebugBreak();
}
// //
// Cleanup ... // Cleanup ...
iDrawConfig.Clean(); iDrawConfig.Clean();
@@ -2605,12 +2598,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
iConfig.Clean(); iConfig.Clean();
} }
//
if (result)
{
DebugBreak();
}
// //
// Cleanup ... // Cleanup ...
zoneTrend.Clean(); zoneTrend.Clean();
@@ -2618,8 +2605,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// //
// Reset Flags ... // Reset Flags ...
if (!result) { if (!result)
// {
//
zone.Clean(); zone.Clean();
isBullish = false; isBullish = false;
isBearish = false; isBearish = false;
@@ -2650,9 +2638,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
{ {
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig); poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
} }
//
DebugBreak();
} }
// //
@@ -2799,8 +2784,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// //
XTrend boundaryTrend; XTrend boundaryTrend;
double boundaryMax = EMPTY_VALUE; XTrend boundaryZoneTrend;
double boundaryMin = EMPTY_VALUE;
//
double atrBandUpper = EMPTY_VALUE; double atrBandUpper = EMPTY_VALUE;
double atrBandLower = EMPTY_VALUE; double atrBandLower = EMPTY_VALUE;
double atrBandMiddle = EMPTY_VALUE; double atrBandMiddle = EMPTY_VALUE;
@@ -3155,8 +3141,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// //
// Validate ... // Validate ...
result = isBullish || result = isBullish || isBearish;
isBearish;
if (result) if (result)
{ {
// //
@@ -3193,205 +3178,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
if (result && validateByXFIMABoundary) if (result && validateByXFIMABoundary)
{ {
// //
// Reading Zones Boundary ... // Try to Retrieve Boundary To Trend ...
XPivot uppers[]; result = poiDetector.HasBoundaryTrend(
XPivot lowers[]; zone,
int boundariesCount = poiDetector.CollectZonesBoundary(uppers, lowers, zone); boundaryTrend,
int lowestIDX = GetLowest(lowers); true //
int highestIDX = GetHighest(uppers); );
if (IsValidIndex(lowestIDX))
{
boundaryMin = lowers[lowestIDX].value;
}
if (IsValidIndex(highestIDX))
{
boundaryMax = uppers[highestIDX].value;
}
// //
isBullish = // Try to Retrieve Boundary Zone Trend ...
isBullish && result =
IsValidIndex(lowestIDX) && result &&
IsValidSize(boundariesCount) && poiDetector.HasBoundaryTrend(
zone.lower > lowers[lowestIDX].value; zone,
boundaryZoneTrend,
false //
);
// //
isBearish = // Check and Validate Trend Direction ...
isBearish && result =
IsValidIndex(highestIDX) && result &&
IsValidSize(boundariesCount) && zone.dir == boundaryTrend.dir &&
zone.upper < uppers[highestIDX].value; zone.dir == boundaryZoneTrend.dir;
// //
// Detect Directions of Boundary ... // Reset Flags ...
//
bool isUppersBullish = uppers[0].value > uppers[1].value;
bool isUppersBearish = uppers[0].value < uppers[1].value;
//
bool isLowersBullish = lowers[0].value > lowers[1].value;
bool isLowersBearish = lowers[0].value < lowers[1].value;
//
bool isBoundaryBullish = isUppersBullish || isLowersBullish;
bool isBoundaryBearish = isUppersBearish || isLowersBearish;
//
bool isBoundaryTrend = isBoundaryBullish || isBoundaryBearish;
if (isBoundaryTrend)
{
//
double fromPrice =
isBoundaryBullish
? isLowersBullish
? lowers[1].value
: isUppersBullish
? uppers[1].value
: EMPTY_VALUE
: isBoundaryBearish
? isUppersBearish
? uppers[1].value
: isLowersBearish
? lowers[1].value
: EMPTY_VALUE
: EMPTY_VALUE;
//
double toPrice =
isBoundaryBullish
? isLowersBullish
? lowers[0].value
: isUppersBullish
? uppers[0].value
: EMPTY_VALUE
: isBoundaryBearish
? isUppersBearish
? uppers[0].value
: isLowersBearish
? lowers[0].value
: EMPTY_VALUE
: EMPTY_VALUE;
//
if (NotEmptyZero(fromPrice) && NotEmptyZero(toPrice))
{
//
boundaryTrend.Init(
zone.symbol,
zone.period,
bar.time,
fromPrice,
zone.from,
toPrice,
zone.to //
);
//
// Validate By Boundary Trend ...
if (validateByXFIMABoundaryTrend)
{
//
isBullish =
isBullish &&
boundaryTrend.IsValid() &&
boundaryTrend.IsBullish();
//
isBearish =
isBearish &&
boundaryTrend.IsValid() &&
boundaryTrend.IsBearish();
//
// Summarizing Result ...
result = isBullish || isBearish;
if (!result)
{
zone.Clean();
}
}
}
}
//
// Cleanup ...
XClean(uppers);
XClean(lowers);
//
// Summarize Result ...
result = isBullish || isBearish;
if (!result) if (!result)
{ {
//
zone.Clean(); zone.Clean();
result = false;
isBullish = false;
isBearish = false;
} }
} }
//
// Draws ...
if (result)
{
// //
// if (NotEmptyZero(boundaryMin))
// {
// //
// XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
// iConfig.trendRayLeft = false;
// iConfig.trendRayRight = false;
// poiDrawer.DrawTrendLine(
// "LOWEST_" + ToXString(TimeToSeconds(zone.from)),
// boundaryMin,
// zone.from,
// boundaryMin,
// zone.to,
// iConfig,
// clrYellow //
// );
// iConfig.Clean();
// }
// //
// if (NotEmptyZero(boundaryMax))
// {
// //
// XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
// iConfig.trendRayLeft = false;
// iConfig.trendRayRight = false;
// poiDrawer.DrawTrendLine(
// "HIGHEST_" + ToXString(TimeToSeconds(zone.from)),
// boundaryMax,
// zone.from,
// boundaryMax,
// zone.to,
// iConfig,
// clrYellow //
// );
// iConfig.Clean();
// }
// //
// if (boundaryTrend.IsValid())
// {
// //
// XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
// iConfig.trendRayLeft = false;
// iConfig.trendRayRight = false;
// poiDrawer.DrawTrendLine(
// boundaryTrend,
// iConfig //
// );
// iConfig.Clean();
// }
// //
// poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig);
// poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
// //
// DebugBreak();
}
// //
// Manage Stops ... // Manage Stops ...
if (result) if (result)
@@ -3459,6 +3281,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
pBarPatterns.Clean(); pBarPatterns.Clean();
boundaryTrend.Clean(); boundaryTrend.Clean();
patternConfig.Clean(); patternConfig.Clean();
boundaryZoneTrend.Clean();
// //
return result; return result;