This commit is contained in:
2025-01-04 05:19:28 +03:30
parent fbc232a2b7
commit 6f61bc6d30
8 changed files with 783 additions and 143 deletions
+290 -8
View File
@@ -5225,15 +5225,10 @@ struct XPriceZones
//
Clean(zones);
//
if (dir == X_DIRECTION_NONE)
{
return result;
}
//
bool isBullish = IsBullish(dir);
bool isBoth = dir == X_DIRECTION_ALL;
bool isBoth = dir == X_DIRECTION_ALL ||
dir == X_DIRECTION_NONE;
//
if (isBoth || isBullish)
@@ -5396,6 +5391,293 @@ struct XPriceZones
return result;
}
/**
* Calculate Lifetime of Zones ...
*
* @param dir: ENUM_X_DIRECTION Member, Specified Direction ...
* @param from: DateTime ...
* @param to: DateTime ...
*
* @return ( bool )
*/
bool GetLifetime(
ENUM_X_DIRECTION dir,
datetime &from,
datetime &to //
)
{
//
bool result = false;
//
to = NULL;
from = NULL;
//
XCZone *zones[];
int mCount = FillZones(dir, zones);
result = IsValidSize(mCount);
if (!result)
{
return result;
}
//
bool isBullish = IsBullish(dir);
bool isAll = dir == X_DIRECTION_NONE ||
dir == X_DIRECTION_ALL;
//
if (isAll || isBullish)
{
//
// Support Zone ...
bool hasSupportZone = HasSupportZone();
if (hasSupportZone)
{
//
XCSupportZone *zone = supportZone;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Demand Zone ...
bool hasDemandZone = HasDemandZone();
if (hasDemandZone)
{
//
XCDemandZone *zone = demandZone;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Order Block ...
bool hasOrderBlock = HasOrderBlock() &&
orderBlock.IsBullish();
if (hasOrderBlock)
{
//
XCOrderBlock *zone = orderBlock;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Fair Value Gap ...
bool hasFairValueGap = HasFairValueGap() &&
fairValueGap.IsBullish();
if (hasFairValueGap)
{
//
XCFVG *zone = fairValueGap;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
}
//
if (isAll || !isBullish)
{
//
// Resistance Zone ...
bool hasResistanceZone = HasResistanceZone();
if (hasResistanceZone)
{
//
XCResistanceZone *zone = resistanceZone;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Supply Zone ...
bool hasSupplyZone = HasSupplyZone();
if (hasSupplyZone)
{
//
XCSupplyZone *zone = supplyZone;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Order Block ...
bool hasOrderBlock = HasOrderBlock() &&
orderBlock.IsBearish();
if (hasOrderBlock)
{
//
XCOrderBlock *zone = orderBlock;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
//
// Fair Value Gap ...
bool hasFairValueGap = HasFairValueGap() &&
fairValueGap.IsBearish();
if (hasFairValueGap)
{
//
XCFVG *zone = fairValueGap;
//
from =
!IsValid(from) ||
from > zone.From()
? zone.From()
: from;
//
to =
!IsValid(to) ||
to < zone.To()
? zone.To()
: from;
}
}
//
result =
to > from &&
IsValid(to) &&
IsValid(from);
//
return result;
}
/**
* Calculate Box Model Data ...
*
* @param dir: ENUM_X_DIRECTION Member, Specified Direction ...
* @param upper: Double ...
* @param lower: Double ...
* @param from: DateTime ...
* @param to: DateTime ...
*
* @return ( bool )
*/
bool GetBoxData(
ENUM_X_DIRECTION dir,
double &upper,
double &lower,
datetime &from,
datetime &to //
)
{
//
bool result = false;
//
bool hasBoundary = GetBoundary(
dir,
upper,
lower //
);
//
bool hasLifetime = GetLifetime(
dir,
from,
to //
);
//
result =
hasBoundary &&
hasLifetime;
//
return result;
}
//
};
@@ -5529,7 +5811,7 @@ struct XMarketStructure
highestPeakBar.IsValid() &&
HasChild(valePriceZones) &&
peakBelowHighestPeakValeBar.IsValid() &&
highestPeakValeBreakeDownBar.IsValid()
highestPeakValeBreakeDownBar.IsValid()
//
;