last works on Strategy 3 ...

This commit is contained in:
2025-10-27 06:11:00 +03:30
parent 31f1abb8d3
commit bfd5bd4f69
@@ -446,6 +446,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
XClean(guards);
return result;
//
int positionsCount = ArraySize(positions);
@@ -1393,8 +1394,8 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// Signaller Flags ...
bool useSignaller1 = false;
bool useSignaller2 = false;
bool useSignaller3 = false;
bool useSignaller4 = true;
bool useSignaller3 = true;
bool useSignaller4 = false;
//
// Validator Flags ...
@@ -1412,20 +1413,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// Draw Flags ...
bool draw = true;
bool drawZone = true;
bool drawMarketStructurePivots = true;
bool drawMarketStructureAnalysis = true;
bool drawMarketStructureOrderFlow = true;
bool drawMarketStructurePivots = false;
bool drawMarketStructureAnalysis = false;
bool drawMarketStructureOrderFlow = false;
XPOIDrawConfig iDrawConfig;
//
drawLeg = false;
drawZones = true;
drawIZones = true;
drawSupport = true;
drawISupport = true;
drawZones = false;
drawIZones = false;
drawSupport = false;
drawISupport = false;
drawOrderFlow = false;
drawResistance = true;
drawIResistance = true;
drawResistance = false;
drawIResistance = false;
//
// Signal Checking ...
@@ -2345,191 +2346,269 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
}
//
// Configurations ...
// int patternsFillValidation = 3;
// Validation Flags ...
// //
// // Validation Flags ...
// bool validateByBarPatterns = true;
//
bool validateByPVChanges = true;
bool validateByGapExists = true;
bool validateByBarShadows = true;
bool validateHasDirectionalZone = true;
// //
// // Define Requirements ...
//
// Define Requirements ...
// //
// XOHCL pBar;
// XOHCL p2Bar;
// XOHCL p3Bar;
// bool isBullish = false;
// bool isBearish = false;
//
XOHCL pBar;
XOHCL p2Bar;
XOHCL p3Bar;
bool isBullish = false;
bool isBearish = false;
// //
// // Read PBar ...
// result = bar.GetPreviousBar(pBar);
// result = result &&
// pBar.GetPreviousBar(p2Bar);
// result = result &&
// p2Bar.GetPreviousBar(p3Bar);
// if (!result)
// {
// //
// pBar.Clean();
// p2Bar.Clean();
// p3Bar.Clean();
//
// Read PBar ...
result = bar.GetPreviousBar(pBar);
result = result &&
pBar.GetPreviousBar(p2Bar);
result = result &&
p2Bar.GetPreviousBar(p3Bar);
if (!result)
{
//
pBar.Clean();
p2Bar.Clean();
p3Bar.Clean();
// //
// return result;
// }
//
return result;
}
// //
// // Do ...
//
// Do ...
// //
// // Retrieve pBar Patterns ...
// XPatternAnalysis pBarPatterns;
// XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig;
// poiDetector.AnalyseBarPatterns(
// pBar,
// pBarPatterns,
// patternConfig //
// );
//
// Retrieve pBar Patterns ...
XBoxZone _fvg;
XBoxZone _support;
XBoxZone _resistance;
XPatternAnalysis pBarPatterns;
XPatternAnalysis p2BarPatterns;
XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig;
// //
// int pBarBullishPatternsCount =
// !pBarPatterns.IsValid()
// ? 0
// : pBarPatterns.Count(X_DIRECTION_BULLISH);
// bool isPBarFillBullishPatterns =
// IsValidSize(pBarBullishPatternsCount) &&
// pBarBullishPatternsCount >= patternsFillValidation;
// bool isPBarHasBullishPatterns =
// pBarPatterns.IsValid() &&
// (
// //
// pBarPatterns.IsPinned(X_DIRECTION_BULLISH) ||
// pBarPatterns.IsEngulfed(X_DIRECTION_BULLISH) ||
// pBarPatterns.IsMomentum(X_DIRECTION_BULLISH) ||
// pBarPatterns.IsPiercing(X_DIRECTION_BULLISH) ||
// pBarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
// //
// );
//
poiDetector.AnalyseBarPatterns(
pBar,
pBarPatterns,
patternConfig //
);
poiDetector.AnalyseBarPatterns(
p2Bar,
p2BarPatterns,
patternConfig //
);
// //
// int pBarBearishPatternsCount =
// !pBarPatterns.IsValid()
// ? 0
// : pBarPatterns.Count(X_DIRECTION_BEARISH);
// bool isPBarFillBearishPatterns =
// IsValidSize(pBarBearishPatternsCount) &&
// pBarBearishPatternsCount >= patternsFillValidation;
// bool isPBarHasBearishPatterns =
// pBarPatterns.IsValid() &&
// (
// //
// pBarPatterns.IsPinned(X_DIRECTION_BEARISH) ||
// pBarPatterns.IsEngulfed(X_DIRECTION_BEARISH) ||
// pBarPatterns.IsMomentum(X_DIRECTION_BEARISH) ||
// pBarPatterns.IsPiercing(X_DIRECTION_BEARISH) ||
// pBarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
// //
// );
//
// Price Must Break Support or Resistance ...
// //
// bool hasSupport = HasSupport();
// bool hasResistance = HasResistance();
//
// Extract Support and Resistance ...
bool hasSupport = p2BarPatterns.IsSupport();
bool hasResistance = p2BarPatterns.IsResistance();
if (hasSupport)
{
//
XOHCL tmpBar;
XPivot tmpPivot;
hasSupport = p2BarPatterns.GetSupport(tmpBar, tmpPivot, _support);
tmpBar.Clean();
tmpPivot.Clean();
}
if (hasResistance)
{
//
XOHCL tmpBar;
XPivot tmpPivot;
hasResistance = p2BarPatterns.GetResistance(tmpBar, tmpPivot, _resistance);
tmpBar.Clean();
tmpPivot.Clean();
}
// //
// bool isP2BarInSupport = hasSupport &&
// pBar.low > support.lower &&
// p2Bar.low < support.upper &&
// p2Bar.low > support.lower;
//
bool hasBreakedSupport = hasSupport &&
pBar.close < _support.lower &&
p2Bar.close > _support.lower;
bool hasBreakedResistance = hasResistance &&
pBar.close > _resistance.upper &&
p2Bar.close < _resistance.upper;
// //
// bool isP2BarInResistance = hasResistance &&
// pBar.high < resistance.upper &&
// p2Bar.high > resistance.lower &&
// p2Bar.high < resistance.upper;
//
isBullish = hasBreakedResistance;
isBearish = hasBreakedSupport;
// //
// isBullish =
// hasSupport &&
// isP2BarInSupport;
//
result = isBullish || isBearish;
// //
// isBearish =
// hasResistance &&
// isP2BarInResistance;
//
// Validate By PV Changed ...
// Breaker Bar must Change Peak or Value ...
if (result && validateByPVChanges)
{
//
bool isPeakOverLast = fimaParser.IsPeakOverLast(pBar.Index());
bool isValeUnderLast = fimaParser.IsValeUnderLast(pBar.Index());
// //
// // Summarize Result ...
// result = isBullish || isBearish;
//
isBullish =
isBullish &&
isPeakOverLast;
// //
// // Validate Bar Patterns ...
// if (result && validateByBarPatterns)
// {
// //
// isBullish =
// isBullish &&
// isPBarHasBullishPatterns &&
// isPBarFillBullishPatterns;
//
isBearish =
isBearish &&
isValeUnderLast;
// //
// isBearish =
// isBearish &&
// isPBarHasBearishPatterns &&
// isPBarFillBearishPatterns;
//
// Summarize Result ...
result = isBullish || isBearish;
}
// //
// // Summarize result ...
// result = isBullish || isBearish;
// }
//
// Validate by Bar Shadows ...
// Breakre Bar Side Shadow must not Reached ...
if (result && validateByBarShadows)
{
//
isBullish =
isBullish &&
pBar.low > p2Bar.low;
// //
// if (result)
// {
// //
// poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
// // poiDrawer.DrawPatternAnalysis(p2BarPatterns, structureDrawConfig.barAnalysisDrawConfig);
// DebugBreak();
//
isBearish =
isBearish &&
pBar.high < p2Bar.high;
// //
// result = false;
// isBullish = false;
// isBearish = false;
// }
//
// Summarize Result ...
result = isBullish || isBearish;
}
// //
// // Validate ...
// result = isBullish ||
// isBearish;
//
// Validate Has Directional Zone ...
if (result && validateHasDirectionalZone)
{
//
isBullish =
isBullish &&
hasSupport;
// //
// // Prepare Zone ...
// if (result)
// {
// }
//
isBearish =
isBearish &&
hasResistance;
// //
// // Prepare Targets ...
// if (result)
// {
// }
//
// Summarize Result ...
result = isBullish || isBearish;
}
// //
// // Cleanup ...
// if (!result)
// {
// //
// zone.Clean();
// XClean(targets);
// dir = X_DIRECTION_NONE;
// }
// pBar.Clean();
// p2Bar.Clean();
// p3Bar.Clean();
// // pBarPatterns.Clean();
// // patternConfig.Clean();
// // p2BarPatterns.Clean();
//
// Validate By Gap Exists ...
if (result && validateByGapExists)
{
//
ENUM_X_DIRECTION tmpDir;
bool hasFVG = poiDetector.HasFVG(
pBar,
tmpDir,
_fvg //
);
//
isBullish =
isBullish &&
hasFVG &&
IsXBullish(tmpDir);
//
isBearish =
isBearish &&
hasFVG &&
IsXBearish(tmpDir);
//
// Summarize Result ...
result = isBullish || isBearish;
}
//
// Prepare Direction and Zone ...
if (result)
{
//
if (isBullish)
{
//
zone = _resistance;
zone.dir = Opposit(_resistance.dir);
dir = zone.dir;
zone.upper = MathMax(zone.upper, _fvg.upper);
zone.lower = MathMin(zone.lower, _fvg.lower);
}
//
if (isBearish)
{
//
zone = _support;
zone.dir = Opposit(_support.dir);
dir = zone.dir;
zone.upper = MathMax(zone.upper, _fvg.upper);
zone.lower = MathMin(zone.lower, _fvg.lower);
}
//
result = zone.IsValid();
}
//
if (result)
{
//
if (_support.IsValid())
{
poiDrawer.DrawZone(_support, structureDrawConfig.drawConfig);
}
//
if (_resistance.IsValid())
{
poiDrawer.DrawZone(_resistance, structureDrawConfig.drawConfig);
}
//
if (pBarPatterns.IsValid())
{
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
}
//
// DebugBreak();
}
//
// Cleanup ...
if (!result)
{
//
zone.Clean();
XClean(targets);
dir = X_DIRECTION_NONE;
}
pBar.Clean();
p2Bar.Clean();
p3Bar.Clean();
pBarPatterns.Clean();
p2BarPatterns.Clean();
patternConfig.Clean();
//
return result;