last ...
This commit is contained in:
@@ -960,6 +960,119 @@ struct XOHCL
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasFiboPressure(
|
||||
ENUM_X_DIRECTION forDir,
|
||||
ENUM_X_FIBO_LEVELS level = X_FIBO_LEVEL_382 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid() &&
|
||||
HasDirection(forDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isBullish = IsBullish(forDir);
|
||||
bool isBearish = IsBearish(forDir);
|
||||
|
||||
//
|
||||
double fiboLevelValue = GetFibonacciLevel(
|
||||
high,
|
||||
low,
|
||||
level,
|
||||
forDir //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
GetDown() > fiboLevelValue;
|
||||
isBearish =
|
||||
isBearish &&
|
||||
GetUp() < fiboLevelValue;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool IsRejected(
|
||||
double price,
|
||||
ENUM_X_DIRECTION forDir,
|
||||
bool forceType = false,
|
||||
bool forcePressure = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid() &&
|
||||
price > 0 &&
|
||||
HasDirection(forDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isBullish =
|
||||
IsBullish(forDir) &&
|
||||
low < price &&
|
||||
GetDown() > price;
|
||||
|
||||
//
|
||||
bool isBearish =
|
||||
IsBearish(forDir) &&
|
||||
high > price &&
|
||||
GetUp() < price;
|
||||
|
||||
//
|
||||
if (forceType)
|
||||
{
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
IsBullish();
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
IsBearish();
|
||||
}
|
||||
|
||||
//
|
||||
if (forcePressure)
|
||||
{
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
HasFiboPressure(forDir);
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
HasFiboPressure(forDir);
|
||||
}
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Find Highest Bar Index ...
|
||||
int FindHighestIndex(
|
||||
|
||||
@@ -3240,4 +3240,139 @@ bool DetectBoxNearestPriceOut(
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count number of Box Retests ...
|
||||
*
|
||||
* @param box: XBoxZone instance Reference ...
|
||||
* @param forDir: ENUM_X_DIRECTION member, Specified Retesting Direction ...
|
||||
* @param forPeriod: ENUM_TIMEFRAMES member, Specified Retesting Period ...
|
||||
* @param forceType: bool, Specified Retest Bar Direction is Same as Retesting Direction ...
|
||||
* @param forcePressure: bool, Specified Retest Bar must Has Fibo Pressure or not ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int CountBoxRetest(
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION forDir = NULL,
|
||||
ENUM_TIMEFRAMES forPeriod = NULL,
|
||||
bool forceType = false,
|
||||
bool forcePressure = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid(forPeriod))
|
||||
{
|
||||
forPeriod = box.period;
|
||||
}
|
||||
|
||||
//
|
||||
if (!IsValid(forDir))
|
||||
{
|
||||
forDir = box.dir;
|
||||
}
|
||||
|
||||
//
|
||||
bool isValid =
|
||||
box.IsValid() &&
|
||||
IsValid(forDir);
|
||||
if (!isValid)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int fromIDX = GetBarIndex(
|
||||
box.symbol,
|
||||
forPeriod,
|
||||
box.from //
|
||||
);
|
||||
|
||||
//
|
||||
int toIDX = GetBarIndex(
|
||||
box.symbol,
|
||||
forPeriod,
|
||||
box.to //
|
||||
);
|
||||
|
||||
//
|
||||
for (int i = fromIDX; i >= toIDX; i--)
|
||||
{
|
||||
//
|
||||
// Initialize Indexed Bar ...
|
||||
XOHCL iBar;
|
||||
isValid = iBar.Init(
|
||||
box.symbol,
|
||||
forPeriod,
|
||||
i //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
iBar.Clean();
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isUpperBullishRejected = iBar.IsRejected(
|
||||
box.upper,
|
||||
X_DIRECTION_BULLISH,
|
||||
forceType,
|
||||
forcePressure //
|
||||
);
|
||||
bool isUpperBearishRejected = iBar.IsRejected(
|
||||
box.upper,
|
||||
X_DIRECTION_BEARISH,
|
||||
forceType,
|
||||
forcePressure //
|
||||
);
|
||||
|
||||
//
|
||||
bool isLowerBullishRejected = iBar.IsRejected(
|
||||
box.lower,
|
||||
X_DIRECTION_BULLISH,
|
||||
forceType,
|
||||
forcePressure //
|
||||
);
|
||||
bool isLowerBearishRejected = iBar.IsRejected(
|
||||
box.lower,
|
||||
X_DIRECTION_BEARISH,
|
||||
forceType,
|
||||
forcePressure //
|
||||
);
|
||||
|
||||
//
|
||||
if (forDir == X_DIRECTION_ALL ||
|
||||
forDir == X_DIRECTION_BULLISH)
|
||||
{
|
||||
//
|
||||
if (isUpperBullishRejected ||
|
||||
isLowerBullishRejected)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (forDir == X_DIRECTION_ALL ||
|
||||
forDir == X_DIRECTION_BEARISH)
|
||||
{
|
||||
//
|
||||
if (isUpperBearishRejected ||
|
||||
isLowerBearishRejected)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1052,6 +1052,205 @@ struct XPOIState
|
||||
return ArraySize(bearishConsolidationZones);
|
||||
}
|
||||
|
||||
//
|
||||
// Box Retrievers ...
|
||||
|
||||
//
|
||||
int SupportResistancesAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
|
||||
//
|
||||
ToBox(
|
||||
supportZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
ToBox(
|
||||
resistanceZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int SupplyDemandsAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
|
||||
//
|
||||
ToBox(
|
||||
supplyZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
ToBox(
|
||||
demandZones,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int OrderBlocksAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
|
||||
//
|
||||
ToBox(
|
||||
bullishOrderBlocks,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
ToBox(
|
||||
bearishOrderBlocks,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int FairValueGapsAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
|
||||
//
|
||||
ToBox(
|
||||
bullishFairValueGaps,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
ToBox(
|
||||
bearishFairValueGaps,
|
||||
tmpBoxes //
|
||||
);
|
||||
Copy(
|
||||
tmpBoxes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
Clean(tmpBoxes);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int SpikesAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
bullishSpikes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
bearishSpikes,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int SharpsAsBox(XBoxZone &items[])
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
bullishSharps,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
bearishSharps,
|
||||
items,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
int result = ArraySize(items);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user