This commit is contained in:
2025-10-30 00:07:23 +03:30
parent 90988de7bf
commit 574c79afcc
6 changed files with 2209 additions and 961 deletions
@@ -284,7 +284,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
{
//
// Configure ...
drawLeg = false;
drawZones = false;
drawIZones = false;
drawTrends = false;
@@ -299,7 +298,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
drawIResistance = false;
//
manageLegs = true;
manageZones = true;
manageIZones = true;
manageTrends = false;
@@ -615,7 +613,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
}
//
ManageLeg(bar);
ManageTrends(bar);
ManageZones(p2Bar);
ManageIZones(p2Bar);
@@ -634,130 +631,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
// Props ...
//
// Leg ...
XLeg leg; // Exists Leg ...
bool drawLeg; // Draw Leg ...
bool manageLegs;
//
bool HasLeg()
{
return leg.IsValid();
}
//
bool ValidateLeg(XOHCL &bar)
{
//
bool result = false;
//
result = HasLeg() &&
bar.IsValid();
if (!result)
{
return result;
}
//
result =
leg.IsBullish()
? bar.low > leg.lower
: leg.IsBearish()
? bar.high < leg.upper
: false;
//
return result;
}
//
void DrawLeg()
{
//
if (!drawLeg)
{
return;
}
//
if (!HasLeg())
{
return;
}
//
// Update to Times ...
leg.UpdateTimes();
//
// Draw Leg Box ...
XBoxZone legZone;
leg.ToBox(legZone);
if (legZone.IsValid())
{
//
legZone.to = TimeCurrent();
poiDrawer.DrawZone(legZone, structureDrawConfig.drawConfig);
}
//
// Draw Legs Other Stufs ...
return;
//
// FVGs ...
poiDrawer.DrawZones(leg.bullishFVGs, structureDrawConfig.drawConfig);
poiDrawer.DrawZones(leg.bearishFVGs, structureDrawConfig.drawConfig);
//
// Support and Resistances ...
poiDrawer.DrawZones(leg.supports, structureDrawConfig.drawConfig);
poiDrawer.DrawZones(leg.resistances, structureDrawConfig.drawConfig);
//
// Patterns ...
poiDrawer.DrawPatternAnalysises(leg.patterns, structureDrawConfig.barAnalysisDrawConfig);
}
//
void ManageLeg(XOHCL &bar)
{
//
// Validate Exists ...
if (HasLeg())
{
//
if (!ValidateLeg(bar))
{
//
// Invalidate XLeg ...
leg.Clean();
}
}
//
// Detect New ...
if (!HasLeg())
{
poiDetector.IsLegPattern(bar, leg);
}
//
// Update Exists ...
if (HasLeg())
{
//
// Update to Times ...
leg.UpdateTimes();
//
DrawLeg();
}
}
//
// Order Flow ...
@@ -1564,10 +1437,10 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
// Signaller Flags ...
bool useSignaller1 = false;
bool useSignaller2 = true;
bool useSignaller3 = true;
bool useSignaller4 = true;
bool useSignaller1 = true;
bool useSignaller2 = false;
bool useSignaller3 = false;
bool useSignaller4 = false;
//
XBoxZone tmpZone;
@@ -1601,7 +1474,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
XPOIDrawConfig iDrawConfig;
//
drawLeg = false;
drawZones = false;
drawIZones = false;
drawTrends = false;
@@ -2050,11 +1922,29 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
XOHCL pBar;
XOHCL p2Bar;
XOHCL p3Bar;
XOHCL tmpBar;
XPivot tmpPivot;
XBoxZone atrBox;
XBoxZone tmpZone;
XBoxZone scPVZone;
XBoxZone mcPVZone;
XBoxZone lcPVZone;
XBoxZone hcPVZone;
XBoxZone pinBarZone;
XBoxZone supports[];
XBoxZone resistances[];
XBoxZone affectedZone;
XTrend pinBarZoneTrend;
bool isBullish = false;
bool isBearish = false;
ENUM_X_DIRECTION tmpDir;
XPatternAnalysis pBarPatterns;
XPatternAnalysis p2BarPatterns;
XPatternAnalysis p3BarPatterns;
XPatternAnalysisConfig iPatternsConfig;
//
// Read PBar ...
// Reading Bars ...
result = bar.GetPreviousBar(pBar);
result = result &&
pBar.GetPreviousBar(p2Bar);
@@ -2072,22 +1962,47 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
}
//
// Reading pBar Patterns ...
XPatternAnalysis pBarPatterns;
poiDetector.AnalyseBarPatterns(
pBar,
pBarPatterns,
structureConfig.barsAnalysisConfig //
);
bool hasSupport = pBarPatterns.IsSupport();
bool hasResistance = pBarPatterns.IsResistance();
// Reading Bar Patterns ...
iPatternsConfig.Default();
iPatternsConfig.FullPattern();
result =
result &&
poiDetector.AnalyseBarPatterns(
pBar,
pBarPatterns,
iPatternsConfig //
);
result =
result &&
poiDetector.AnalyseBarPatterns(
p2Bar,
p2BarPatterns,
iPatternsConfig //
);
result =
result &&
poiDetector.AnalyseBarPatterns(
p3Bar,
p3BarPatterns,
iPatternsConfig //
);
if (!result)
{
//
pBar.Clean();
p2Bar.Clean();
p3Bar.Clean();
pBarPatterns.Clean();
p2BarPatterns.Clean();
p3BarPatterns.Clean();
iPatternsConfig.Clean();
//
return result;
}
//
// Check Boundary Trend ...
XTrend boundaryTrend;
bool hasBoundaryTrend = fimaParser.HasBoundaryTrend(boundaryTrend, pBar.Index());
bool hasBoundaryBullishTrend = hasBoundaryTrend && boundaryTrend.IsBullish();
bool hasBoundaryBearishTrend = hasBoundaryTrend && boundaryTrend.IsBearish();
// Detect Directional Candlestic Patterns ...
//
// Bullish ...
@@ -2103,6 +2018,30 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
pBarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
//
);
bool isP2BarHasBullishPatterns =
(bar.close > p2Bar.low ||
bar.open > p2Bar.low) &&
(
//
p2BarPatterns.IsPinned(X_DIRECTION_BULLISH) ||
p2BarPatterns.IsEngulfed(X_DIRECTION_BULLISH) ||
p2BarPatterns.IsMomentum(X_DIRECTION_BULLISH) ||
p2BarPatterns.IsPiercing(X_DIRECTION_BULLISH) ||
p2BarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
//
);
bool isP3BarHasBullishPatterns =
(bar.close > p3Bar.low ||
bar.open > p3Bar.low) &&
(
//
p3BarPatterns.IsPinned(X_DIRECTION_BULLISH) ||
p3BarPatterns.IsEngulfed(X_DIRECTION_BULLISH) ||
p3BarPatterns.IsMomentum(X_DIRECTION_BULLISH) ||
p3BarPatterns.IsPiercing(X_DIRECTION_BULLISH) ||
p3BarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
//
);
//
// Bearish ...
@@ -2118,80 +2057,211 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
pBarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
//
);
bool isP2BarHasBearishPatterns =
(bar.close < p2Bar.high ||
bar.open < p2Bar.high) &&
(
//
p2BarPatterns.IsPinned(X_DIRECTION_BEARISH) ||
p2BarPatterns.IsEngulfed(X_DIRECTION_BEARISH) ||
p2BarPatterns.IsMomentum(X_DIRECTION_BEARISH) ||
p2BarPatterns.IsPiercing(X_DIRECTION_BEARISH) ||
p2BarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
//
);
bool isP3BarHasBearishPatterns =
(bar.close < p3Bar.high ||
bar.open < p3Bar.high) &&
(
//
p3BarPatterns.IsPinned(X_DIRECTION_BEARISH) ||
p3BarPatterns.IsEngulfed(X_DIRECTION_BEARISH) ||
p3BarPatterns.IsMomentum(X_DIRECTION_BEARISH) ||
p3BarPatterns.IsPiercing(X_DIRECTION_BEARISH) ||
p3BarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
//
);
//
// Check Pull Back Pattern ...
XBoxZone pullbackZone;
ENUM_X_DIRECTION pullbackDir;
bool isPullback = poiDetector.IsPullbackPattern(
pBar,
pullbackZone,
pullbackDir //
);
bool isBullishPullback = isPullback && IsXBullish(pullbackDir);
bool isBearishPullback = isPullback && IsXBearish(pullbackDir);
// Checking Support and Resistances ...
//
// Force P2Bar is Pin Bar ...
ENUM_X_DIRECTION p2Dir;
bool isP2BarPinned = poiDetector.IsPinnedBar(
p2Bar,
p2Dir //
);
bool isP2BarBullishPinned =
isP2BarPinned &&
IsXBullish(p2Dir);
bool isP2BarBearishPinned =
isP2BarPinned &&
IsXBearish(p2Dir);
//
// Checking For Leg Pattern ...
XLeg _leg;
XBoxZone legZone;
bool hasLeg = poiDetector.IsLegPattern(
pBar,
_leg,
3,
100 //
);
if (hasLeg)
// Support ...
bool hasSupport = pBarPatterns.IsSupport();
if (hasSupport)
{
hasLeg = _leg.ToBox(legZone);
//
hasSupport = pBarPatterns.GetSupport(tmpBar, tmpPivot, tmpZone);
if (hasSupport)
{
AddIfNotExists(tmpZone, supports);
}
}
hasSupport = p2BarPatterns.IsSupport();
if (hasSupport)
{
//
hasSupport = p2BarPatterns.GetSupport(tmpBar, tmpPivot, tmpZone);
if (hasSupport)
{
AddIfNotExists(tmpZone, supports);
}
}
hasSupport = p3BarPatterns.IsSupport();
if (hasSupport)
{
//
hasSupport = p3BarPatterns.GetSupport(tmpBar, tmpPivot, tmpZone);
if (hasSupport)
{
AddIfNotExists(tmpZone, supports);
}
}
bool hasBullishLeg = hasLeg && _leg.IsBullish();
bool hasBearishLeg = hasLeg && _leg.IsBearish();
//
// Check Based On LC and HC MA State ...
// Resistance ...
bool hasResistance = pBarPatterns.IsResistance();
if (hasResistance)
{
//
hasResistance = pBarPatterns.GetResistance(tmpBar, tmpPivot, tmpZone);
if (hasResistance)
{
AddIfNotExists(tmpZone, resistances);
}
}
hasResistance = p2BarPatterns.IsResistance();
if (hasResistance)
{
//
hasResistance = p2BarPatterns.GetResistance(tmpBar, tmpPivot, tmpZone);
if (hasResistance)
{
AddIfNotExists(tmpZone, resistances);
}
}
hasResistance = p3BarPatterns.IsResistance();
if (hasResistance)
{
//
hasResistance = p3BarPatterns.GetResistance(tmpBar, tmpPivot, tmpZone);
if (hasResistance)
{
AddIfNotExists(tmpZone, resistances);
}
}
//
bool isLCMABullish = fimaParser.IsLCMABullish(pBar.Index());
bool isHCMABullish = fimaParser.IsHCMABullish(pBar.Index());
bool isCycleMABullish = isLCMABullish && isHCMABullish;
// Reading Cycle PVS ...
bool hasSCPV = poiDetector.GetSCZone(pBar, scPVZone);
bool hasMCPV = poiDetector.GetMCZone(pBar, mcPVZone);
bool hasLCPV = poiDetector.GetLCZone(pBar, lcPVZone);
bool hasHCPV = poiDetector.GetHCZone(pBar, hcPVZone);
bool isCyclePVBullish =
hasMCPV && mcPVZone.IsBullish() &&
hasLCPV && lcPVZone.IsBullish() &&
hasHCPV && hcPVZone.IsBullish();
bool isCyclePVBearish =
hasMCPV && mcPVZone.IsBearish() &&
hasLCPV && lcPVZone.IsBearish() &&
hasHCPV && hcPVZone.IsBearish();
//
bool isLCMABearish = fimaParser.IsLCMABearish(pBar.Index());
bool isHCMABearish = fimaParser.IsHCMABearish(pBar.Index());
bool isCycleMABearish = isLCMABearish && isHCMABearish;
// Validating Market Direction ...
// by Checking HC and LC States ...
//
bool isLCBullish = fimaParser.IsLCMABullish(pBar.Index());
bool isHCBullish = fimaParser.IsHCMABullish(pBar.Index());
bool isLCHigherLow =
(fimaParser.IsLCHigherLow(pBar.Index()) ||
fimaParser.IsLCHigherLow(p2Bar.Index()) ||
fimaParser.IsLCHigherLow(p3Bar.Index()));
bool isCyclesBullish =
isLCBullish &&
isHCBullish &&
isLCHigherLow;
//
bool isLCBearish = fimaParser.IsLCMABearish(pBar.Index());
bool isHCBearish = fimaParser.IsHCMABearish(pBar.Index());
bool isLCLowerHigh =
(fimaParser.IsLCLowerHigh(pBar.Index()) ||
fimaParser.IsLCLowerHigh(p2Bar.Index()) ||
fimaParser.IsLCLowerHigh(p3Bar.Index()));
bool isCyclesBearish =
isLCBearish &&
isHCBearish &&
isLCLowerHigh;
//
// Looking For a Pin Bar in P2Bar ...
bool isP2BarIsPinBar = poiDetector.IsPinnedBar(
p2Bar,
tmpDir,
4, // Shadow Multiplier ...
4, // Minimum Range Multiplier ...
true // Force Pin Bar Direction ...
);
if (isP2BarIsPinBar)
{
//
isP2BarIsPinBar = ToBox(
p2Bar,
pinBarZone,
tmpDir,
X_BAR_PATTERN_PINNED //
);
if (isP2BarIsPinBar)
{
//
pinBarZone.to = bar.time;
isP2BarIsPinBar = poiDetector.HasBoundaryTrend(
pinBarZone,
pinBarZoneTrend,
false //
);
isP2BarIsPinBar =
isP2BarIsPinBar &&
tmpDir == pinBarZoneTrend.dir;
}
}
bool isP2BarPinnedBullish = isP2BarIsPinBar && IsXBullish(tmpDir);
bool isP2BarPinnedBearish = isP2BarIsPinBar && IsXBearish(tmpDir);
//
bool hasATRBox = fimaParser.GetATRBox(
atrBox,
bar.Index() //
);
//
isBullish =
hasBullishLeg &&
isCycleMABullish &&
isBullishPullback &&
isP2BarBullishPinned;
//
hasSupport &&
hasResistance &&
isCyclesBullish &&
isCyclePVBullish &&
isP2BarPinnedBullish &&
isPBarHasBullishPatterns &&
isP2BarHasBullishPatterns &&
true
//
;
//
isBearish =
hasBearishLeg &&
isCycleMABearish &&
isBearishPullback &&
isP2BarBearishPinned;
//
hasSupport &&
hasResistance &&
isCyclesBearish &&
isCyclePVBearish &&
isP2BarPinnedBearish &&
isPBarHasBearishPatterns &&
isP2BarHasBearishPatterns &&
true
//
;
//
// Validate ...
@@ -2215,37 +2285,61 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
{
//
zone.Clean();
zone = pullbackZone;
//
// Draws ...
if (result)
{
//
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
iConfig.trendRayLeft = false;
iConfig.trendRayRight = false;
//
poiDrawer.DrawZone(legZone, iConfig);
poiDrawer.DrawZone(pullbackZone, iConfig);
//
// poiDrawer.DrawTrendLine(boundaryTrend, iConfig);
// poiDrawer.DrawZone(zone, structureDrawConfig.drawConfig);
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
//
iConfig.Clean();
//
DebugBreak();
}
zone = pinBarZone;
//
result = zone.IsValid();
}
//
// Draws ...
if (result)
{
//
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
XPatternAnalysisDrawConfig iPatternsConfig = structureDrawConfig.barAnalysisDrawConfig;
iConfig.trendRayLeft = false;
iConfig.trendRayRight = false;
//
// poiDrawer.DrawZone(scPVZone, iConfig);
// poiDrawer.DrawZone(mcPVZone, iConfig);
// poiDrawer.DrawZone(lcPVZone, iConfig);
// poiDrawer.DrawZone(hcPVZone, iConfig);
//
poiDrawer.DrawPatternAnalysis(pBarPatterns, iPatternsConfig);
poiDrawer.DrawPatternAnalysis(p2BarPatterns, iPatternsConfig);
poiDrawer.DrawPatternAnalysis(p3BarPatterns, iPatternsConfig);
//
poiDrawer.DrawZone(pinBarZone, iConfig);
poiDrawer.DrawTrendLine(pinBarZoneTrend, iConfig);
//
poiDrawer.DrawZones(supports, iConfig);
poiDrawer.DrawZones(resistances, iConfig);
//
if (hasATRBox)
{
poiDrawer.DrawZone(atrBox, iConfig);
}
//
iConfig.Clean();
iPatternsConfig.Clean();
//
DebugBreak();
// //
// result = false;
// isBullish = false;
// isBearish = false;
// zone.Clean();
}
//
// Prepare Targets ...
if (result)
@@ -2264,9 +2358,22 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
pBar.Clean();
p2Bar.Clean();
p3Bar.Clean();
pullbackZone.Clean();
tmpBar.Clean();
tmpZone.Clean();
XClean(supports);
scPVZone.Clean();
mcPVZone.Clean();
lcPVZone.Clean();
hcPVZone.Clean();
tmpPivot.Clean();
pinBarZone.Clean();
XClean(resistances);
affectedZone.Clean();
pBarPatterns.Clean();
boundaryTrend.Clean();
p2BarPatterns.Clean();
p3BarPatterns.Clean();
pinBarZoneTrend.Clean();
iPatternsConfig.Clean();
//
return result;