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