Last Works on Validating Order Blocks ...

This commit is contained in:
2025-01-06 21:53:05 +03:30
parent 9d4b2ee578
commit 65b7a2ca7f
13 changed files with 3490 additions and 751 deletions
+309 -24
View File
@@ -747,26 +747,6 @@ class XCBarZone : public XCZone
return result;
}
ENUM_TIMEFRAMES GetPeriod()
{
//
ENUM_TIMEFRAMES result = NULL;
//
XOHCL bar;
bool isFilled = FillBar(bar);
if (!isFilled)
{
return result;
}
//
result = bar.period;
//
return result;
}
/**
* Set From Date ...
*
@@ -817,6 +797,52 @@ class XCBarZone : public XCZone
return mBar.time;
}
/**
* Get Symbol ...
*
* @return ( string )
*/
string GetSymbol()
{
//
string result = NULL;
//
if (!mBar.IsValid())
{
return result;
}
//
return mBar.symbol;
//
return result;
}
/**
* Get Period ...
*
* @return ( int )
*/
ENUM_TIMEFRAMES GetPeriod()
{
//
ENUM_TIMEFRAMES result = NULL;
//
if (!mBar.IsValid())
{
return result;
}
//
return mBar.period;
//
return result;
}
//
// Overrides ...
@@ -1097,21 +1123,47 @@ class XCTwoBarZone : public XCZone
return result;
}
/**
* Get Symbol ...
*
* @return ( string )
*/
string GetSymbol()
{
//
string result = NULL;
//
if (!mStartBar.IsValid())
{
return result;
}
//
return mStartBar.symbol;
//
return result;
}
/**
* Get Period ...
*
* @return ( int )
*/
ENUM_TIMEFRAMES GetPeriod()
{
//
ENUM_TIMEFRAMES result = NULL;
//
XOHCL bar;
bool isFilled = FillStartBar(bar);
if (!isFilled)
if (!mStartBar.IsValid())
{
return result;
}
//
result = bar.period;
return mStartBar.period;
//
return result;
@@ -2071,6 +2123,163 @@ class XCOrderBlock : public XCBarZone
return result;
}
/**
* Detect Order Blocks Breaker Bar ...
*
* @param breakerBar: XOHCL instance Reference ...
*
* @return ( bool )
*/
bool DetectBreakerBar(XOHCL &breakerBar)
{
//
bool result = false;
//
breakerBar.Clean();
//
result = IsValid();
if (!result)
{
return result;
}
//
XOHCL fromBar;
result = FillBar(fromBar);
if (!result)
{
return result;
}
//
int fromIndex = fromBar.Index();
result = fromIndex > 0;
if (!result)
{
return result;
}
//
bool isBullish = IsBullish();
ENUM_X_DIRECTION dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
double value =
isBullish
? Upper()
: Lower();
//
for (int i = fromIndex - 1; i >= 0; i--)
{
//
XOHCL iBar;
bool isInited = iBar.Init(
fromBar.symbol,
fromBar.period,
i //
);
if (!isInited)
{
continue;
}
//
isInited = IsBarBreak(
value,
dir,
iBar //
);
if (isInited)
{
//
breakerBar = iBar;
break;
}
}
//
result = breakerBar.IsValid();
//
return result;
}
/**
* Check Order Block is Hunted or not ...
*
* @param huntedBar: XOHCL instance Reference ...
*
* @return ( bool )
*/
bool IsHunted(XOHCL &huntedBar)
{
//
bool result = false;
//
huntedBar.Clean();
//
result = IsValid();
if (!result)
{
return result;
}
//
XOHCL breakerBar;
result = DetectBreakerBar(breakerBar);
if (!result)
{
return result;
}
//
bool isBullish = IsBullish();
//
int breakerIndex = breakerBar.Index();
for (int i = breakerIndex - 1; i >= 0; i--)
{
//
XOHCL iBar;
result = iBar.Init(
breakerBar.symbol,
breakerBar.period,
i //
);
//
double price =
isBullish
? iBar.low
: iBar.high;
//
result = IsPriceInsideZone(
price,
Upper(),
Lower() //
);
if (result)
{
//
huntedBar = iBar;
break;
}
}
//
result = huntedBar.IsValid();
//
return result;
}
//
// Overrides ...
@@ -8208,6 +8417,48 @@ bool IsPriceInsideZone(
//
return result;
}
bool IsPriceInsideZone(
XOHCL &bar,
double upper,
double lower //
)
{
//
bool result = false;
//
result =
upper > 0 &&
lower > 0 &&
upper > lower &&
bar.IsValid();
if (!result)
{
return result;
}
//
double ask = GetAsk(bar.symbol);
double bid = GetBid(bar.symbol);
//
result =
//
ask <= upper &&
bid <= upper &&
bar.low <= upper
//
&&
//
ask >= lower &&
bid >= lower &&
bar.low >= lower
//
;
//
return result;
}
/**
* Check Price Inside Specified Zone ...
@@ -8246,6 +8497,40 @@ bool IsPriceInsideZone(
//
return result;
}
bool IsPriceInsideZone(
double price,
double upper,
double lower //
)
{
//
bool result = false;
//
result =
price > 0 &&
upper > 0 &&
lower > 0 &&
upper > lower;
if (!result)
{
return result;
}
//
result =
//
price <= upper
//
&&
//
price >= lower
//
;
//
return result;
}
/**
* Calculate Target for Specified Direction ...