This commit is contained in:
2025-03-27 17:47:02 +03:30
parent 8278d132dd
commit c00704b83b
11 changed files with 1530 additions and 559 deletions
+113
View File
@@ -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;
}
//
+199
View File
@@ -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 ...