This commit is contained in:
2025-10-19 01:00:24 +03:30
parent d24610c47b
commit ba492bf205
4 changed files with 330 additions and 16 deletions
+8 -8
View File
@@ -1882,7 +1882,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Doji Pattern or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param shadowMultiplier: double, Specified Shadow Multiplier ...
*
* @return ( bool )
@@ -1938,7 +1938,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Swing or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param loopback: int, Specified Loopback ...
*
* @return ( bool )
@@ -2062,7 +2062,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar's Prev Bar is Simple Swing or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to it's Prev Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
*
* @return ( bool )
*/
@@ -2145,7 +2145,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Hammer Pattern or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param bodyMultiplier: double, Specified Body Multiplier ...
*
* @return ( bool )
@@ -2205,7 +2205,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Engulfed Prev Bar or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
*
* @return ( bool )
*/
@@ -2286,7 +2286,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Momentum Bar or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param forceBarType: bool, Force Apply Bar Type ...
* @param forceFiboPressure: bool, Force Apply Bar Type ...
*
@@ -2431,7 +2431,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Momentum Bar or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param loopback: int, Specified Loopback ...
*
* @return ( bool )
@@ -2538,7 +2538,7 @@ class XCBarAnalyser : public XCBase
* Check Specified Bar is Pullback or not ...
*
* @param bar: XOHCL instance reference, Specified Bar to Check ...
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
* @param loopback: int, Specified Loopback ...
* @param forceBody: bool, Force Using Body ...
*
@@ -1300,6 +1300,137 @@ class XCMarketPatternDetector : public XCBase
return result;
}
/**
* Check Specified Bar has Pullback Bar Pattern or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param zone: XBoxZone, refrence to hold pullback zone ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param pullbackLength: int, min required indirectional bars to confirm pullback ...
* @param forceBreak: bool, force pullback bar breaks peak or vale of Zone ...
*
* @return ( bool )
*/
bool IsPullbackPattern(
XOHCL &bar,
XBoxZone &zone,
ENUM_X_DIRECTION &dir,
int pullbackLength = 2,
bool forceBreak = false //
)
{
//
bool result = false;
//
// Prepare ...
zone.Clean();
CleanDirection(dir);
//
// Normalize ...
pullbackLength = NormalizeInt(pullbackLength, 2);
//
// Validate ...
result = bar.IsValid();
if (!result)
{
return result;
}
//
// First Bar Direction ...
dir = bar.GetDirection();
result = HasDirection(dir);
if (!result)
{
return result;
}
//
// Loop through Pullback Length ...
XOHCL iBar;
datetime from = NULL;
double max = EMPTY_VALUE;
double min = EMPTY_VALUE;
int start = bar.Index() + 1;
int end = start + pullbackLength;
for (int i = start; i < end; i++)
{
//
// Initialize Indexed Bar ...
iBar.Clean();
result = bar.BarAt(i, iBar) &&
iBar.GetDirection() == Opposit(dir);
if (!result)
{
break;
}
//
// Calculate Max and Min ...
max =
!NotEmptyZero(max)
? iBar.high
: MathMax(max, iBar.high);
min =
!NotEmptyZero(min)
? iBar.low
: MathMin(min, iBar.low);
from = iBar.time;
}
//
// Apply Force Break ...
if (result &&
forceBreak)
{
//
result =
result &&
NotEmptyZero(min) &&
NotEmptyZero(max) &&
(IsXBullish(dir)
? bar.close > max
: bar.close < min);
}
//
// Prepare Zone ...
if (result)
{
//
ToBox(
bar,
zone,
dir,
ToXString(X_BAR_PATTERN_PULLBACK) //
);
zone.upper = max;
zone.lower = min;
zone.from = from;
zone.at = bar.time;
zone.to = bar.time;
//
result = zone.IsValid();
}
//
// Cleanup ...
if (!result)
{
//
zone.Clean();
CleanDirection(dir);
}
iBar.Clean();
//
return result;
}
//
// FVG ...