last ...
This commit is contained in:
@@ -2700,6 +2700,60 @@ class XCTicksZone : public XCTwoBarZone
|
|||||||
return mZones.At(index);
|
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 ...
|
// Overrides ...
|
||||||
bool IsValid() override
|
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 ...
|
// Counters ...
|
||||||
|
|
||||||
|
|||||||
@@ -324,6 +324,39 @@ struct XPVPivot
|
|||||||
return result;
|
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();
|
double pivotMid = lastPivot.CalculateMid();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Looks For Long ...
|
// Calculate Liquidity Percent ...
|
||||||
// - [] Bullish Direction;
|
double bullishLiquidityPercent = lastPivot
|
||||||
// - [] Discount Area;
|
.CalculateLiquidityPercent(X_DIRECTION_BULLISH);
|
||||||
bool lookupLong =
|
double bearishLiquidityPercent = lastPivot
|
||||||
isBullish &&
|
.CalculateLiquidityPercent(X_DIRECTION_BEARISH);
|
||||||
bid < pivotMid &&
|
|
||||||
bid > lastPivot.lower;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Looks For Short ...
|
bool isInDiscount =
|
||||||
// - [] Bearish Direction ...
|
bid < pivotMid &&
|
||||||
// - [] Premium Area ...
|
bid > lastPivot.lower;
|
||||||
bool lookupShort =
|
if (isInDiscount)
|
||||||
isBearish &&
|
{
|
||||||
|
Print("In Disount Zone ...");
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsInPremium =
|
||||||
bid > pivotMid &&
|
bid > pivotMid &&
|
||||||
bid < lastPivot.upper;
|
bid < lastPivot.upper;
|
||||||
|
if (IsInPremium)
|
||||||
|
{
|
||||||
|
Print("In Premium Zone ...");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Order Flow Validation ...
|
// Check Order Flow Validation ...
|
||||||
@@ -272,14 +279,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
result = lookupLong ||
|
|
||||||
lookupShort;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
result = hasLong ||
|
result = hasLong ||
|
||||||
hasShort;
|
hasShort;
|
||||||
|
|||||||
Reference in New Issue
Block a user