last works ...

This commit is contained in:
2024-11-09 09:20:01 +03:30
parent 24fea8d8ec
commit 19064114d8
4 changed files with 1549 additions and 0 deletions
+186
View File
@@ -21,6 +21,7 @@
//
// Imports ...
#include "../Classes/x-saherelm.base.class.mq5"
#include "../Libraries/x-saherelm.x-poi.lib.mq5"
//
// Definitions ...
@@ -229,6 +230,191 @@ class XCBarAnalyser : public XSCBase
return result;
}
/**
* Converts an Specified Bar to Zone ...
*
* @param bar: XOHCL instance, Specified Bar ...
* @param zone: XZone instance, Converted Zone Reference ...
* @param dir: ENUM_X_DIRECTION member, Specified Bar Type to Convertion ...
*
* @return ( bool )
*/
bool ToZone(
XOHCL &bar,
XZone &zone,
ENUM_X_DIRECTION dir = X_DIRECTION_BULLISH //
)
{
//
bool result = false;
//
zone.Clean();
//
result = bar.IsValid() &&
(dir == X_DIRECTION_BULLISH ||
dir == X_DIRECTION_BEARISH);
if (!result)
{
return result;
}
//
bool isBullish = dir == X_DIRECTION_BULLISH;
//
zone.from = bar.time;
zone.to = TimeCurrent();
zone.prefix = "XBarZone";
//
zone.upper = isBullish
? bar.high
: bar.GetDown();
//
zone.lower = isBullish
? bar.GetUp()
: bar.low;
//
result = zone.IsValid();
//
return result;
}
//
// Regular ...
/**
* Check a Zone is Rejected in Specified Direction or not ...
*
* @param bar: XOHCL instance, Specified Bar ...
* @param zone: XZone instance, Specified Zone ...
* @param dir: ENUM_X_DIRECTION member, Specified Rejection Direction ...
*
* @return ( bool )
*/
bool IsRejected(
XOHCL &bar,
XZone &zone,
ENUM_X_DIRECTION dir //
)
{
//
bool result = false;
//
result = bar.IsValid() &&
zone.IsValid() &&
(dir == X_DIRECTION_BULLISH ||
dir == X_DIRECTION_BEARISH);
if (!result)
{
return result;
}
//
bool isBullish = dir == X_DIRECTION_BULLISH;
//
ENUM_X_DIRECTION rejectionDir;
bool isRejection = IsRejectionBar(
rejectionDir,
bar,
40 //
);
bool isBullishRejection = isRejection &&
rejectionDir == X_DIRECTION_BULLISH;
bool isBearishRejection = isRejection &&
rejectionDir == X_DIRECTION_BEARISH;
//
result = isRejection &&
rejectionDir == dir &&
(isBullishRejection
? bar.low < zone.upper &&
bar.low > zone.lower
: bar.high > zone.lower &&
bar.high < zone.upper);
//
return result;
}
/**
* Check a Zone is Breaked in Specified Direction or not ...
*
* @param bar: XOHCL instance, Specified Bar ...
* @param zone: XZone instance, Specified Zone ...
* @param dir: ENUM_X_DIRECTION member, Specified Rejection Direction ...
*
* @return ( bool )
*/
bool IsBreaked(
XOHCL &bar,
XZone &zone,
ENUM_X_DIRECTION dir,
bool forceBody = true //
)
{
//
bool result = false;
//
result = bar.IsValid() &&
zone.IsValid() &&
(dir == X_DIRECTION_BULLISH ||
dir == X_DIRECTION_BEARISH);
if (!result)
{
return result;
}
//
bool isBullish = dir == X_DIRECTION_BULLISH;
//
ENUM_X_DIRECTION momentumDir;
bool isMomentum = IsMomentumBar(
momentumDir,
bar,
50 //
);
bool isBullishBreaked = isMomentum &&
momentumDir == X_DIRECTION_BULLISH;
bool isBearishBreaked = isMomentum &&
momentumDir == X_DIRECTION_BEARISH;
//
result = isMomentum &&
momentumDir == dir &&
(isBullishBreaked
? bar.IsBullish() &&
bar.low < zone.lower &&
bar.high > zone.upper
: bar.IsBearish() &&
bar.high > zone.lower &&
bar.low < zone.lower);
if (result &&
forceBody)
{
//
result = isBullishBreaked
? bar.IsBullish() &&
bar.GetUp() > zone.upper &&
bar.GetDown() < zone.lower
: bar.IsBearish() &&
bar.GetUp() > zone.upper &&
bar.GetDown() < zone.lower;
}
//
return result;
}
//
// Rejection Bar ...
File diff suppressed because it is too large Load Diff