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