This commit is contained in:
2025-10-07 18:09:38 +03:30
parent ebfde3cb48
commit 69e155e050
8 changed files with 802 additions and 184 deletions
@@ -585,6 +585,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
// Use Default Config ...
);
DrawBarPatternAnalysis(iBarAnalysis);
//
// Disable Signallers ...
@@ -594,14 +595,14 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
// Strategy 1 ...
// Works on Support or Resistances Areas ...
has = Strategy1HasSignal(
iBar,
iZone,
iTargets,
iDir,
iFIMAConditions,
iStructure //
);
// has = Strategy1HasSignal(
// iBar,
// iZone,
// iTargets,
// iDir,
// iFIMAConditions,
// iStructure //
// );
//
// Strategy 2 ...
@@ -1247,7 +1248,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
IsXBullish(_patternDir)
? ANCHOR_TOP
: ANCHOR_BOTTOM,
_pivot.prefix + "_" + ToXString(TimeToSeconds(_pivot.time)),
"Pivot_" + _pivot.prefix + "_" + ToXString(TimeToSeconds(_pivot.time)),
true, // Ignore Bar Tag ...
arrowThreshold // Threshold ...
);
@@ -1270,7 +1271,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
_zone,
iObj,
ignoreBoxAt,
_zone.type + "_" + ToXString(TimeToSeconds(_zone.from)) //
"Zone_" + _zone.type + "_" + ToXString(TimeToSeconds(_zone.from)) //
);
if (has)
{
@@ -1319,6 +1320,44 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
return;
}
//
// Configure Draws ...
XPatternAnalysisDrawConfig config;
config.Default();
XClean(config.allowedDraws);
XClean(config.allowedDrawZones);
XClean(config.allowedDrawPivots);
//
// MOMENTUM ...
Add(
X_BAR_PATTERN_MOMENTUM,
config.allowedDraws //
);
Add(
X_BAR_PATTERN_MOMENTUM,
config.allowedDrawZones //
);
Add(
X_BAR_PATTERN_MOMENTUM,
config.allowedDrawPivots //
);
//
// ENGULFED ...
Add(
X_BAR_PATTERN_ENGULFED,
config.allowedDraws //
);
Add(
X_BAR_PATTERN_ENGULFED,
config.allowedDrawZones //
);
Add(
X_BAR_PATTERN_ENGULFED,
config.allowedDrawPivots //
);
//
// Draw Bar Patterns Analysis ...
@@ -1331,6 +1370,11 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
ENUM_X_BAR_PATTERN pattern;
ENUM_X_DIRECTION patternDir;
//
bool canDraw;
bool canDrawZone;
bool canDrawPivot;
//
// Support and Resistance ...
@@ -1344,23 +1388,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
pattern = X_BAR_PATTERN_SUPPORT;
patternDir = X_DIRECTION_BULLISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1372,25 +1435,44 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
if (has)
{
//
pattern = X_BAR_PATTERN_SUPPORT;
pattern = X_BAR_PATTERN_RESISTANCE;
patternDir = X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1407,23 +1489,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
pattern = X_BAR_PATTERN_LOW;
patternDir = X_DIRECTION_BULLISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1437,23 +1538,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
pattern = X_BAR_PATTERN_HIGH;
patternDir = X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1470,23 +1590,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1503,23 +1642,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1536,23 +1694,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1569,23 +1746,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1602,23 +1798,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1635,23 +1850,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1668,23 +1902,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1701,23 +1954,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1734,23 +2006,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1767,23 +2058,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}
@@ -1800,23 +2110,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
canDraw = config.CanDraw(pattern);
if (canDraw)
{
//
DrawPattern(
has = barAnalysis.GetPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
if (has)
{
//
canDrawZone = config.CanDrawZone(pattern);
if (!canDrawZone)
{
patternBox.Clean();
}
//
canDrawPivot = config.CanDrawPivot(pattern);
if (!canDrawPivot)
{
patternPivot.Clean();
}
//
DrawPattern(
patternBar,
patternPivot,
patternBox,
pattern,
patternDir //
);
}
}
}