This commit is contained in:
2025-05-21 18:57:44 +03:30
parent 3e29a557bf
commit 8f6d0f9889
7 changed files with 1197 additions and 102 deletions
+113
View File
@@ -615,6 +615,119 @@ class XCBarAnalyser : public XCBase
return result;
}
bool DetectRangeBlocks(
XOHCL &bar,
XBoxZone &upper,
XBoxZone &lower,
int loopback = 288,
ENUM_SERIESMODE upperRangeUpperMode = MODE_HIGH,
ENUM_SERIESMODE upperRangeLowerMode = MODE_LOW,
ENUM_SERIESMODE lowerRangeUpperMode = MODE_HIGH,
ENUM_SERIESMODE lowerRangeLowerMode = MODE_LOW //
)
{
//
bool result = false;
//
// Normalize Args ...
upper.Clean();
lower.Clean();
loopback = NormalizeInt(loopback, 10);
//
// Validate Args ...
result = bar.IsValid();
if (!result)
{
return result;
}
//
XOHCL iBar;
result = iBar.Init(
bar.symbol,
bar.period,
bar.Index() + loopback //
);
if (!result)
{
//
iBar.Clean();
//
return result;
}
//
double hhUpper = iBar.FindHighest(loopback, upperRangeUpperMode);
double hhLower = iBar.FindHighest(loopback, upperRangeLowerMode);
//
double llUpper = iBar.FindLowest(loopback, lowerRangeUpperMode);
double llLower = iBar.FindLowest(loopback, lowerRangeLowerMode);
//
double bhhUpper = bar.FindHighest(iBar.Index() - bar.Index(), upperRangeUpperMode);
double bhhLower = bar.FindHighest(iBar.Index() - bar.Index(), upperRangeLowerMode);
//
double bllUpper = bar.FindLowest(iBar.Index() - bar.Index(), lowerRangeUpperMode);
double bllLower = bar.FindLowest(iBar.Index() - bar.Index(), lowerRangeLowerMode);
//
hhUpper = MathMax(hhUpper, bhhUpper);
hhLower = MathMax(hhLower, bhhLower);
//
llUpper = MathMin(llUpper, bllUpper);
llLower = MathMin(llLower, bllLower);
//
datetime from = GetBarTime(
iBar.symbol,
iBar.period,
iBar.Index() + loopback //
);
//
upper.from = from;
upper.type = "XRNG";
upper.to = bar.time;
upper.upper = hhUpper;
upper.lower = hhLower;
upper.symbol = iBar.symbol;
upper.period = iBar.period;
upper.dir = X_DIRECTION_BEARISH;
//
lower.from = from;
lower.type = "XRNG";
lower.to = bar.time;
lower.upper = llUpper;
lower.lower = llLower;
lower.symbol = iBar.symbol;
lower.period = iBar.period;
lower.dir = X_DIRECTION_BULLISH;
//
result = upper.IsValid() &&
lower.IsValid();
if (!result)
{
//
iBar.Clean();
upper.Clean();
lower.Clean();
}
//
iBar.Clean();
//
return result;
}
/**
* Detect Same Bars ...
*