last ...
This commit is contained in:
@@ -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 ...
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user