add support of Consolidation Zone ibside XPOIDetector and XPOIState ...

This commit is contained in:
2025-02-26 22:34:40 +03:30
parent 476bcaece8
commit af9c398338
14 changed files with 1993 additions and 1986 deletions
+351 -25
View File
@@ -405,6 +405,100 @@ class XCPOIDetector : public XCBaseAlert
mFairValueGapSameBars = value;
}
/**
* Get Minimum Length of Cnsolidation Zone ...
*
* @return ( int )
*/
int ConsolidationZoneMinLoopback()
{
return mConsolidationZoneMinLoopback;
}
/**
* Set Minimum Length of Cnsolidation Zone ...
*
* @param value: int ...
*/
void ConsolidationZoneMinLoopback(int value)
{
//
if (value < 1)
{
value = 1;
}
//
mConsolidationZoneMinLoopback = value;
}
/**
* Get Consolidation Zone Range in Point ...
*
* @return ( double )
*/
double ConsolidationZoneRangeInPoint()
{
return mConsolidationZoneRangeInPoint;
}
/**
* Set Consolidation Zone Range in Point ...
*
* @param value: double
*/
void ConsolidationZoneRangeInPoint(double value)
{
//
if (value < 50)
{
value = 50;
}
//
mConsolidationZoneRangeInPoint = value;
}
/**
* Get Consolidation Zone Upper Applied To ...
*
* @return ( ENUM_APPLIED_PRICE )
*/
ENUM_APPLIED_PRICE ConsolidationZonesLowerAppliedTo()
{
return mConsolidationZonesLowerAppliedTo;
}
/**
* Set Consolidation Zone Upper Applied To ...
*
* @param value: ENUM_APPLIED_PRICE
*/
void ConsolidationZonesLowerAppliedTo(ENUM_APPLIED_PRICE value = PRICE_LOW)
{
mConsolidationZonesLowerAppliedTo = value;
}
/**
* Get Consolidation Zone Lower Applied To ...
*
* @return ( ENUM_APPLIED_PRICE )
*/
ENUM_APPLIED_PRICE ConsolidationZonesUpperAppliedTo()
{
return mConsolidationZonesUpperAppliedTo;
}
/**
* Set Consolidation Zone Lower Applied To ...
*
* @param value: ENUM_APPLIED_PRICE
*/
void ConsolidationZonesUpperAppliedTo(ENUM_APPLIED_PRICE value = PRICE_HIGH)
{
mConsolidationZonesUpperAppliedTo = value;
}
//
// Actions ...
@@ -426,6 +520,10 @@ class XCPOIDetector : public XCBaseAlert
SupResRangeAsStart(true);
RejectionShadowPercent(70);
MaxAllowedLoopbackForInit(578);
ConsolidationZoneMinLoopback(5);
ConsolidationZoneRangeInPoint(50);
ConsolidationZonesLowerAppliedTo(PRICE_LOW);
ConsolidationZonesUpperAppliedTo(PRICE_HIGH);
}
/**
@@ -560,6 +658,14 @@ class XCPOIDetector : public XCBaseAlert
false //
);
//
// Consolidation Zone ...
DetectConsolidationZone(
iBar,
iEvent,
false //
);
//
canContinue =
has &&
@@ -1027,6 +1133,20 @@ class XCPOIDetector : public XCBaseAlert
}
}
//
has = DetectConsolidationZone(
iBar,
iEvent //
);
if (has)
{
//
Add(
iEvent,
events //
);
}
//
iBar.Clean();
mLock = false;
@@ -1169,6 +1289,24 @@ class XCPOIDetector : public XCBaseAlert
state.bearishFairValueGaps //
);
//
Copy(
mConsolidationZones,
state.consolidationZones //
);
//
Copy(
mBullishConsolidationZones,
state.bullishConsolidationZones //
);
//
Copy(
mBearishConsolidationZones,
state.bearishConsolidationZones //
);
//
}
@@ -1193,51 +1331,58 @@ class XCPOIDetector : public XCBaseAlert
void CleanCollections()
{
//
Clean(mEventListeners);
Clean(mSwings);
Clean(mSwingLows);
Clean(mSwingHighs);
Clean(mMomentumBars);
Clean(mBullishMomentumBars);
Clean(mBearishMomentumBars);
Clean(mRejectionBars);
Clean(mBullishRejectionBars);
Clean(mBearishRejectionBars);
Clean(mSupportZones);
Clean(mDemandZones);
Clean(mSupplyZones);
Clean(mResistanceZones);
Clean(mFairValueGaps);
Clean(mBullishFairValueGaps);
Clean(mBearishFairValueGaps);
Clean(mOrderBlocks);
Clean(mMomentumBars);
Clean(mSupportZones);
Clean(mRejectionBars);
Clean(mFairValueGaps);
Clean(mEventListeners);
Clean(mResistanceZones);
Clean(mBullishOrderBlocks);
Clean(mBearishOrderBlocks);
Clean(mConsolidationZones);
Clean(mBullishMomentumBars);
Clean(mBearishMomentumBars);
Clean(mBullishRejectionBars);
Clean(mBearishRejectionBars);
Clean(mBullishFairValueGaps);
Clean(mBearishFairValueGaps);
Clean(mBullishConsolidationZones);
Clean(mBearishConsolidationZones);
}
//
void ReverseCollections() {
void ReverseCollections()
{
//
ArrayReverse(mEventListeners);
ArrayReverse(mSwings);
ArrayReverse(mSwingLows);
ArrayReverse(mSwingHighs);
ArrayReverse(mMomentumBars);
ArrayReverse(mBullishMomentumBars);
ArrayReverse(mBearishMomentumBars);
ArrayReverse(mRejectionBars);
ArrayReverse(mBullishRejectionBars);
ArrayReverse(mBearishRejectionBars);
ArrayReverse(mSupportZones);
ArrayReverse(mDemandZones);
ArrayReverse(mSupplyZones);
ArrayReverse(mResistanceZones);
ArrayReverse(mFairValueGaps);
ArrayReverse(mBullishFairValueGaps);
ArrayReverse(mBearishFairValueGaps);
ArrayReverse(mOrderBlocks);
ArrayReverse(mMomentumBars);
ArrayReverse(mSupportZones);
ArrayReverse(mRejectionBars);
ArrayReverse(mFairValueGaps);
ArrayReverse(mEventListeners);
ArrayReverse(mResistanceZones);
ArrayReverse(mBullishOrderBlocks);
ArrayReverse(mBearishOrderBlocks);
ArrayReverse(mConsolidationZones);
ArrayReverse(mBullishMomentumBars);
ArrayReverse(mBearishMomentumBars);
ArrayReverse(mBullishRejectionBars);
ArrayReverse(mBearishRejectionBars);
ArrayReverse(mBullishFairValueGaps);
ArrayReverse(mBearishFairValueGaps);
ArrayReverse(mBullishConsolidationZones);
ArrayReverse(mBearishConsolidationZones);
}
//
@@ -1374,6 +1519,24 @@ class XCPOIDetector : public XCBaseAlert
maxAllowed //
);
//
CleanupArray(
mConsolidationZones,
maxAllowed //
);
//
CleanupArray(
mBullishConsolidationZones,
maxAllowed //
);
//
CleanupArray(
mBearishConsolidationZones,
maxAllowed //
);
//
}
@@ -2928,6 +3091,160 @@ class XCPOIDetector : public XCBaseAlert
return result;
}
/**
* Detect Consolidation Zones ...
*
* @param bar: XOHCL instance ...
* @param reversal: boolean reversal add to collection ...
*
* @return ( bool )
*/
bool DetectConsolidationZone(
XOHCL &bar,
ENUM_XPOI_EVENTS &state,
bool reversal = false //
)
{
//
bool result = false;
//
state = X_POI_EVENT_NONE;
//
XConsolidationZone cZone;
result = mBarAnalyser.HasConsolidationZone(
bar,
cZone,
mConsolidationZoneMinLoopback,
mConsolidationZoneRangeInPoint,
mConsolidationZonesUpperAppliedTo,
mConsolidationZonesLowerAppliedTo //
);
if (!result)
{
//
cZone.Clean();
//
return result;
}
//
// Add ...
//
bool isBullish = IsBullish(cZone.dir);
bool isBearish = IsBearish(cZone.dir);
//
int idx = FindIndex(
cZone,
mConsolidationZones //
);
result = !IsValidIndex(idx);
if (!result)
{
//
cZone.Clean();
//
return result;
}
//
if (reversal)
{
//
ArrayReverse(mConsolidationZones);
//
AddRef(
cZone,
mConsolidationZones //
);
//
ArrayReverse(mConsolidationZones);
}
else
{
//
AddRef(
cZone,
mConsolidationZones //
);
}
//
if (isBullish)
{
//
// Add Swings ...
if (reversal)
{
//
ArrayReverse(mBullishConsolidationZones);
//
AddRef(
cZone,
mBullishConsolidationZones //
);
//
ArrayReverse(mBullishConsolidationZones);
}
else
{
//
AddRef(
cZone,
mBullishConsolidationZones //
);
}
}
else if (isBearish)
{
//
// Add Swings ...
if (reversal)
{
//
ArrayReverse(mBearishConsolidationZones);
//
AddRef(
cZone,
mBearishConsolidationZones //
);
//
ArrayReverse(mBearishConsolidationZones);
}
else
{
//
AddRef(
cZone,
mBearishConsolidationZones //
);
}
}
//
state =
IsBullish(cZone.dir)
? X_BULLISH_CONSOLIDATION_ZONE_DETECTED
: X_BEARISH_CONSOLIDATION_ZONE_DETECTED;
//
cZone.Clean();
//
return result;
}
//
private:
//
@@ -2991,6 +3308,15 @@ class XCPOIDetector : public XCBaseAlert
XCOrderBlock *mBearishOrderBlocks[]; // Holds Founded Bearish OrderBlocks ...
int mOrderBlockSameBars; // OrderBlock Detection Same Bars ...
//
int mConsolidationZoneMinLoopback; // Minimum Length of Cnsolidation Zone ...
double mConsolidationZoneRangeInPoint; // Consolidation Zone Range in Point ...
XConsolidationZone mConsolidationZones[]; // Holds Founded Consolidation Zones ...
XConsolidationZone mBullishConsolidationZones[]; // Holds Founded Bullish Consolidation Zones ...
XConsolidationZone mBearishConsolidationZones[]; // Holds Founded Bearish Consolidation Zones ...
ENUM_APPLIED_PRICE mConsolidationZonesLowerAppliedTo; // Consolidation Zone Upper Applied To ...
ENUM_APPLIED_PRICE mConsolidationZonesUpperAppliedTo; // Consolidation Zone Lower Applied To ...
//
};