This commit is contained in:
2024-11-20 03:19:37 +03:30
parent 868eecc916
commit a5f68da772
3 changed files with 156 additions and 20 deletions
+104
View File
@@ -2700,6 +2700,60 @@ class XCTicksZone : public XCTwoBarZone
return mZones.At(index);
}
/**
* Calculate Liquidity Percent for Specified Direction ...
*
* @param forDirection: ENUM_X_DIRECTION member, Specified Liquidity ...
* @param price: Double, Specified Price ...
*
* @return ( double )
*/
double CalculateLiquidityPercent(
ENUM_X_DIRECTION forDirection,
double price //
)
{
//
double result = 0;
//
int count = Count();
if (price <= 0 ||
!IsValid() ||
!IsValidSize(count) ||
forDirection == X_DIRECTION_ALL ||
forDirection == X_DIRECTION_NONE)
{
return result;
}
//
bool isBullish = forDirection == X_DIRECTION_BULLISH;
//
for (int i = 0; i < count; i++)
{
//
XCTickZone *iZone = GetZone(i);
//
if (iZone.IsValid())
{
//
result += !isBullish &&
price > iZone.high
? iZone.percent
: isBullish &&
price < iZone.low
? iZone.percent
: 0;
}
}
//
return result;
}
//
// Overrides ...
bool IsValid() override
@@ -3144,6 +3198,56 @@ struct XPOIState
//
}
/**
* Calculate Liquidity Percent for Specified Direction ...
*
* @param forDirection: ENUM_X_DIRECTION member, Specified Liquidity ...
* @param price: Double, Specified Price ...
*
* @return ( double )
*/
double CalculateLiquidityPercent(
ENUM_X_DIRECTION forDirection,
double price = 0 //
)
{
//
double result = 0;
//
if (!IsValid() ||
ticksZone == NULL)
{
return result;
}
//
// Normalize Price for Actions ...
if (price <= 0)
{
//
MqlTick mTick;
bool isTickRetrieved = GetTick(
symbol,
mTick //
);
if (isTickRetrieved)
{
price = mTick.bid;
}
}
//
result = ticksZone
.CalculateLiquidityPercent(
forDirection,
price //
);
//
return result;
}
//
// Counters ...
+33
View File
@@ -324,6 +324,39 @@ struct XPVPivot
return result;
}
/**
* Calculate Liquidity Percent for Specified Direction ...
*
* @param forDirection: ENUM_X_DIRECTION member, Specified Liquidity ...
* @param price: Double, Specified Price ...
*
* @return ( double )
*/
double CalculateLiquidityPercent(
ENUM_X_DIRECTION forDirection,
double price = 0 //
)
{
//
double result = 0;
//
if (!IsValid())
{
return result;
}
//
result = state
.CalculateLiquidityPercent(
forDirection,
price //
);
//
return result;
}
//
/**
@@ -206,22 +206,29 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
double pivotMid = lastPivot.CalculateMid();
//
// Looks For Long ...
// - [] Bullish Direction;
// - [] Discount Area;
bool lookupLong =
isBullish &&
bid < pivotMid &&
bid > lastPivot.lower;
// Calculate Liquidity Percent ...
double bullishLiquidityPercent = lastPivot
.CalculateLiquidityPercent(X_DIRECTION_BULLISH);
double bearishLiquidityPercent = lastPivot
.CalculateLiquidityPercent(X_DIRECTION_BEARISH);
//
// Looks For Short ...
// - [] Bearish Direction ...
// - [] Premium Area ...
bool lookupShort =
isBearish &&
bool isInDiscount =
bid < pivotMid &&
bid > lastPivot.lower;
if (isInDiscount)
{
Print("In Disount Zone ...");
}
//
bool IsInPremium =
bid > pivotMid &&
bid < lastPivot.upper;
if (IsInPremium)
{
Print("In Premium Zone ...");
}
//
// Check Order Flow Validation ...
@@ -272,14 +279,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
return result;
}
//
result = lookupLong ||
lookupShort;
if (!result)
{
return result;
}
//
result = hasLong ||
hasShort;